annotate roundup/msgfmt.py @ 3854:f4e8dc583256

Restored subject parser regexp to the string it was before the... ...implementation of customization of it, i.e., the version from CVS revision 1.184 of mailgw.py. This makes 'testFollowupTitleMatchMultiRe' work again.
author Erik Forsberg <forsberg@users.sourceforge.net>
date Sat, 12 May 2007 16:14:54 +0000
parents 7000070fe600
children 4498f5252f8b c643d693d91e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2784
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
1 #! /usr/bin/env python
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
2 # -*- coding: iso-8859-1 -*-
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
3 # Written by Martin v. Löwis <loewis@informatik.hu-berlin.de>
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
4 # Plural forms support added by alexander smishlajev <alex@tycobka.lv>
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
5
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
6 """Generate binary message catalog from textual translation description.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
7
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
8 This program converts a textual Uniforum-style message catalog (.po file) into
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
9 a binary GNU catalog (.mo file). This is essentially the same function as the
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
10 GNU msgfmt program, however, it is a simpler implementation.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
11
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
12 Usage: msgfmt.py [OPTIONS] filename.po
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
13
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
14 Options:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
15 -o file
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
16 --output-file=file
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
17 Specify the output file to write to. If omitted, output will go to a
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
18 file named filename.mo (based off the input file name).
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
19
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
20 -h
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
21 --help
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
22 Print this message and exit.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
23
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
24 -V
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
25 --version
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
26 Display version information and exit.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
27 """
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
28
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
29 import sys
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
30 import os
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
31 import getopt
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
32 import struct
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
33 import array
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
34
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
35 __version__ = "1.1"
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
36
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
37 MESSAGES = {}
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
38
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
39
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
40
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
41 def usage(code, msg=''):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
42 print >> sys.stderr, __doc__
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
43 if msg:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
44 print >> sys.stderr, msg
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
45 sys.exit(code)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
46
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
47
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
48
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
49 def add(id, str, fuzzy):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
50 "Add a non-fuzzy translation to the dictionary."
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
51 global MESSAGES
2801
ee9c3b850f9e fix plural forms:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2784
diff changeset
52 if not fuzzy and str and not str.startswith('\0'):
2784
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
53 MESSAGES[id] = str
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
54
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
55
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
56
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
57 def generate():
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
58 "Return the generated output."
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
59 global MESSAGES
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
60 keys = MESSAGES.keys()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
61 # the keys are sorted in the .mo file
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
62 keys.sort()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
63 offsets = []
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
64 ids = strs = ''
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
65 for id in keys:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
66 # For each string, we need size and file offset. Each string is NUL
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
67 # terminated; the NUL does not count into the size.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
68 offsets.append((len(ids), len(id), len(strs), len(MESSAGES[id])))
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
69 ids += id + '\0'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
70 strs += MESSAGES[id] + '\0'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
71 output = ''
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
72 # The header is 7 32-bit unsigned integers. We don't use hash tables, so
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
73 # the keys start right after the index tables.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
74 # translated string.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
75 keystart = 7*4+16*len(keys)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
76 # and the values start after the keys
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
77 valuestart = keystart + len(ids)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
78 koffsets = []
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
79 voffsets = []
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
80 # The string table first has the list of keys, then the list of values.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
81 # Each entry has first the size of the string, then the file offset.
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
82 for o1, l1, o2, l2 in offsets:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
83 koffsets += [l1, o1+keystart]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
84 voffsets += [l2, o2+valuestart]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
85 offsets = koffsets + voffsets
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
86 output = struct.pack("Iiiiiii",
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
87 0x950412deL, # Magic
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
88 0, # Version
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
89 len(keys), # # of entries
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
90 7*4, # start of key index
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
91 7*4+len(keys)*8, # start of value index
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
92 0, 0) # size and offset of hash table
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
93 output += array.array("i", offsets).tostring()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
94 output += ids
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
95 output += strs
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
96 return output
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
97
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
98
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
99
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
100 def make(filename, outfile):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
101 ID = 1
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
102 STR = 2
3217
a6bf25d38518 reset global MESSAGES dictionary for each make
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2801
diff changeset
103 global MESSAGES
a6bf25d38518 reset global MESSAGES dictionary for each make
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2801
diff changeset
104 MESSAGES = {}
2784
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
105
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
106 # Compute .mo name from .po name and arguments
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
107 if filename.endswith('.po'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
108 infile = filename
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
109 else:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
110 infile = filename + '.po'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
111 if outfile is None:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
112 outfile = os.path.splitext(infile)[0] + '.mo'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
113
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
114 try:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
115 lines = open(infile).readlines()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
116 except IOError, msg:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
117 print >> sys.stderr, msg
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
118 sys.exit(1)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
119
3563
7000070fe600 ignore UTF-8 BOM in po file
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3217
diff changeset
120 # remove UTF-8 Byte Order Mark, if any.
7000070fe600 ignore UTF-8 BOM in po file
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3217
diff changeset
121 # (UCS2 BOMs are not handled because messages in UCS2 cannot be handled)
7000070fe600 ignore UTF-8 BOM in po file
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3217
diff changeset
122 if lines[0].startswith('\xEF\xBB\xBF'):
7000070fe600 ignore UTF-8 BOM in po file
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3217
diff changeset
123 lines[0] = lines[0][3:]
7000070fe600 ignore UTF-8 BOM in po file
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3217
diff changeset
124
2784
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
125 section = None
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
126 fuzzy = 0
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
127
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
128 # Parse the catalog
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
129 lno = 0
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
130 for l in lines:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
131 lno += 1
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
132 # If we get a comment line after a msgstr, this is a new entry
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
133 if l[0] == '#' and section == STR:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
134 add(msgid, msgstr, fuzzy)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
135 section = None
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
136 fuzzy = 0
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
137 # Record a fuzzy mark
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
138 if l[:2] == '#,' and (l.find('fuzzy') >= 0):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
139 fuzzy = 1
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
140 # Skip comments
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
141 if l[0] == '#':
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
142 continue
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
143 # Start of msgid_plural section, separate from singular form with \0
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
144 if l.startswith('msgid_plural'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
145 msgid += '\0'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
146 l = l[12:]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
147 # Now we are in a msgid section, output previous section
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
148 elif l.startswith('msgid'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
149 if section == STR:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
150 add(msgid, msgstr, fuzzy)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
151 section = ID
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
152 l = l[5:]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
153 msgid = msgstr = ''
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
154 # Now we are in a msgstr section
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
155 elif l.startswith('msgstr'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
156 section = STR
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
157 l = l[6:]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
158 # Check for plural forms
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
159 if l.startswith('['):
2801
ee9c3b850f9e fix plural forms:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2784
diff changeset
160 # Separate plural forms with \0
ee9c3b850f9e fix plural forms:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2784
diff changeset
161 if not l.startswith('[0]'):
ee9c3b850f9e fix plural forms:
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2784
diff changeset
162 msgstr += '\0'
2784
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
163 # Ignore the index - must come in sequence
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
164 l = l[l.index(']') + 1:]
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
165 # Skip empty lines
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
166 l = l.strip()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
167 if not l:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
168 continue
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
169 # XXX: Does this always follow Python escape semantics?
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
170 l = eval(l)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
171 if section == ID:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
172 msgid += l
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
173 elif section == STR:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
174 msgstr += l
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
175 else:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
176 print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
177 'before:'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
178 print >> sys.stderr, l
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
179 sys.exit(1)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
180 # Add last entry
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
181 if section == STR:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
182 add(msgid, msgstr, fuzzy)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
183
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
184 # Compute output
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
185 output = generate()
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
186
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
187 try:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
188 open(outfile,"wb").write(output)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
189 except IOError,msg:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
190 print >> sys.stderr, msg
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
191
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
192
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
193
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
194 def main():
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
195 try:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
196 opts, args = getopt.getopt(sys.argv[1:], 'hVo:',
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
197 ['help', 'version', 'output-file='])
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
198 except getopt.error, msg:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
199 usage(1, msg)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
200
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
201 outfile = None
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
202 # parse options
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
203 for opt, arg in opts:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
204 if opt in ('-h', '--help'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
205 usage(0)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
206 elif opt in ('-V', '--version'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
207 print >> sys.stderr, "msgfmt.py", __version__
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
208 sys.exit(0)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
209 elif opt in ('-o', '--output-file'):
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
210 outfile = arg
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
211 # do it
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
212 if not args:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
213 print >> sys.stderr, 'No input file given'
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
214 print >> sys.stderr, "Try `msgfmt --help' for more information."
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
215 return
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
216
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
217 for filename in args:
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
218 make(filename, outfile)
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
219
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
220
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
221 if __name__ == '__main__':
40643f8b41a0 catalog compilation utility for message translations
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
diff changeset
222 main()
3563
7000070fe600 ignore UTF-8 BOM in po file
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3217
diff changeset
223
7000070fe600 ignore UTF-8 BOM in po file
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3217
diff changeset
224 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/