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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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