Mercurial > hgbook
annotate tools/po4a/lib/Locale/Po4a/Po.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 # Locale::Po4a::Po -- manipulation of po files |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
2 # $Id: Po.pm,v 1.95 2009-02-28 22:18:39 nekral-guest Exp $ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
3 # |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
4 # This program is free software; you may redistribute it and/or modify it |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
5 # under the terms of GPL (see COPYING). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
6 |
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 # Modules and declarations |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
9 ############################################################################ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
10 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
11 =head1 NAME |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
12 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
13 Locale::Po4a::Po - po file manipulation module |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
14 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
15 =head1 SYNOPSIS |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
16 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
17 use Locale::Po4a::Po; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
18 my $pofile=Locale::Po4a::Po->new(); |
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 # Read po file |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
21 $pofile->read('file.po'); |
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 # Add an entry |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
24 $pofile->push('msgid' => 'Hello', 'msgstr' => 'bonjour', |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
25 'flags' => "wrap", 'reference'=>'file.c:46'); |
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 # Extract a translation |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
28 $pofile->gettext("Hello"); # returns 'bonjour' |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
29 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
30 # Write back to a file |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
31 $pofile->write('otherfile.po'); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
32 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
33 =head1 DESCRIPTION |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
34 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
35 Locale::Po4a::Po is a module that allows you to manipulate message |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
36 catalogs. You can load and write from/to a file (which extension is often |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
37 I<po>), you can build new entries on the fly or request for the translation |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
38 of a string. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
39 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
40 For a more complete description of message catalogs in the po format and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
41 their use, please refer to the documentation of the gettext program. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
42 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
43 This module is part of the PO4A project, which objective is to use po files |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
44 (designed at origin to ease the translation of program messages) to |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
45 translate everything, including documentation (man page, info manual), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
46 package description, debconf templates, and everything which may benefit |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
47 from this. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
48 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
49 =head1 OPTIONS ACCEPTED BY THIS MODULE |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
50 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
51 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
52 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
53 =item porefs |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
54 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
55 This specifies the reference format. It can be one of 'none' to not produce |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
56 any reference, 'noline' to not specify the line number, and 'full' to |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
57 include complete references. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
58 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
59 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
60 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
61 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
62 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
63 use IO::File; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
64 |
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 require Exporter; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
67 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
68 package Locale::Po4a::Po; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
69 use DynaLoader; |
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 use Locale::Po4a::Common qw(wrap_msg wrap_mod wrap_ref_mod dgettext); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
72 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
73 use subs qw(makespace); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
74 use vars qw(@ISA @EXPORT_OK); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
75 @ISA = qw(Exporter DynaLoader); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
76 @EXPORT = qw(%debug); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
77 @EXPORT_OK = qw(&move_po_if_needed); |
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 use Locale::Po4a::TransTractor; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
80 # 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
|
81 eval("bootstrap Locale::Po4a::Po $Locale::Po4a::TransTractor::VERSION"); |
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 use 5.006; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
84 use strict; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
85 use warnings; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
86 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
87 use Carp qw(croak); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
88 use File::Path; # mkdir before write |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
89 use File::Copy; # move |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
90 use POSIX qw(strftime floor); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
91 use Time::Local; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
92 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
93 use Encode; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
94 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
95 my @known_flags=qw(wrap no-wrap c-format fuzzy); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
96 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
97 our %debug=('canonize' => 0, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
98 'quote' => 0, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
99 'escape' => 0, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
100 'encoding' => 0, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
101 'filter' => 0); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
102 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
103 =head1 Functions about whole message catalogs |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
104 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
105 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
106 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
107 =item new() |
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 Creates a new message catalog. If an argument is provided, it's the name of |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
110 a po file we should load. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
111 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
112 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
113 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
114 sub new { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
115 my ($this, $options) = (shift, shift); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
116 my $class = ref($this) || $this; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
117 my $self = {}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
118 bless $self, $class; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
119 $self->initialize($options); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
120 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
121 my $filename = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
122 $self->read($filename) if defined($filename) && length($filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
123 return $self; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
124 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
125 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
126 # Return the numerical timezone (e.g. +0200) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
127 # Neither the %z nor the %s formats of strftime are portable: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
128 # '%s' is not supported on Solaris and '%z' indicates |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
129 # "2006-10-25 19:36E. Europe Standard Time" on MS Windows. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
130 sub timezone { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
131 my @g = gmtime(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
132 my @l = localtime(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
133 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
134 my $diff; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
135 $diff = floor(timelocal(@l)/60 +0.5); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
136 $diff -= floor(timelocal(@g)/60 +0.5); |
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 my $h = floor($diff / 60) + $l[8]; # $l[8] indicates if we are currently |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
139 # in a daylight saving time zone |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
140 my $m = $diff%60; |
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 return sprintf "%+03d%02d\n", $h, $m; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
143 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
144 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
145 sub initialize { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
146 my ($self, $options) = (shift, shift); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
147 my $date = strftime("%Y-%m-%d %H:%M", localtime).timezone(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
148 chomp $date; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
149 # $options = ref($options) || $options; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
150 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
151 $self->{options}{'porefs'}= 'full'; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
152 $self->{options}{'msgid-bugs-address'}= undef; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
153 $self->{options}{'copyright-holder'}= "Free Software Foundation, Inc."; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
154 $self->{options}{'package-name'}= "PACKAGE"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
155 $self->{options}{'package-version'}= "VERSION"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
156 foreach my $opt (keys %$options) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
157 if ($options->{$opt}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
158 die wrap_mod("po4a::po", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
159 dgettext ("po4a", "Unknown option: %s"), $opt) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
160 unless exists $self->{options}{$opt}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
161 $self->{options}{$opt} = $options->{$opt}; |
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 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
164 $self->{options}{'porefs'} =~ /^(full|noline|none)$/ || |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
165 die wrap_mod("po4a::po", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
166 dgettext ("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
167 "Invalid value for option 'porefs' ('%s' is ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
168 "not one of 'full', 'noline' or 'none')"), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
169 $self->{options}{'porefs'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
170 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
171 $self->{po}=(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
172 $self->{count}=0; # number of msgids in the PO |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
173 # count_doc: number of strings in the document |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
174 # (duplicate strings counted multiple times) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
175 $self->{count_doc}=0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
176 $self->{header_comment}= |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
177 " SOME DESCRIPTIVE TITLE\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
178 ." Copyright (C) YEAR ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
179 $self->{options}{'copyright-holder'}."\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
180 ." This file is distributed under the same license ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
181 "as the ".$self->{options}{'package-name'}." package.\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
182 ." FIRST AUTHOR <EMAIL\@ADDRESS>, YEAR.\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
183 ."\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
184 .", fuzzy"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
185 # $self->header_tag="fuzzy"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
186 $self->{header}=escape_text("Project-Id-Version: ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
187 $self->{options}{'package-name'}." ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
188 $self->{options}{'package-version'}."\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
189 ((defined $self->{options}{'msgid-bugs-address'})? |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
190 "Report-Msgid-Bugs-To: ".$self->{options}{'msgid-bugs-address'}."\n": |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
191 ""). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
192 "POT-Creation-Date: $date\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
193 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
194 "Last-Translator: FULL NAME <EMAIL\@ADDRESS>\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
195 "Language-Team: LANGUAGE <LL\@li.org>\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
196 "MIME-Version: 1.0\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
197 "Content-Type: text/plain; charset=CHARSET\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
198 "Content-Transfer-Encoding: ENCODING"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
199 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
200 $self->{encoder}=find_encoding("ascii"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
201 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
202 # To make stats about gettext hits |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
203 $self->stats_clear(); |
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 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
206 =item read($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
207 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
208 Reads a po file (which name is given as argument). Previously existing |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
209 entries in self are not removed, the new ones are added to the end of the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
210 catalog. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
211 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
212 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
213 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
214 sub read { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
215 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
216 my $filename=shift |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
217 or croak wrap_mod("po4a::po", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
218 dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
219 "Please provide a non-null filename")); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
220 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
221 my $fh; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
222 if ($filename eq '-') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
223 $fh=*STDIN; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
224 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
225 open $fh,"<$filename" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
226 or croak wrap_mod("po4a::po", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
227 dgettext("po4a", "Can't read from %s: %s"), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
228 $filename, $!); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
229 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
230 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
231 ## Read paragraphs line-by-line |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
232 my $pofile=""; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
233 my $textline; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
234 while (defined ($textline = <$fh>)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
235 $pofile .= $textline; |
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 # close INPUT |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
238 # or croak (sprintf(dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
239 # "Can't close %s after reading: %s"), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
240 # $filename,$!)."\n"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
241 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
242 my $linenum=0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
243 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
244 foreach my $msg (split (/\n\n/,$pofile)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
245 my ($msgid,$msgstr,$comment,$automatic,$reference,$flags,$buffer); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
246 my ($msgid_plural, $msgstr_plural); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
247 foreach my $line (split (/\n/,$msg)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
248 $linenum++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
249 if ($line =~ /^#\. ?(.*)$/) { # Automatic comment |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
250 $automatic .= (defined($automatic) ? "\n" : "").$1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
251 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
252 } elsif ($line =~ /^#: ?(.*)$/) { # reference |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
253 $reference .= (defined($reference) ? "\n" : "").$1; |
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 } elsif ($line =~ /^#, ?(.*)$/) { # flags |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
256 $flags .= (defined($flags) ? "\n" : "").$1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
257 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
258 } elsif ($line =~ /^#(.*)$/) { # Translator comments |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
259 $comment .= (defined($comment) ? "\n" : "").($1||""); |
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 } elsif ($line =~ /^msgid (".*")$/) { # begin of msgid |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
262 $buffer = $1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
263 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
264 } elsif ($line =~ /^msgid_plural (".*")$/) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
265 # begin of msgid_plural, end of msgid |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
266 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
267 $msgid = $buffer; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
268 $buffer = $1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
269 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
270 } elsif ($line =~ /^msgstr (".*")$/) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
271 # begin of msgstr, end of msgid |
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 $msgid = $buffer; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
274 $buffer = "$1"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
275 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
276 } elsif ($line =~ /^msgstr\[([0-9]+)\] (".*")$/) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
277 # begin of msgstr[x], end of msgid_plural or msgstr[x-1] |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
278 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
279 # Note: po4a cannot uses plural forms |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
280 # (no integer to use the plural form) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
281 # * drop the msgstr[x] where x >= 2 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
282 # * use msgstr[0] as the translation of msgid |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
283 # * use msgstr[1] as the translation of msgid_plural |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
284 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
285 if ($1 eq "0") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
286 $msgid_plural = $buffer; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
287 $buffer = "$2"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
288 } elsif ($1 eq "1") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
289 $msgstr = $buffer; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
290 $buffer = "$2"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
291 } elsif ($1 eq "2") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
292 $msgstr_plural = $buffer; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
293 warn wrap_ref_mod("$filename:$linenum", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
294 "po4a::po", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
295 dgettext("po4a", "Messages with more than 2 plural forms are not supported.")); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
296 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
297 } elsif ($line =~ /^(".*")$/) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
298 # continuation of a line |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
299 $buffer .= "\n$1"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
300 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
301 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
302 warn wrap_ref_mod("$filename:$linenum", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
303 "po4a::po", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
304 dgettext("po4a", "Strange line: -->%s<--"), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
305 $line); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
306 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
307 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
308 $linenum++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
309 if (defined $msgid_plural) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
310 $msgstr_plural=$buffer; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
311 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
312 $msgid = unquote_text($msgid) if (defined($msgid)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
313 $msgstr = unquote_text($msgstr) if (defined($msgstr)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
314 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
315 $self->push_raw ('msgid' => $msgid, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
316 'msgstr' => $msgstr, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
317 'reference' => $reference, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
318 'flags' => $flags, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
319 'comment' => $comment, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
320 'automatic' => $automatic, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
321 'plural' => 0); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
322 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
323 $msgid_plural = unquote_text($msgid_plural) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
324 if (defined($msgid_plural)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
325 $msgstr_plural = unquote_text($msgstr_plural) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
326 if (defined($msgstr_plural)); |
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 $self->push_raw ('msgid' => $msgid_plural, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
329 'msgstr' => $msgstr_plural, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
330 'reference' => $reference, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
331 'flags' => $flags, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
332 'comment' => $comment, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
333 'automatic' => $automatic, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
334 'plural' => 1); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
335 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
336 $msgstr=$buffer; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
337 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
338 $msgid = unquote_text($msgid) if (defined($msgid)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
339 $msgstr = unquote_text($msgstr) if (defined($msgstr)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
340 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
341 $self->push_raw ('msgid' => $msgid, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
342 'msgstr' => $msgstr, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
343 'reference' => $reference, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
344 'flags' => $flags, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
345 'comment' => $comment, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
346 'automatic' => $automatic); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
347 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
348 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
349 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
350 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
351 =item write($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
352 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
353 Writes the current catalog to the given file. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
354 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
355 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
356 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
357 sub write{ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
358 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
359 my $filename=shift |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
360 or croak dgettext("po4a","Can't write to a file without filename")."\n"; |
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 my $fh; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
363 if ($filename eq '-') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
364 $fh=\*STDOUT; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
365 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
366 # make sure the directory in which we should write the localized |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
367 # file exists |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
368 my $dir = $filename; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
369 if ($dir =~ m|/|) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
370 $dir =~ s|/[^/]*$||; |
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 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
|
373 if (length ($dir) && ! -e $dir); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
374 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
375 open $fh,">$filename" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
376 or croak wrap_mod("po4a::po", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
377 dgettext("po4a", "Can't write to %s: %s"), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
378 $filename, $!); |
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 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
381 print $fh "".format_comment($self->{header_comment},"") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
382 if defined($self->{header_comment}) && length($self->{header_comment}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
383 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
384 print $fh "msgid \"\"\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
385 print $fh "msgstr ".quote_text($self->{header})."\n\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
386 |
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 my $buf_msgstr_plural; # USed to keep the first msgstr of plural forms |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
389 my $first=1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
390 foreach my $msgid ( sort { ($self->{po}{"$a"}{'pos'}) <=> |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
391 ($self->{po}{"$b"}{'pos'}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
392 } keys %{$self->{po}}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
393 my $output=""; |
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 if ($first) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
396 $first=0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
397 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
398 $output .= "\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
399 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
400 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
401 $output .= format_comment($self->{po}{$msgid}{'comment'},"") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
402 if defined($self->{po}{$msgid}{'comment'}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
403 && length ($self->{po}{$msgid}{'comment'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
404 if ( defined($self->{po}{$msgid}{'automatic'}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
405 && length ($self->{po}{$msgid}{'automatic'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
406 foreach my $comment (split(/\\n/,$self->{po}{$msgid}{'automatic'})) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
407 { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
408 $output .= format_comment($comment, ". ") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
409 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
410 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
411 $output .= format_comment($self->{po}{$msgid}{'type'},". type: ") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
412 if defined($self->{po}{$msgid}{'type'}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
413 && length ($self->{po}{$msgid}{'type'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
414 $output .= format_comment($self->{po}{$msgid}{'reference'},": ") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
415 if defined($self->{po}{$msgid}{'reference'}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
416 && length ($self->{po}{$msgid}{'reference'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
417 $output .= "#, ". join(", ", sort split(/\s+/,$self->{po}{$msgid}{'flags'}))."\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
418 if defined($self->{po}{$msgid}{'flags'}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
419 && length ($self->{po}{$msgid}{'flags'}); |
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 if (exists $self->{po}{$msgid}{'plural'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
422 if ($self->{po}{$msgid}{'plural'} == 0) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
423 if ($self->get_charset =~ /^utf-8$/i) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
424 my $msgstr = Encode::decode_utf8($self->{po}{$msgid}{'msgstr'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
425 $msgid = Encode::decode_utf8($msgid); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
426 $output .= Encode::encode_utf8("msgid ".quote_text($msgid)."\n"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
427 $buf_msgstr_plural = Encode::encode_utf8("msgstr[0] ".quote_text($msgstr)."\n"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
428 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
429 $output = "msgid ".quote_text($msgid)."\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
430 $buf_msgstr_plural = "msgstr[0] ".quote_text($self->{po}{$msgid}{'msgstr'})."\n"; |
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 } elsif ($self->{po}{$msgid}{'plural'} == 1) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
433 # TODO: there may be only one plural form |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
434 if ($self->get_charset =~ /^utf-8$/i) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
435 my $msgstr = Encode::decode_utf8($self->{po}{$msgid}{'msgstr'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
436 $msgid = Encode::decode_utf8($msgid); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
437 $output = Encode::encode_utf8("msgid_plural ".quote_text($msgid)."\n"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
438 $output .= $buf_msgstr_plural; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
439 $output .= Encode::encode_utf8("msgstr[1] ".quote_text($msgstr)."\n"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
440 $buf_msgstr_plural = ""; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
441 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
442 $output = "msgid_plural ".quote_text($msgid)."\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
443 $output .= $buf_msgstr_plural; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
444 $output .= "msgstr[1] ".quote_text($self->{po}{$msgid}{'msgstr'})."\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
445 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
446 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
447 die wrap_msg(dgettext("po4a","Can't write PO files with more than two plural forms.")); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
448 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
449 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
450 if ($self->get_charset =~ /^utf-8$/i) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
451 my $msgstr = Encode::decode_utf8($self->{po}{$msgid}{'msgstr'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
452 $msgid = Encode::decode_utf8($msgid); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
453 $output .= Encode::encode_utf8("msgid ".quote_text($msgid)."\n"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
454 $output .= Encode::encode_utf8("msgstr ".quote_text($msgstr)."\n"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
455 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
456 $output .= "msgid ".quote_text($msgid)."\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
457 $output .= "msgstr ".quote_text($self->{po}{$msgid}{'msgstr'})."\n"; |
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 } |
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 print $fh $output; |
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 # print STDERR "$fh"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
464 # if ($filename ne '-') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
465 # close $fh |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
466 # or croak (sprintf(dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
467 # "Can't close %s after writing: %s\n"), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
468 # $filename,$!)); |
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 } |
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 write_if_needed($$) |
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 Like write, but if the PO or POT file already exists, the object will be |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
475 written in a temporary file which will be compared with the existing file |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
476 to check that the update is needed (this avoids to change a POT just to |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
477 update a line reference or the POT-Creation-Date field). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
478 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
479 =cut |
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 sub move_po_if_needed { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
482 my ($new_po, $old_po, $backup) = (shift, shift, shift); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
483 my $diff; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
484 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
485 if (-e $old_po) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
486 my $diff_ignore = "-I'^#:' " |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
487 ."-I'^\"POT-Creation-Date:' " |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
488 ."-I'^\"PO-Revision-Date:'"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
489 $diff = qx(diff -q $diff_ignore $old_po $new_po); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
490 if ( $diff eq "" ) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
491 unlink $new_po |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
492 or die wrap_msg(dgettext("po4a","Can't unlink %s: %s."), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
493 $new_po, $!); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
494 # touch the old PO |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
495 my ($atime, $mtime) = (time,time); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
496 utime $atime, $mtime, $old_po; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
497 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
498 if ($backup) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
499 copy $old_po, $old_po."~" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
500 or die wrap_msg(dgettext("po4a","Can't copy %s to %s: %s."), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
501 $old_po, $old_po."~", $!); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
502 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
503 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
504 move $new_po, $old_po |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
505 or die wrap_msg(dgettext("po4a","Can't move %s to %s: %s."), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
506 $new_po, $old_po, $!); |
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 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
509 move $new_po, $old_po |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
510 or die wrap_msg(dgettext("po4a","Can't move %s to %s: %s."), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
511 $new_po, $old_po, $!); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
512 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
513 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
514 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
515 sub write_if_needed { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
516 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
517 my $filename=shift |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
518 or croak dgettext("po4a","Can't write to a file without filename")."\n"; |
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 if (-e $filename) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
521 my ($tmp_filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
522 (undef,$tmp_filename)=File::Temp->tempfile($filename."XXXX", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
523 DIR => "/tmp", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
524 OPEN => 0, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
525 UNLINK => 0); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
526 $self->write($tmp_filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
527 move_po_if_needed($tmp_filename, $filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
528 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
529 $self->write($filename); |
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 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
533 =item gettextize($$) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
534 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
535 This function produces one translated message catalog from two catalogs, an |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
536 original and a translation. This process is described in L<po4a(7)|po4a.7>, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
537 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
|
538 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
539 =cut |
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 sub gettextize { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
542 my $this = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
543 my $class = ref($this) || $this; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
544 my ($poorig,$potrans)=(shift,shift); |
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 $pores=Locale::Po4a::Po->new(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
547 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
548 my $please_fail = 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
549 my $toobad = dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
550 "\nThe gettextization failed (once again). Don't give up, ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
551 "gettextizing is a subtle art, but this is only needed once ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
552 "to convert a project to the gorgeous luxus offered by po4a ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
553 "to translators.". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
554 "\nPlease refer to the po4a(7) documentation, the section ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
555 "\"HOWTO convert a pre-existing translation to po4a?\" ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
556 "contains several hints to help you in your task"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
557 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
558 # Don't fail right now when the entry count does not match. Instead, give |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
559 # it a try so that the user can see where we fail (which is probably where |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
560 # the problem is). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
561 if ($poorig->count_entries_doc() > $potrans->count_entries_doc()) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
562 warn wrap_mod("po4a gettextize", dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
563 "Original has more strings than the translation (%d>%d). ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
564 "Please fix it by editing the translated version to add ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
565 "some dummy entry."), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
566 $poorig->count_entries_doc(), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
567 $potrans->count_entries_doc()); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
568 $please_fail = 1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
569 } elsif ($poorig->count_entries_doc() < $potrans->count_entries_doc()) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
570 warn wrap_mod("po4a gettextize", dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
571 "Original has less strings than the translation (%d<%d). ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
572 "Please fix it by removing the extra entry from the ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
573 "translated file. You may need an addendum (cf po4a(7)) ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
574 "to reput the chunk in place after gettextization. A ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
575 "possible cause is that a text duplicated in the original ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
576 "is not translated the same way each time. Remove one of ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
577 "the translations, and you're fine."), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
578 $poorig->count_entries_doc(), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
579 $potrans->count_entries_doc()); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
580 $please_fail = 1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
581 } |
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 if ( $poorig->get_charset =~ /^utf-8$/i ) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
584 $potrans->to_utf8; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
585 $pores->set_charset("utf-8"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
586 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
587 if ($potrans->get_charset eq "CHARSET") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
588 $pores->set_charset("ascii"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
589 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
590 $pores->set_charset($potrans->get_charset); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
591 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
592 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
593 print "Po character sets:\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
594 " original=".$poorig->get_charset."\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
595 " translated=".$potrans->get_charset."\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
596 " result=".$pores->get_charset."\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
597 if $debug{'encoding'}; |
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 for (my ($o,$t)=(0,0) ; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
600 $o<$poorig->count_entries_doc() && $t<$potrans->count_entries_doc(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
601 $o++,$t++) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
602 # |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
603 # Extract some informations |
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 my ($orig,$trans)=($poorig->msgid_doc($o),$potrans->msgid_doc($t)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
606 # print STDERR "Matches [[$orig]]<<$trans>>\n"; |
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 ($reforig,$reftrans)=($poorig->{po}{$orig}{'reference'}, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
609 $potrans->{po}{$trans}{'reference'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
610 my ($typeorig,$typetrans)=($poorig->{po}{$orig}{'type'}, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
611 $potrans->{po}{$trans}{'type'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
612 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
613 # |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
614 # Make sure the type of both string exist |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
615 # |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
616 die wrap_mod("po4a gettextize", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
617 "Internal error: type of original string number %s ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
618 "isn't provided", $o) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
619 if ($typeorig eq ''); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
620 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
621 die wrap_mod("po4a gettextize", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
622 "Internal error: type of translated string number %s ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
623 "isn't provided", $o) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
624 if ($typetrans eq ''); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
625 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
626 # |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
627 # Make sure both type are the same |
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 ($typeorig ne $typetrans){ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
630 $pores->write("gettextization.failed.po"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
631 die wrap_msg(dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
632 "po4a gettextization: Structure disparity between ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
633 "original and translated files:\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
634 "msgid (at %s) is of type '%s' while\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
635 "msgstr (at %s) is of type '%s'.\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
636 "Original text: %s\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
637 "Translated text: %s\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
638 "(result so far dumped to gettextization.failed.po)"). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
639 "%s", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
640 $reforig, $typeorig, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
641 $reftrans, $typetrans, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
642 $orig, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
643 $trans, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
644 $toobad); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
645 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
646 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
647 # |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
648 # Push the entry |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
649 # |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
650 my $flags; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
651 if (defined $poorig->{po}{$orig}{'flags'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
652 $flags = $poorig->{po}{$orig}{'flags'}." fuzzy"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
653 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
654 $flags = "fuzzy"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
655 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
656 $pores->push_raw('msgid' => $orig, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
657 'msgstr' => $trans, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
658 'flags' => $flags, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
659 'type' => $typeorig, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
660 'reference' => $reforig, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
661 'conflict' => 1, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
662 'transref' => $potrans->{po}{$trans}{'reference'}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
663 unless (defined($pores->{po}{$orig}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
664 and ($pores->{po}{$orig}{'msgstr'} eq $trans)) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
665 # FIXME: maybe we should be smarter about what reference should be |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
666 # sent to push_raw. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
667 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
668 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
669 # make sure we return a useful error message when entry count differ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
670 die "$toobad\n" if $please_fail; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
671 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
672 return $pores; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
673 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
674 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
675 =item filter($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
676 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
677 This function extracts a catalog from an existing one. Only the entries having |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
678 a reference in the given file will be placed in the resulting catalog. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
679 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
680 This function parses its argument, converts it to a perl function definition, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
681 eval this definition and filter the fields for which this function returns |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
682 true. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
683 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
684 I love perl sometimes ;) |
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 =cut |
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 sub filter { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
689 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
690 our $filter=shift; |
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 my $res; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
693 $res = Locale::Po4a::Po->new(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
694 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
695 # Parse the filter |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
696 our $code="sub apply { return "; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
697 our $pos=0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
698 our $length = length $filter; |
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 # explode chars to parts. How to subscript a string in Perl? |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
701 our @filter = split(//,$filter); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
702 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
703 sub gloups { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
704 my $fmt=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
705 my $space = ""; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
706 for (1..$pos){ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
707 $space .= ' '; |
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 die wrap_msg("$fmt\n$filter\n$space^ HERE"); |
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 sub showmethecode { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
712 return unless $debug{'filter'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
713 my $fmt=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
714 my $space=""; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
715 for (1..$pos){ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
716 $space .= ' '; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
717 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
718 print STDERR "$filter\n$space^ $fmt\n";#"$code\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
719 } |
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 # I dream of a lex in perl :-/ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
722 sub parse_expression { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
723 showmethecode("Begin expression") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
724 if $debug{'filter'}; |
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 gloups("Begin of expression expected, got '%s'",$filter[$pos]) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
727 unless ($filter[$pos] eq '('); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
728 $pos ++; # pass the '(' |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
729 if ($filter[$pos] eq '&') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
730 # AND |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
731 $pos++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
732 showmethecode("Begin of AND") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
733 if $debug{'filter'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
734 $code .= "("; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
735 while (1) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
736 gloups ("Unfinished AND statement.") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
737 if ($pos == $length); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
738 parse_expression(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
739 if ($filter[$pos] eq '(') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
740 $code .= " && "; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
741 } elsif ($filter[$pos] eq ')') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
742 last; # do not eat that char |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
743 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
744 gloups("End of AND or begin of sub-expression expected, got '%s'", $filter[$pos]); |
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 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
747 $code .= ")"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
748 } elsif ($filter[$pos] eq '|') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
749 # OR |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
750 $pos++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
751 $code .= "("; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
752 while (1) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
753 gloups("Unfinished OR statement.") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
754 if ($pos == $length); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
755 parse_expression(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
756 if ($filter[$pos] eq '(') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
757 $code .= " || "; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
758 } elsif ($filter[$pos] eq ')') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
759 last; # do not eat that char |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
760 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
761 gloups("End of OR or begin of sub-expression expected, got '%s'",$filter[$pos]); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
762 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
763 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
764 $code .= ")"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
765 } elsif ($filter[$pos] eq '!') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
766 # NOT |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
767 $pos++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
768 $code .= "(!"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
769 gloups("Missing sub-expression in NOT statement.") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
770 if ($pos == $length); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
771 parse_expression(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
772 $code .= ")"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
773 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
774 # must be an equal. Let's get field and argument |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
775 my ($field,$arg,$done); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
776 $field = substr($filter,$pos); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
777 gloups("EQ statement contains no '=' or invalid field name") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
778 unless ($field =~ /([a-z]*)=/i); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
779 $field = lc($1); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
780 $pos += (length $field) + 1; |
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 # check that we've got a valid field name, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
783 # and the number it referes to |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
784 # DO NOT CHANGE THE ORDER |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
785 my @names=qw(msgid msgstr reference flags comment automatic); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
786 my $fieldpos; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
787 for ($fieldpos = 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
788 $fieldpos < scalar @names && $field ne $names[$fieldpos]; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
789 $fieldpos++) {} |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
790 gloups("Invalid field name: %s",$field) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
791 if $fieldpos == scalar @names; # not found |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
792 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
793 # Now, get the argument value. It has to be between quotes, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
794 # which can be escaped |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
795 # We point right on the first char of the argument |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
796 # (first quote already eaten) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
797 my $escaped = 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
798 my $quoted = 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
799 if ($filter[$pos] eq '"') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
800 $pos++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
801 $quoted = 1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
802 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
803 showmethecode(($quoted?"Quoted":"Unquoted")." argument of field '$field'") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
804 if $debug{'filter'}; |
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 while (!$done) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
807 gloups("Unfinished EQ argument.") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
808 if ($pos == $length); |
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 if ($quoted) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
811 if ($filter[$pos] eq '\\') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
812 if ($escaped) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
813 $arg .= '\\'; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
814 $escaped = 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
815 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
816 $escaped = 1; |
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 } elsif ($escaped) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
819 if ($filter[$pos] eq '"') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
820 $arg .= '"'; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
821 $escaped = 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
822 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
823 gloups("Invalid escape sequence in argument: '\\%s'",$filter[$pos]); |
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 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
826 if ($filter[$pos] eq '"') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
827 $done = 1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
828 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
829 $arg .= $filter[$pos]; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
830 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
831 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
832 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
833 if ($filter[$pos] eq ')') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
834 # counter the next ++ since we don't want to eat |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
835 # this char |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
836 $pos--; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
837 $done = 1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
838 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
839 $arg .= $filter[$pos]; |
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 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
842 $pos++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
843 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
844 # and now, add the code to check this equality |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
845 $code .= "(\$_[$fieldpos] =~ m/$arg/)"; |
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 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
848 showmethecode("End of expression") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
849 if $debug{'filter'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
850 gloups("Unfinished statement.") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
851 if ($pos == $length); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
852 gloups("End of expression expected, got '%s'",$filter[$pos]) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
853 unless ($filter[$pos] eq ')'); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
854 $pos++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
855 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
856 # And now, launch the beast, finish the function and use eval |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
857 # to construct this function. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
858 # Ok, the lack of lexer is a fair price for the eval ;) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
859 parse_expression(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
860 gloups("Garbage at the end of the expression") |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
861 if ($pos != $length); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
862 $code .= "; }"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
863 print STDERR "CODE = $code\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
864 if $debug{'filter'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
865 eval $code; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
866 die wrap_mod("po4a::po", dgettext("po4a", "Eval failure: %s"), $@) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
867 if $@; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
868 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
869 for (my $cpt=(0) ; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
870 $cpt<$self->count_entries(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
871 $cpt++) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
872 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
873 my ($msgid,$ref,$msgstr,$flags,$type,$comment,$automatic); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
874 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
875 $msgid = $self->msgid($cpt); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
876 $ref=$self->{po}{$msgid}{'reference'}; |
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 $msgstr= $self->{po}{$msgid}{'msgstr'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
879 $flags = $self->{po}{$msgid}{'flags'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
880 $type = $self->{po}{$msgid}{'type'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
881 $comment = $self->{po}{$msgid}{'comment'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
882 $automatic = $self->{po}{$msgid}{'automatic'}; |
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 # DO NOT CHANGE THE ORDER |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
885 $res->push_raw('msgid' => $msgid, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
886 'msgstr' => $msgstr, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
887 'flags' => $flags, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
888 'type' => $type, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
889 'reference' => $ref, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
890 'comment' => $comment, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
891 'automatic' => $automatic) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
892 if (apply($msgid,$msgstr,$ref,$flags,$comment,$automatic)); |
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 # delete the apply subroutine |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
895 # otherwise it will be redefined. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
896 undef &apply; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
897 return $res; |
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 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
900 =item to_utf8() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
901 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
902 Recodes to utf-8 the po's msgstrs. Does nothing if the charset is not |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
903 specified in the po file ("CHARSET" value), or if it's already utf-8 or |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
904 ascii. |
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 =cut |
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 sub to_utf8 { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
909 my $this = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
910 my $charset = $this->get_charset(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
911 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
912 unless ($charset eq "CHARSET" or |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
913 $charset =~ /^ascii$/i or |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
914 $charset =~ /^utf-8$/i) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
915 foreach my $msgid ( keys %{$this->{po}} ) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
916 Encode::from_to($this->{po}{$msgid}{'msgstr'}, $charset, "utf-8"); |
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 $this->set_charset("utf-8"); |
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 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
921 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
922 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
923 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
924 =head1 Functions to use a message catalog for translations |
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 =over 4 |
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 gettext($%) |
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 Request the translation of the string given as argument in the current catalog. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
931 The function returns the original (untranslated) string if the string was not |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
932 found. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
933 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
934 After the string to translate, you can pass a hash of extra |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
935 arguments. Here are the valid entries: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
936 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
937 =over |
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 wrap |
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 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
|
942 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
|
943 a translation, and wraps the result. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
944 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
945 =item wrapcol |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
946 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
947 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
|
948 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
949 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
950 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
951 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
952 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
953 sub gettext { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
954 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
955 my $text=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
956 my (%opt)=@_; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
957 my $res; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
958 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
959 return "" unless defined($text) && length($text); # Avoid returning the header. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
960 my $validoption="reference wrap wrapcol"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
961 my %validoption; |
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 map { $validoption{$_}=1 } (split(/ /,$validoption)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
964 foreach (keys %opt) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
965 Carp::confess "internal error: unknown arg $_.\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
966 "Here are the valid options: $validoption.\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
967 unless $validoption{$_}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
968 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
969 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
970 $text=canonize($text) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
971 if ($opt{'wrap'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
972 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
973 my $esc_text=escape_text($text); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
974 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
975 $self->{gettextqueries}++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
976 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
977 if ( defined $self->{po}{$esc_text} |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
978 and defined $self->{po}{$esc_text}{'msgstr'} |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
979 and length $self->{po}{$esc_text}{'msgstr'} |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
980 and ( not defined $self->{po}{$esc_text}{'flags'} |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
981 or $self->{po}{$esc_text}{'flags'} !~ /fuzzy/)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
982 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
983 $self->{gettexthits}++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
984 $res = unescape_text($self->{po}{$esc_text}{'msgstr'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
985 if (defined $self->{po}{$esc_text}{'plural'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
986 if ($self->{po}{$esc_text}{'plural'} eq "0") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
987 warn wrap_mod("po4a gettextize", dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
988 "'%s' is the singular form of a message, ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
989 "po4a will use the msgstr[0] translation (%s)."), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
990 $esc_text, $res); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
991 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
992 warn wrap_mod("po4a gettextize", dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
993 "'%s' is the plural form of a message, ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
994 "po4a will use the msgstr[1] translation (%s)."), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
995 $esc_text, $res); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
996 } |
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 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
999 $res = $text; |
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 if ($opt{'wrap'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1003 if ($self->get_charset =~ /^utf-8$/i) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1004 $res=Encode::decode_utf8($res); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1005 $res=wrap ($res, $opt{'wrapcol'} || 76); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1006 $res=Encode::encode_utf8($res); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1007 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1008 $res=wrap ($res, $opt{'wrapcol'} || 76); |
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 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1011 # print STDERR "Gettext >>>$text<<<(escaped=$esc_text)=[[[$res]]]\n\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1012 return $res; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1013 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1014 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1015 =item stats_get() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1016 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1017 Returns statistics about the hit ratio of gettext since the last time that |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1018 stats_clear() was called. Please note that it's not the same |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1019 statistics than the one printed by msgfmt --statistic. Here, it's statistics |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1020 about recent usage of the po file, while msgfmt reports the status of the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1021 file. Example of use: |
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 [some use of the po file to translate stuff] |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1024 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1025 ($percent,$hit,$queries) = $pofile->stats_get(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1026 print "So far, we found translations for $percent\% ($hit of $queries) of strings.\n"; |
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 =cut |
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 sub stats_get() { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1031 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1032 my ($h,$q)=($self->{gettexthits},$self->{gettextqueries}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1033 my $p = ($q == 0 ? 100 : int($h/$q*10000)/100); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1034 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1035 # $p =~ s/\.00//; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1036 # $p =~ s/(\..)0/$1/; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1037 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1038 return ( $p,$h,$q ); |
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 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1041 =item stats_clear() |
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 Clears the statistics about gettext hits. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1044 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1045 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1046 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1047 sub stats_clear { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1048 my $self = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1049 $self->{gettextqueries} = 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1050 $self->{gettexthits} = 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1051 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1052 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1053 =back |
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 =head1 Functions to build a message catalog |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1056 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1057 =over 4 |
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 =item push(%) |
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 Push a new entry at the end of the current catalog. The arguments should |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1062 form a hash table. The valid keys are: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1063 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1064 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1065 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1066 =item msgid |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1067 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1068 the string in original language. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1069 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1070 =item msgstr |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1071 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1072 the translation. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1073 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1074 =item reference |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1075 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1076 an indication of where this string was found. Example: file.c:46 (meaning |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1077 in 'file.c' at line 46). It can be a space-separated list in case of |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1078 multiple occurrences. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1079 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1080 =item comment |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1081 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1082 a comment added here manually (by the translators). The format here is free. |
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 =item automatic |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1085 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1086 a comment which was automatically added by the string extraction |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1087 program. See the I<--add-comments> option of the B<xgettext> program for |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1088 more information. |
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 =item flags |
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 space-separated list of all defined flags for this entry. |
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 Valid flags are: c-text, python-text, lisp-text, elisp-text, librep-text, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1095 smalltalk-text, java-text, awk-text, object-pascal-text, ycp-text, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1096 tcl-text, wrap, no-wrap and fuzzy. |
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 See the gettext documentation for their meaning. |
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 =item type |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1101 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1102 This is mostly an internal argument: it is used while gettextizing |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1103 documents. The idea here is to parse both the original and the translation |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1104 into a po object, and merge them, using one's msgid as msgid and the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1105 other's msgid as msgstr. To make sure that things get ok, each msgid in po |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1106 objects are given a type, based on their structure (like "chapt", "sect1", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1107 "p" and so on in docbook). If the types of strings are not the same, that |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1108 means that both files do not share the same structure, and the process |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1109 reports an error. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1110 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1111 This information is written as automatic comment in the po file since this |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1112 gives to translators some context about the strings to translate. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1113 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1114 =item wrap |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1115 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1116 boolean indicating whether whitespaces can be mangled in cosmetic |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1117 reformattings. If true, the string is canonized before use. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1118 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1119 This information is written to the po file using the 'wrap' or 'no-wrap' flag. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1120 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1121 =item wrapcol |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1122 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1123 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
|
1124 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1125 This information is not written to the po file. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1126 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1127 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1128 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1129 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1130 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1131 sub push { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1132 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1133 my %entry=@_; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1134 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1135 my $validoption="wrap wrapcol type msgid msgstr automatic flags reference"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1136 my %validoption; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1137 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1138 map { $validoption{$_}=1 } (split(/ /,$validoption)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1139 foreach (keys %entry) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1140 Carp::confess "internal error: unknown arg $_.\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1141 "Here are the valid options: $validoption.\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1142 unless $validoption{$_}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1143 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1144 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1145 unless ($entry{'wrap'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1146 $entry{'flags'} .= " no-wrap"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1147 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1148 if (defined ($entry{'msgid'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1149 $entry{'msgid'} = canonize($entry{'msgid'}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1150 if ($entry{'wrap'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1151 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1152 $entry{'msgid'} = escape_text($entry{'msgid'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1153 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1154 if (defined ($entry{'msgstr'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1155 $entry{'msgstr'} = canonize($entry{'msgstr'}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1156 if ($entry{'wrap'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1157 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1158 $entry{'msgstr'} = escape_text($entry{'msgstr'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1159 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1160 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1161 $self->push_raw(%entry); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1162 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1163 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1164 # The same as push(), but assuming that msgid and msgstr are already escaped |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1165 sub push_raw { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1166 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1167 my %entry=@_; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1168 my ($msgid,$msgstr,$reference,$comment,$automatic,$flags,$type,$transref)= |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1169 ($entry{'msgid'},$entry{'msgstr'}, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1170 $entry{'reference'},$entry{'comment'},$entry{'automatic'}, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1171 $entry{'flags'},$entry{'type'},$entry{'transref'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1172 my $keep_conflict = $entry{'conflict'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1173 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1174 # print STDERR "Push_raw\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1175 # print STDERR " msgid=>>>$msgid<<<\n" if $msgid; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1176 # print STDERR " msgstr=[[[$msgstr]]]\n" if $msgstr; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1177 # Carp::cluck " flags=$flags\n" if $flags; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1178 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1179 return unless defined($entry{'msgid'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1180 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1181 #no msgid => header definition |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1182 unless (length($entry{'msgid'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1183 # if (defined($self->{header}) && $self->{header} =~ /\S/) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1184 # warn dgettext("po4a","Redefinition of the header. ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1185 # "The old one will be discarded\n"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1186 # } FIXME: do that iff the header isn't the default one. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1187 $self->{header}=$msgstr; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1188 $self->{header_comment}=$comment; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1189 my $charset = $self->get_charset; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1190 if ($charset ne "CHARSET") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1191 $self->{encoder}=find_encoding($charset); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1192 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1193 $self->{encoder}=find_encoding("ascii"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1194 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1195 return; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1196 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1197 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1198 if ($self->{options}{'porefs'} eq "none") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1199 $reference = ""; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1200 } elsif ($self->{options}{'porefs'} eq "noline") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1201 $reference =~ s/:[0-9]*/:1/g; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1202 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1203 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1204 if (defined($self->{po}{$msgid})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1205 warn wrap_mod("po4a::po", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1206 dgettext("po4a","msgid defined twice: %s"), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1207 $msgid) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1208 if (0); # FIXME: put a verbose stuff |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1209 if ( defined $msgstr |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1210 and defined $self->{po}{$msgid}{'msgstr'} |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1211 and $self->{po}{$msgid}{'msgstr'} ne $msgstr) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1212 my $txt=quote_text($msgid); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1213 my ($first,$second)= |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1214 (format_comment(". ",$self->{po}{$msgid}{'reference'}). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1215 quote_text($self->{po}{$msgid}{'msgstr'}), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1216 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1217 format_comment(". ",$reference). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1218 quote_text($msgstr)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1219 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1220 if ($keep_conflict) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1221 if ($self->{po}{$msgid}{'msgstr'} =~ m/^#-#-#-#-# .* #-#-#-#-#\\n/s) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1222 $msgstr = $self->{po}{$msgid}{'msgstr'}. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1223 "\\n#-#-#-#-# $transref #-#-#-#-#\\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1224 $msgstr; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1225 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1226 $msgstr = "#-#-#-#-# ". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1227 $self->{po}{$msgid}{'transref'}. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1228 " #-#-#-#-#\\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1229 $self->{po}{$msgid}{'msgstr'}."\\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1230 "#-#-#-#-# $transref #-#-#-#-#\\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1231 $msgstr; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1232 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1233 # Every msgid will have the same list of references. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1234 # Only keep the last list. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1235 $self->{po}{$msgid}{'reference'} = ""; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1236 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1237 warn wrap_msg(dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1238 "Translations don't match for:\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1239 "%s\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1240 "-->First translation:\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1241 "%s\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1242 " Second translation:\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1243 "%s\n". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1244 " Old translation discarded."), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1245 $txt,$first,$second); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1246 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1247 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1248 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1249 if (defined $transref) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1250 $self->{po}{$msgid}{'transref'} = $transref; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1251 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1252 if (defined $reference) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1253 if (defined $self->{po}{$msgid}{'reference'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1254 $self->{po}{$msgid}{'reference'} .= " ".$reference; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1255 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1256 $self->{po}{$msgid}{'reference'} = $reference; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1257 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1258 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1259 $self->{po}{$msgid}{'msgstr'} = $msgstr; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1260 $self->{po}{$msgid}{'comment'} = $comment; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1261 $self->{po}{$msgid}{'automatic'} = $automatic; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1262 if (defined($self->{po}{$msgid}{'pos_doc'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1263 $self->{po}{$msgid}{'pos_doc'} .= " ".$self->{count_doc}++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1264 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1265 $self->{po}{$msgid}{'pos_doc'} = $self->{count_doc}++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1266 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1267 unless (defined($self->{po}{$msgid}{'pos'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1268 $self->{po}{$msgid}{'pos'} = $self->{count}++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1269 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1270 $self->{po}{$msgid}{'type'} = $type; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1271 $self->{po}{$msgid}{'plural'} = $entry{'plural'} |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1272 if defined $entry{'plural'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1273 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1274 if (defined($flags)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1275 $flags = " $flags "; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1276 $flags =~ s/,/ /g; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1277 foreach my $flag (@known_flags) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1278 if ($flags =~ /\s$flag\s/) { # if flag to be set |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1279 unless ( defined($self->{po}{$msgid}{'flags'}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1280 && $self->{po}{$msgid}{'flags'} =~ /\b$flag\b/) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1281 # flag not already set |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1282 if (defined $self->{po}{$msgid}{'flags'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1283 $self->{po}{$msgid}{'flags'} .= " ".$flag; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1284 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1285 $self->{po}{$msgid}{'flags'} = $flag; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1286 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1287 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1288 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1289 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1290 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1291 # print STDERR "stored ((($msgid)))=>(((".$self->{po}{$msgid}{'msgstr'}.")))\n\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1292 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1293 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1294 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1295 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1296 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1297 =head1 Miscellaneous functions |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1298 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1299 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1300 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1301 =item count_entries() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1302 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1303 Returns the number of entries in the catalog (without the header). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1304 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1305 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1306 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1307 sub count_entries($) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1308 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1309 return $self->{count}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1310 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1311 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1312 =item count_entries_doc() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1313 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1314 Returns the number of entries in document. If a string appears multiple times |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1315 in the document, it will be counted multiple times |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1316 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1317 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1318 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1319 sub count_entries_doc($) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1320 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1321 return $self->{count_doc}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1322 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1323 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1324 =item msgid($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1325 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1326 Returns the msgid of the given number. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1327 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1328 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1329 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1330 sub msgid($$) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1331 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1332 my $num=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1333 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1334 foreach my $msgid ( keys %{$self->{po}} ) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1335 return $msgid if ($self->{po}{$msgid}{'pos'} eq $num); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1336 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1337 return undef; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1338 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1339 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1340 =item msgid_doc($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1341 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1342 Returns the msgid with the given position in the document. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1343 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1344 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1345 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1346 sub msgid_doc($$) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1347 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1348 my $num=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1349 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1350 foreach my $msgid ( keys %{$self->{po}} ) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1351 foreach my $pos (split / /, $self->{po}{$msgid}{'pos_doc'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1352 return $msgid if ($pos eq $num); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1353 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1354 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1355 return undef; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1356 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1357 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1358 =item get_charset() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1359 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1360 Returns the character set specified in the po header. If it hasn't been |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1361 set, it will return "CHARSET". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1362 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1363 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1364 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1365 sub get_charset() { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1366 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1367 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1368 $self->{header} =~ /charset=(.*?)[\s\\]/; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1369 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1370 if (defined $1) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1371 return $1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1372 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1373 return "CHARSET"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1374 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1375 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1376 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1377 =item set_charset($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1378 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1379 This sets the character set of the po header to the value specified in its |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1380 first argument. If you never call this function (and no file with a specified |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1381 character set is read), the default value is left to "CHARSET". This value |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1382 doesn't change the behavior of this module, it's just used to fill that field |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1383 in the header, and to return it in get_charset(). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1384 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1385 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1386 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1387 sub set_charset() { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1388 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1389 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1390 my ($newchar,$oldchar); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1391 $newchar = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1392 $oldchar = $self->get_charset(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1393 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1394 $self->{header} =~ s/$oldchar/$newchar/; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1395 $self->{encoder}=find_encoding($newchar); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1396 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1397 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1398 #----[ helper functions ]--------------------------------------------------- |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1399 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1400 # transforme the string from its po file representation to the form which |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1401 # should be used to print it |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1402 sub unescape_text { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1403 my $text = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1404 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1405 print STDERR "\nunescape [$text]====" if $debug{'escape'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1406 $text = join("",split(/\n/,$text)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1407 $text =~ s/\\"/"/g; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1408 # unescape newlines |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1409 # NOTE on \G: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1410 # The following regular expression introduce newlines. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1411 # Thus, ^ doesn't match all beginnings of lines. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1412 # \G is a zero-width assertion that matches the position |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1413 # of the previous substitution with s///g. As every |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1414 # substitution ends by a newline, it always matches a |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1415 # position just after a newline. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1416 $text =~ s/( # $1: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1417 (\G|[^\\]) # beginning of the line or any char |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1418 # different from '\' |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1419 (\\\\)* # followed by any even number of '\' |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1420 )\\n # and followed by an escaped newline |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1421 /$1\n/sgx; # single string, match globally, allow comments |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1422 # unescape tabulations |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1423 $text =~ s/( # $1: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1424 (\G|[^\\])# beginning of the line or any char |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1425 # different from '\' |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1426 (\\\\)* # followed by any even number of '\' |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1427 )\\t # and followed by an escaped tabulation |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1428 /$1\t/mgx; # multilines string, match globally, allow comments |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1429 # and unescape the escape character |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1430 $text =~ s/\\\\/\\/g; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1431 print STDERR ">$text<\n" if $debug{'escape'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1432 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1433 return $text; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1434 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1435 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1436 # transform the string to its representation as it should be written in po |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1437 # files |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1438 sub escape_text { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1439 my $text = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1440 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1441 print STDERR "\nescape [$text]====" if $debug{'escape'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1442 $text =~ s/\\/\\\\/g; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1443 $text =~ s/"/\\"/g; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1444 $text =~ s/\n/\\n/g; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1445 $text =~ s/\t/\\t/g; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1446 print STDERR ">$text<\n" if $debug{'escape'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1447 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1448 return $text; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1449 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1450 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1451 # put quotes around the string on each lines (without escaping it) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1452 # It does also normalize the text (ie, make sure its representation is wraped |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1453 # on the 80th char, but without changing the meaning of the string) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1454 sub quote_text { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1455 my $string = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1456 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1457 return '""' unless defined($string) && length($string); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1458 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1459 print STDERR "\nquote [$string]====" if $debug{'quote'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1460 # break lines on newlines, if any |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1461 # see unescape_text for an explanation on \G |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1462 $string =~ s/( # $1: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1463 (\G|[^\\]) # beginning of the line or any char |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1464 # different from '\' |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1465 (\\\\)* # followed by any even number of '\' |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1466 \\n) # and followed by an escaped newline |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1467 /$1\n/sgx; # single string, match globally, allow comments |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1468 $string = wrap($string); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1469 my @string = split(/\n/,$string); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1470 $string = join ("\"\n\"",@string); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1471 $string = "\"$string\""; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1472 if (scalar @string > 1 && $string[0] ne '') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1473 $string = "\"\"\n".$string; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1474 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1475 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1476 print STDERR ">$string<\n" if $debug{'quote'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1477 return $string; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1478 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1479 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1480 # undo the work of the quote_text function |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1481 sub unquote_text { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1482 my $string = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1483 print STDERR "\nunquote [$string]====" if $debug{'quote'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1484 $string =~ s/^""\\n//s; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1485 $string =~ s/^"(.*)"$/$1/s; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1486 $string =~ s/"\n"//gm; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1487 # Note: an even number of '\' could precede \\n, but I could not build a |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1488 # document to test this |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1489 $string =~ s/([^\\])\\n\n/$1!!DUMMYPOPM!!/gm; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1490 $string =~ s|!!DUMMYPOPM!!|\\n|gm; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1491 print STDERR ">$string<\n" if $debug{'quote'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1492 return $string; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1493 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1494 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1495 # canonize the string: write it on only one line, changing consecutive |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1496 # whitespace to only one space. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1497 # Warning, it changes the string and should only be called if the string is |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1498 # plain text |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1499 sub canonize { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1500 my $text=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1501 print STDERR "\ncanonize [$text]====" if $debug{'canonize'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1502 $text =~ s/^ *//s; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1503 $text =~ s/^[ \t]+/ /gm; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1504 # if ($text eq "\n"), it messed up the first string (header) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1505 $text =~ s/\n/ /gm if ($text ne "\n"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1506 $text =~ s/([.)]) +/$1 /gm; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1507 $text =~ s/([^.)]) */$1 /gm; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1508 $text =~ s/ *$//s; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1509 print STDERR ">$text<\n" if $debug{'canonize'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1510 return $text; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1511 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1512 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1513 # wraps the string. We don't use Text::Wrap since it mangles whitespace at |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1514 # the end of splited line |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1515 sub wrap { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1516 my $text=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1517 return "0" if ($text eq '0'); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1518 my $col=shift || 76; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1519 my @lines=split(/\n/,"$text"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1520 my $res=""; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1521 my $first=1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1522 while (defined(my $line=shift @lines)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1523 if ($first && length($line) > $col - 10) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1524 unshift @lines,$line; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1525 $first=0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1526 next; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1527 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1528 if (length($line) > $col) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1529 my $pos=rindex($line," ",$col); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1530 while (substr($line,$pos-1,1) eq '.' && $pos != -1) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1531 $pos=rindex($line," ",$pos-1); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1532 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1533 if ($pos == -1) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1534 # There are no spaces in the first $col chars, pick-up the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1535 # first space |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1536 $pos = index($line," "); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1537 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1538 if ($pos != -1) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1539 my $end=substr($line,$pos+1); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1540 $line=substr($line,0,$pos+1); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1541 if ($end =~ s/^( +)//) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1542 $line .= $1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1543 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1544 unshift @lines,$end; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1545 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1546 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1547 $first=0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1548 $res.="$line\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1549 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1550 # Restore the original trailing spaces |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1551 $res =~ s/\s+$//s; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1552 if ($text =~ m/(\s+)$/s) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1553 $res .= $1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1554 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1555 return $res; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1556 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1557 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1558 # outputs properly a '# ... ' line to be put in the po file |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1559 sub format_comment { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1560 my $comment=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1561 my $char=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1562 my $result = "#". $char . $comment; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1563 $result =~ s/\n/\n#$char/gs; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1564 $result =~ s/^#$char$/#/gm; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1565 $result .= "\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1566 return $result; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1567 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1568 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1569 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1570 1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1571 __END__ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1572 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1573 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1574 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1575 =head1 AUTHORS |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1576 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1577 Denis Barbier <barbier@linuxfr.org> |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1578 Martin Quinson (mquinson#debian.org) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1579 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1580 =cut |