Mercurial > hg-stable
annotate i18n/polib.py @ 17313:3eae346a30c4 stable
i18n-ru: synchronized with 85188487b9b4
author | Alexander Sauta <demosito@gmail.com> |
---|---|
date | Wed, 01 Aug 2012 18:56:39 +0400 |
parents | e40430fb787b |
children | 86531a7038ed |
rev | line source |
---|---|
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
11432
0d548beb9bca
i18n: disable check-code on polib.py
Matt Mackall <mpm@selenic.com>
parents:
11388
diff
changeset
|
2 # no-check-code |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
3 # |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
4 # License: MIT (see LICENSE file provided) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
5 # vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
6 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
7 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
8 **polib** allows you to manipulate, create, modify gettext files (pot, po and |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
9 mo files). You can load existing files, iterate through it's entries, add, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
10 modify entries, comments or metadata, etc. or create new po files from scratch. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
11 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
12 **polib** provides a simple and pythonic API via the :func:`~polib.pofile` and |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
13 :func:`~polib.mofile` convenience functions. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
14 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
15 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
16 __author__ = 'David Jean Louis <izimobil@gmail.com>' |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
17 __version__ = '0.6.4' |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
18 __all__ = ['pofile', 'POFile', 'POEntry', 'mofile', 'MOFile', 'MOEntry', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
19 'detect_encoding', 'escape', 'unescape', 'detect_encoding',] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
20 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
21 import array |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
22 import codecs |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
23 import os |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
24 import re |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
25 import struct |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
26 import sys |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
27 import textwrap |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
28 import types |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
29 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
30 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
31 # the default encoding to use when encoding cannot be detected |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
32 default_encoding = 'utf-8' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
33 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
34 # _pofile_or_mofile {{{ |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
35 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
36 def _pofile_or_mofile(f, type, **kwargs): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
37 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
38 Internal function used by :func:`polib.pofile` and :func:`polib.mofile` to |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
39 honor the DRY concept. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
40 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
41 # get the file encoding |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
42 enc = kwargs.get('encoding') |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
43 if enc is None: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
44 enc = detect_encoding(f, type == 'mofile') |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
45 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
46 # parse the file |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
47 kls = type == 'pofile' and _POFileParser or _MOFileParser |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
48 parser = kls( |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
49 f, |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
50 encoding=enc, |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
51 check_for_duplicates=kwargs.get('check_for_duplicates', False) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
52 ) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
53 instance = parser.parse() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
54 instance.wrapwidth = kwargs.get('wrapwidth', 78) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
55 return instance |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
56 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
57 # }}} |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
58 # function pofile() {{{ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
59 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
60 def pofile(pofile, **kwargs): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
61 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
62 Convenience function that parses the po or pot file ``pofile`` and returns |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
63 a :class:`~polib.POFile` instance. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
64 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
65 Arguments: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
66 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
67 ``pofile`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
68 string, full or relative path to the po/pot file or its content (data). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
69 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
70 ``wrapwidth`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
71 integer, the wrap width, only useful when the ``-w`` option was passed |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
72 to xgettext (optional, default: ``78``). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
73 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
74 ``encoding`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
75 string, the encoding to use (e.g. "utf-8") (default: ``None``, the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
76 encoding will be auto-detected). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
77 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
78 ``check_for_duplicates`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
79 whether to check for duplicate entries when adding entries to the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
80 file (optional, default: ``False``). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
81 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
82 return _pofile_or_mofile(pofile, 'pofile', **kwargs) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
83 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
84 # }}} |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
85 # function mofile() {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
86 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
87 def mofile(mofile, **kwargs): |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
88 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
89 Convenience function that parses the mo file ``mofile`` and returns a |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
90 :class:`~polib.MOFile` instance. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
91 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
92 Arguments: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
93 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
94 ``mofile`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
95 string, full or relative path to the mo file or its content (data). |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
96 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
97 ``wrapwidth`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
98 integer, the wrap width, only useful when the ``-w`` option was passed |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
99 to xgettext to generate the po file that was used to format the mo file |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
100 (optional, default: ``78``). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
101 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
102 ``encoding`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
103 string, the encoding to use (e.g. "utf-8") (default: ``None``, the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
104 encoding will be auto-detected). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
105 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
106 ``check_for_duplicates`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
107 whether to check for duplicate entries when adding entries to the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
108 file (optional, default: ``False``). |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
109 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
110 return _pofile_or_mofile(mofile, 'mofile', **kwargs) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
111 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
112 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
113 # function detect_encoding() {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
114 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
115 def detect_encoding(file, binary_mode=False): |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
116 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
117 Try to detect the encoding used by the ``file``. The ``file`` argument can |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
118 be a PO or MO file path or a string containing the contents of the file. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
119 If the encoding cannot be detected, the function will return the value of |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
120 ``default_encoding``. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
121 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
122 Arguments: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
123 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
124 ``file`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
125 string, full or relative path to the po/mo file or its content. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
126 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
127 ``binary_mode`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
128 boolean, set this to True if ``file`` is a mo file. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
129 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
130 rx = re.compile(r'"?Content-Type:.+? charset=([\w_\-:\.]+)') |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
131 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
132 def charset_exists(charset): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
133 """Check whether ``charset`` is valid or not.""" |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
134 try: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
135 codecs.lookup(charset) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
136 except LookupError: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
137 return False |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
138 return True |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
139 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
140 if not os.path.exists(file): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
141 match = rx.search(file) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
142 if match: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
143 enc = match.group(1).strip() |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
144 if charset_exists(enc): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
145 return enc |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
146 else: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
147 if binary_mode: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
148 mode = 'rb' |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
149 else: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
150 mode = 'r' |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
151 f = open(file, mode) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
152 for l in f.readlines(): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
153 match = rx.search(l) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
154 if match: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
155 f.close() |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
156 enc = match.group(1).strip() |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
157 if charset_exists(enc): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
158 return enc |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
159 f.close() |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
160 return default_encoding |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
161 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
162 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
163 # function escape() {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
164 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
165 def escape(st): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
166 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
167 Escapes the characters ``\\\\``, ``\\t``, ``\\n``, ``\\r`` and ``"`` in |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
168 the given string ``st`` and returns it. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
169 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
170 return st.replace('\\', r'\\')\ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
171 .replace('\t', r'\t')\ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
172 .replace('\r', r'\r')\ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
173 .replace('\n', r'\n')\ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
174 .replace('\"', r'\"') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
175 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
176 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
177 # function unescape() {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
178 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
179 def unescape(st): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
180 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
181 Unescapes the characters ``\\\\``, ``\\t``, ``\\n``, ``\\r`` and ``"`` in |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
182 the given string ``st`` and returns it. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
183 """ |
11388
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
184 def unescape_repl(m): |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
185 m = m.group(1) |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
186 if m == 'n': |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
187 return '\n' |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
188 if m == 't': |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
189 return '\t' |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
190 if m == 'r': |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
191 return '\r' |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
192 if m == '\\': |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
193 return '\\' |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
194 return m # handles escaped double quote |
db957a72fbd7
i18n: patch polib.unescape
Martin Geisler <mg@lazybytes.net>
parents:
11387
diff
changeset
|
195 return re.sub(r'\\(\\|n|t|r|")', unescape_repl, st) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
196 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
197 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
198 # class _BaseFile {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
199 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
200 class _BaseFile(list): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
201 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
202 Common base class for the :class:`~polib.POFile` and :class:`~polib.MOFile` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
203 classes. This class should **not** be instanciated directly. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
204 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
205 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
206 def __init__(self, *args, **kwargs): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
207 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
208 Constructor, accepts the following keyword arguments: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
209 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
210 ``pofile`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
211 string, the path to the po or mo file, or its content as a string. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
212 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
213 ``wrapwidth`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
214 integer, the wrap width, only useful when the ``-w`` option was |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
215 passed to xgettext (optional, default: ``78``). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
216 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
217 ``encoding`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
218 string, the encoding to use, defaults to ``default_encoding`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
219 global variable (optional). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
220 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
221 ``check_for_duplicates`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
222 whether to check for duplicate entries when adding entries to the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
223 file, (optional, default: ``False``). |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
224 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
225 list.__init__(self) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
226 # the opened file handle |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
227 pofile = kwargs.get('pofile', None) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
228 if pofile and os.path.exists(pofile): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
229 self.fpath = pofile |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
230 else: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
231 self.fpath = kwargs.get('fpath') |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
232 # the width at which lines should be wrapped |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
233 self.wrapwidth = kwargs.get('wrapwidth', 78) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
234 # the file encoding |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
235 self.encoding = kwargs.get('encoding', default_encoding) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
236 # whether to check for duplicate entries or not |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
237 self.check_for_duplicates = kwargs.get('check_for_duplicates', False) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
238 # header |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
239 self.header = '' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
240 # both po and mo files have metadata |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
241 self.metadata = {} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
242 self.metadata_is_fuzzy = 0 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
243 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
244 def __unicode__(self): |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
245 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
246 Returns the unicode representation of the file. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
247 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
248 ret = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
249 entries = [self.metadata_as_entry()] + \ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
250 [e for e in self if not e.obsolete] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
251 for entry in entries: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
252 ret.append(entry.__unicode__(self.wrapwidth)) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
253 for entry in self.obsolete_entries(): |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
254 ret.append(entry.__unicode__(self.wrapwidth)) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
255 ret = '\n'.join(ret) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
256 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
257 if type(ret) != types.UnicodeType: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
258 return unicode(ret, self.encoding) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
259 return ret |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
260 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
261 def __str__(self): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
262 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
263 Returns the string representation of the file. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
264 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
265 return unicode(self).encode(self.encoding) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
266 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
267 def __contains__(self, entry): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
268 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
269 Overriden ``list`` method to implement the membership test (in and |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
270 not in). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
271 The method considers that an entry is in the file if it finds an entry |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
272 that has the same msgid (the test is **case sensitive**). |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
273 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
274 Argument: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
275 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
276 ``entry`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
277 an instance of :class:`~polib._BaseEntry`. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
278 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
279 return self.find(entry.msgid, by='msgid') is not None |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
280 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
281 def __eq__(self, other): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
282 return unicode(self) == unicode(other) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
283 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
284 def append(self, entry): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
285 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
286 Overriden method to check for duplicates entries, if a user tries to |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
287 add an entry that is already in the file, the method will raise a |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
288 ``ValueError`` exception. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
289 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
290 Argument: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
291 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
292 ``entry`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
293 an instance of :class:`~polib._BaseEntry`. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
294 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
295 if self.check_for_duplicates and entry in self: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
296 raise ValueError('Entry "%s" already exists' % entry.msgid) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
297 super(_BaseFile, self).append(entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
298 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
299 def insert(self, index, entry): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
300 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
301 Overriden method to check for duplicates entries, if a user tries to |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
302 add an entry that is already in the file, the method will raise a |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
303 ``ValueError`` exception. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
304 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
305 Arguments: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
306 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
307 ``index`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
308 index at which the entry should be inserted. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
309 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
310 ``entry`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
311 an instance of :class:`~polib._BaseEntry`. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
312 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
313 if self.check_for_duplicates and entry in self: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
314 raise ValueError('Entry "%s" already exists' % entry.msgid) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
315 super(_BaseFile, self).insert(index, entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
316 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
317 def metadata_as_entry(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
318 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
319 Returns the file metadata as a :class:`~polib.POFile` instance. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
320 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
321 e = POEntry(msgid='') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
322 mdata = self.ordered_metadata() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
323 if mdata: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
324 strs = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
325 for name, value in mdata: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
326 # Strip whitespace off each line in a multi-line entry |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
327 strs.append('%s: %s' % (name, value)) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
328 e.msgstr = '\n'.join(strs) + '\n' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
329 if self.metadata_is_fuzzy: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
330 e.flags.append('fuzzy') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
331 return e |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
332 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
333 def save(self, fpath=None, repr_method='__str__'): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
334 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
335 Saves the po file to ``fpath``. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
336 If it is an existing file and no ``fpath`` is provided, then the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
337 existing file is rewritten with the modified data. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
338 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
339 Keyword arguments: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
340 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
341 ``fpath`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
342 string, full or relative path to the file. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
343 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
344 ``repr_method`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
345 string, the method to use for output. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
346 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
347 if self.fpath is None and fpath is None: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
348 raise IOError('You must provide a file path to save() method') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
349 contents = getattr(self, repr_method)() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
350 if fpath is None: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
351 fpath = self.fpath |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
352 if repr_method == 'to_binary': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
353 fhandle = open(fpath, 'wb') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
354 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
355 fhandle = codecs.open(fpath, 'w', self.encoding) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
356 if type(contents) != types.UnicodeType: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
357 contents = contents.decode(self.encoding) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
358 fhandle.write(contents) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
359 fhandle.close() |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
360 # set the file path if not set |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
361 if self.fpath is None and fpath: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
362 self.fpath = fpath |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
363 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
364 def find(self, st, by='msgid', include_obsolete_entries=False, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
365 msgctxt=False): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
366 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
367 Find the entry which msgid (or property identified by the ``by`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
368 argument) matches the string ``st``. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
369 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
370 Keyword arguments: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
371 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
372 ``st`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
373 string, the string to search for. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
374 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
375 ``by`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
376 string, the property to use for comparison (default: ``msgid``). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
377 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
378 ``include_obsolete_entries`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
379 boolean, whether to also search in entries that are obsolete. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
380 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
381 ``msgctxt`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
382 string, allows to specify a specific message context for the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
383 search. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
384 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
385 if include_obsolete_entries: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
386 entries = self[:] |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
387 else: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
388 entries = [e for e in self if not e.obsolete] |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
389 for e in entries: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
390 if getattr(e, by) == st: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
391 if msgctxt and e.msgctxt != msgctxt: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
392 continue |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
393 return e |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
394 return None |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
395 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
396 def ordered_metadata(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
397 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
398 Convenience method that returns an ordered version of the metadata |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
399 dictionnary. The return value is list of tuples (metadata name, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
400 metadata_value). |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
401 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
402 # copy the dict first |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
403 metadata = self.metadata.copy() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
404 data_order = [ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
405 'Project-Id-Version', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
406 'Report-Msgid-Bugs-To', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
407 'POT-Creation-Date', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
408 'PO-Revision-Date', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
409 'Last-Translator', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
410 'Language-Team', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
411 'MIME-Version', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
412 'Content-Type', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
413 'Content-Transfer-Encoding' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
414 ] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
415 ordered_data = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
416 for data in data_order: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
417 try: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
418 value = metadata.pop(data) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
419 ordered_data.append((data, value)) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
420 except KeyError: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
421 pass |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
422 # the rest of the metadata will be alphabetically ordered since there |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
423 # are no specs for this AFAIK |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
424 keys = metadata.keys() |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
425 keys.sort() |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
426 for data in keys: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
427 value = metadata[data] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
428 ordered_data.append((data, value)) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
429 return ordered_data |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
430 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
431 def to_binary(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
432 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
433 Return the binary representation of the file. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
434 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
435 offsets = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
436 entries = self.translated_entries() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
437 # the keys are sorted in the .mo file |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
438 def cmp(_self, other): |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
439 # msgfmt compares entries with msgctxt if it exists |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
440 self_msgid = _self.msgctxt and _self.msgctxt or _self.msgid |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
441 other_msgid = other.msgctxt and other.msgctxt or other.msgid |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
442 if self_msgid > other_msgid: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
443 return 1 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
444 elif self_msgid < other_msgid: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
445 return -1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
446 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
447 return 0 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
448 # add metadata entry |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
449 entries.sort(cmp) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
450 mentry = self.metadata_as_entry() |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
451 #mentry.msgstr = mentry.msgstr.replace('\\n', '').lstrip() |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
452 entries = [mentry] + entries |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
453 entries_len = len(entries) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
454 ids, strs = '', '' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
455 for e in entries: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
456 # For each string, we need size and file offset. Each string is |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
457 # NUL terminated; the NUL does not count into the size. |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
458 msgid = '' |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
459 if e.msgctxt: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
460 # Contexts are stored by storing the concatenation of the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
461 # context, a <EOT> byte, and the original string |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
462 msgid = self._encode(e.msgctxt + '\4') |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
463 if e.msgid_plural: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
464 indexes = e.msgstr_plural.keys() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
465 indexes.sort() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
466 msgstr = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
467 for index in indexes: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
468 msgstr.append(e.msgstr_plural[index]) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
469 msgid += self._encode(e.msgid + '\0' + e.msgid_plural) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
470 msgstr = self._encode('\0'.join(msgstr)) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
471 else: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
472 msgid += self._encode(e.msgid) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
473 msgstr = self._encode(e.msgstr) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
474 offsets.append((len(ids), len(msgid), len(strs), len(msgstr))) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
475 ids += msgid + '\0' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
476 strs += msgstr + '\0' |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
477 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
478 # The header is 7 32-bit unsigned integers. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
479 keystart = 7*4+16*entries_len |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
480 # and the values start after the keys |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
481 valuestart = keystart + len(ids) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
482 koffsets = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
483 voffsets = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
484 # The string table first has the list of keys, then the list of values. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
485 # Each entry has first the size of the string, then the file offset. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
486 for o1, l1, o2, l2 in offsets: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
487 koffsets += [l1, o1+keystart] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
488 voffsets += [l2, o2+valuestart] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
489 offsets = koffsets + voffsets |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
490 # check endianness for magic number |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
491 if struct.pack('@h', 1) == struct.pack('<h', 1): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
492 magic_number = MOFile.LITTLE_ENDIAN |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
493 else: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
494 magic_number = MOFile.BIG_ENDIAN |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
495 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
496 output = struct.pack( |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
497 "Iiiiiii", |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
498 magic_number, # Magic number |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
499 0, # Version |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
500 entries_len, # # of entries |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
501 7*4, # start of key index |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
502 7*4+entries_len*8, # start of value index |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
503 0, keystart # size and offset of hash table |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
504 # Important: we don't use hash tables |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
505 ) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
506 output += array.array("i", offsets).tostring() |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
507 output += ids |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
508 output += strs |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
509 return output |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
510 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
511 def _encode(self, mixed): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
512 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
513 Encodes the given ``mixed`` argument with the file encoding if and |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
514 only if it's an unicode string and returns the encoded string. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
515 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
516 if type(mixed) == types.UnicodeType: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
517 return mixed.encode(self.encoding) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
518 return mixed |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
519 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
520 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
521 # class POFile {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
522 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
523 class POFile(_BaseFile): |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
524 """ |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
525 Po (or Pot) file reader/writer. |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
526 This class inherits the :class:`~polib._BaseFile` class and, by extension, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
527 the python ``list`` type. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
528 """ |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
529 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
530 def __unicode__(self): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
531 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
532 Returns the unicode representation of the po file. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
533 """ |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
534 ret, headers = '', self.header.split('\n') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
535 for header in headers: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
536 if header[:1] in [',', ':']: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
537 ret += '#%s\n' % header |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
538 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
539 ret += '# %s\n' % header |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
540 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
541 if type(ret) != types.UnicodeType: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
542 ret = unicode(ret, self.encoding) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
543 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
544 return ret + _BaseFile.__unicode__(self) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
545 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
546 def save_as_mofile(self, fpath): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
547 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
548 Saves the binary representation of the file to given ``fpath``. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
549 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
550 Keyword argument: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
551 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
552 ``fpath`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
553 string, full or relative path to the mo file. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
554 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
555 _BaseFile.save(self, fpath, 'to_binary') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
556 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
557 def percent_translated(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
558 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
559 Convenience method that returns the percentage of translated |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
560 messages. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
561 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
562 total = len([e for e in self if not e.obsolete]) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
563 if total == 0: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
564 return 100 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
565 translated = len(self.translated_entries()) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
566 return int((100.00 / float(total)) * translated) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
567 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
568 def translated_entries(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
569 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
570 Convenience method that returns the list of translated entries. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
571 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
572 return [e for e in self if e.translated()] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
573 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
574 def untranslated_entries(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
575 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
576 Convenience method that returns the list of untranslated entries. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
577 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
578 return [e for e in self if not e.translated() and not e.obsolete \ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
579 and not 'fuzzy' in e.flags] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
580 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
581 def fuzzy_entries(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
582 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
583 Convenience method that returns the list of fuzzy entries. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
584 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
585 return [e for e in self if 'fuzzy' in e.flags] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
586 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
587 def obsolete_entries(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
588 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
589 Convenience method that returns the list of obsolete entries. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
590 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
591 return [e for e in self if e.obsolete] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
592 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
593 def merge(self, refpot): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
594 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
595 Convenience method that merges the current pofile with the pot file |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
596 provided. It behaves exactly as the gettext msgmerge utility: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
597 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
598 * comments of this file will be preserved, but extracted comments and |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
599 occurrences will be discarded; |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
600 * any translations or comments in the file will be discarded, however, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
601 dot comments and file positions will be preserved; |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
602 * the fuzzy flags are preserved. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
603 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
604 Keyword argument: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
605 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
606 ``refpot`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
607 object POFile, the reference catalog. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
608 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
609 for entry in refpot: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
610 e = self.find(entry.msgid, include_obsolete_entries=True) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
611 if e is None: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
612 e = POEntry() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
613 self.append(e) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
614 e.merge(entry) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
615 # ok, now we must "obsolete" entries that are not in the refpot anymore |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
616 for entry in self: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
617 if refpot.find(entry.msgid) is None: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
618 entry.obsolete = True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
619 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
620 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
621 # class MOFile {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
622 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
623 class MOFile(_BaseFile): |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
624 """ |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
625 Mo file reader/writer. |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
626 This class inherits the :class:`~polib._BaseFile` class and, by |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
627 extension, the python ``list`` type. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
628 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
629 BIG_ENDIAN = 0xde120495 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
630 LITTLE_ENDIAN = 0x950412de |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
631 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
632 def __init__(self, *args, **kwargs): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
633 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
634 Constructor, accepts all keywords arguments accepted by |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
635 :class:`~polib._BaseFile` class. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
636 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
637 _BaseFile.__init__(self, *args, **kwargs) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
638 self.magic_number = None |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
639 self.version = 0 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
640 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
641 def save_as_pofile(self, fpath): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
642 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
643 Saves the mofile as a pofile to ``fpath``. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
644 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
645 Keyword argument: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
646 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
647 ``fpath`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
648 string, full or relative path to the file. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
649 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
650 _BaseFile.save(self, fpath) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
651 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
652 def save(self, fpath=None): |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
653 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
654 Saves the mofile to ``fpath``. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
655 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
656 Keyword argument: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
657 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
658 ``fpath`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
659 string, full or relative path to the file. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
660 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
661 _BaseFile.save(self, fpath, 'to_binary') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
662 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
663 def percent_translated(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
664 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
665 Convenience method to keep the same interface with POFile instances. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
666 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
667 return 100 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
668 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
669 def translated_entries(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
670 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
671 Convenience method to keep the same interface with POFile instances. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
672 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
673 return self |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
674 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
675 def untranslated_entries(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
676 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
677 Convenience method to keep the same interface with POFile instances. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
678 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
679 return [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
680 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
681 def fuzzy_entries(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
682 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
683 Convenience method to keep the same interface with POFile instances. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
684 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
685 return [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
686 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
687 def obsolete_entries(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
688 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
689 Convenience method to keep the same interface with POFile instances. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
690 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
691 return [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
692 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
693 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
694 # class _BaseEntry {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
695 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
696 class _BaseEntry(object): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
697 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
698 Base class for :class:`~polib.POEntry` and :class:`~polib.MOEntry` classes. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
699 This class should **not** be instanciated directly. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
700 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
701 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
702 def __init__(self, *args, **kwargs): |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
703 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
704 Constructor, accepts the following keyword arguments: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
705 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
706 ``msgid`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
707 string, the entry msgid. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
708 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
709 ``msgstr`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
710 string, the entry msgstr. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
711 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
712 ``msgid_plural`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
713 string, the entry msgid_plural. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
714 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
715 ``msgstr_plural`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
716 list, the entry msgstr_plural lines. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
717 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
718 ``msgctxt`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
719 string, the entry context (msgctxt). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
720 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
721 ``obsolete`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
722 bool, whether the entry is "obsolete" or not. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
723 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
724 ``encoding`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
725 string, the encoding to use, defaults to ``default_encoding`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
726 global variable (optional). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
727 """ |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
728 self.msgid = kwargs.get('msgid', '') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
729 self.msgstr = kwargs.get('msgstr', '') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
730 self.msgid_plural = kwargs.get('msgid_plural', '') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
731 self.msgstr_plural = kwargs.get('msgstr_plural', {}) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
732 self.msgctxt = kwargs.get('msgctxt', None) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
733 self.obsolete = kwargs.get('obsolete', False) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
734 self.encoding = kwargs.get('encoding', default_encoding) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
735 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
736 def __unicode__(self, wrapwidth=78): |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
737 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
738 Returns the unicode representation of the entry. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
739 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
740 if self.obsolete: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
741 delflag = '#~ ' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
742 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
743 delflag = '' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
744 ret = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
745 # write the msgctxt if any |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
746 if self.msgctxt is not None: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
747 ret += self._str_field("msgctxt", delflag, "", self.msgctxt, wrapwidth) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
748 # write the msgid |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
749 ret += self._str_field("msgid", delflag, "", self.msgid, wrapwidth) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
750 # write the msgid_plural if any |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
751 if self.msgid_plural: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
752 ret += self._str_field("msgid_plural", delflag, "", self.msgid_plural, wrapwidth) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
753 if self.msgstr_plural: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
754 # write the msgstr_plural if any |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
755 msgstrs = self.msgstr_plural |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
756 keys = list(msgstrs) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
757 keys.sort() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
758 for index in keys: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
759 msgstr = msgstrs[index] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
760 plural_index = '[%s]' % index |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
761 ret += self._str_field("msgstr", delflag, plural_index, msgstr, wrapwidth) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
762 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
763 # otherwise write the msgstr |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
764 ret += self._str_field("msgstr", delflag, "", self.msgstr, wrapwidth) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
765 ret.append('') |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
766 ret = '\n'.join(ret) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
767 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
768 if type(ret) != types.UnicodeType: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
769 return unicode(ret, self.encoding) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
770 return ret |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
771 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
772 def __str__(self): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
773 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
774 Returns the string representation of the entry. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
775 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
776 return unicode(self).encode(self.encoding) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
777 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
778 def __eq__(self, other): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
779 return unicode(self) == unicode(other) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
780 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
781 def _str_field(self, fieldname, delflag, plural_index, field, wrapwidth=78): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
782 lines = field.splitlines(True) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
783 if len(lines) > 1: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
784 lines = [''] + lines # start with initial empty line |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
785 else: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
786 escaped_field = escape(field) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
787 specialchars_count = 0 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
788 for c in ['\\', '\n', '\r', '\t', '"']: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
789 specialchars_count += field.count(c) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
790 # comparison must take into account fieldname length + one space |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
791 # + 2 quotes (eg. msgid "<string>") |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
792 flength = len(fieldname) + 3 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
793 if plural_index: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
794 flength += len(plural_index) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
795 real_wrapwidth = wrapwidth - flength + specialchars_count |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
796 if wrapwidth > 0 and len(field) > real_wrapwidth: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
797 # Wrap the line but take field name into account |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
798 lines = [''] + [unescape(item) for item in wrap( |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
799 escaped_field, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
800 wrapwidth - 2, # 2 for quotes "" |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
801 drop_whitespace=False, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
802 break_long_words=False |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
803 )] |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
804 else: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
805 lines = [field] |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
806 if fieldname.startswith('previous_'): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
807 # quick and dirty trick to get the real field name |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
808 fieldname = fieldname[9:] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
809 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
810 ret = ['%s%s%s "%s"' % (delflag, fieldname, plural_index, |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
811 escape(lines.pop(0)))] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
812 for mstr in lines: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
813 ret.append('%s"%s"' % (delflag, escape(mstr))) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
814 return ret |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
815 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
816 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
817 # class POEntry {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
818 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
819 class POEntry(_BaseEntry): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
820 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
821 Represents a po file entry. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
822 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
823 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
824 def __init__(self, *args, **kwargs): |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
825 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
826 Constructor, accepts the following keyword arguments: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
827 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
828 ``comment`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
829 string, the entry comment. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
830 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
831 ``tcomment`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
832 string, the entry translator comment. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
833 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
834 ``occurrences`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
835 list, the entry occurrences. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
836 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
837 ``flags`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
838 list, the entry flags. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
839 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
840 ``previous_msgctxt`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
841 string, the entry previous context. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
842 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
843 ``previous_msgid`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
844 string, the entry previous msgid. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
845 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
846 ``previous_msgid_plural`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
847 string, the entry previous msgid_plural. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
848 """ |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
849 _BaseEntry.__init__(self, *args, **kwargs) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
850 self.comment = kwargs.get('comment', '') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
851 self.tcomment = kwargs.get('tcomment', '') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
852 self.occurrences = kwargs.get('occurrences', []) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
853 self.flags = kwargs.get('flags', []) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
854 self.previous_msgctxt = kwargs.get('previous_msgctxt', None) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
855 self.previous_msgid = kwargs.get('previous_msgid', None) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
856 self.previous_msgid_plural = kwargs.get('previous_msgid_plural', None) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
857 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
858 def __unicode__(self, wrapwidth=78): |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
859 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
860 Returns the unicode representation of the entry. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
861 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
862 if self.obsolete: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
863 return _BaseEntry.__unicode__(self, wrapwidth) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
864 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
865 ret = [] |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
866 # comments first, if any (with text wrapping as xgettext does) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
867 comments = [('comment', '#. '), ('tcomment', '# ')] |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
868 for c in comments: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
869 val = getattr(self, c[0]) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
870 if val: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
871 for comment in val.split('\n'): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
872 if wrapwidth > 0 and len(comment) + len(c[1]) > wrapwidth: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
873 ret += wrap( |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
874 comment, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
875 wrapwidth, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
876 initial_indent=c[1], |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
877 subsequent_indent=c[1], |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
878 break_long_words=False |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
879 ) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
880 else: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
881 ret.append('%s%s' % (c[1], comment)) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
882 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
883 # occurrences (with text wrapping as xgettext does) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
884 if self.occurrences: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
885 filelist = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
886 for fpath, lineno in self.occurrences: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
887 if lineno: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
888 filelist.append('%s:%s' % (fpath, lineno)) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
889 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
890 filelist.append(fpath) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
891 filestr = ' '.join(filelist) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
892 if wrapwidth > 0 and len(filestr) + 3 > wrapwidth: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
893 # textwrap split words that contain hyphen, this is not |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
894 # what we want for filenames, so the dirty hack is to |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
895 # temporally replace hyphens with a char that a file cannot |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
896 # contain, like "*" |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
897 ret += [l.replace('*', '-') for l in wrap( |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
898 filestr.replace('-', '*'), |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
899 wrapwidth, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
900 initial_indent='#: ', |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
901 subsequent_indent='#: ', |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
902 break_long_words=False |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
903 )] |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
904 else: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
905 ret.append('#: ' + filestr) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
906 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
907 # flags (TODO: wrapping ?) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
908 if self.flags: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
909 ret.append('#, %s' % ', '.join(self.flags)) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
910 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
911 # previous context and previous msgid/msgid_plural |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
912 fields = ['previous_msgctxt', 'previous_msgid', 'previous_msgid_plural'] |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
913 for f in fields: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
914 val = getattr(self, f) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
915 if val: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
916 ret += self._str_field(f, "#| ", "", val, wrapwidth) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
917 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
918 ret.append(_BaseEntry.__unicode__(self, wrapwidth)) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
919 ret = '\n'.join(ret) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
920 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
921 if type(ret) != types.UnicodeType: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
922 return unicode(ret, self.encoding) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
923 return ret |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
924 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
925 def __cmp__(self, other): |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
926 """ |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
927 Called by comparison operations if rich comparison is not defined. |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
928 """ |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
929 def compare_occurrences(a, b): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
930 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
931 Compare an entry occurrence with another one. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
932 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
933 if a[0] != b[0]: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
934 return a[0] < b[0] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
935 if a[1] != b[1]: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
936 return a[1] < b[1] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
937 return 0 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
938 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
939 # First: Obsolete test |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
940 if self.obsolete != other.obsolete: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
941 if self.obsolete: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
942 return -1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
943 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
944 return 1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
945 # Work on a copy to protect original |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
946 occ1 = self.occurrences[:] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
947 occ2 = other.occurrences[:] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
948 # Sorting using compare method |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
949 occ1.sort(compare_occurrences) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
950 occ2.sort(compare_occurrences) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
951 # Comparing sorted occurrences |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
952 pos = 0 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
953 for entry1 in occ1: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
954 try: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
955 entry2 = occ2[pos] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
956 except IndexError: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
957 return 1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
958 pos = pos + 1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
959 if entry1[0] != entry2[0]: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
960 if entry1[0] > entry2[0]: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
961 return 1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
962 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
963 return -1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
964 if entry1[1] != entry2[1]: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
965 if entry1[1] > entry2[1]: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
966 return 1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
967 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
968 return -1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
969 # Finally: Compare message ID |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
970 if self.msgid > other.msgid: return 1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
971 else: return -1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
972 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
973 def translated(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
974 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
975 Returns ``True`` if the entry has been translated or ``False`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
976 otherwise. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
977 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
978 if self.obsolete or 'fuzzy' in self.flags: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
979 return False |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
980 if self.msgstr != '': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
981 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
982 if self.msgstr_plural: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
983 for pos in self.msgstr_plural: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
984 if self.msgstr_plural[pos] == '': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
985 return False |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
986 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
987 return False |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
988 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
989 def merge(self, other): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
990 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
991 Merge the current entry with the given pot entry. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
992 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
993 self.msgid = other.msgid |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
994 self.msgctxt = other.msgctxt |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
995 self.occurrences = other.occurrences |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
996 self.comment = other.comment |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
997 fuzzy = 'fuzzy' in self.flags |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
998 self.flags = other.flags[:] # clone flags |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
999 if fuzzy: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1000 self.flags.append('fuzzy') |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1001 self.msgid_plural = other.msgid_plural |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1002 self.obsolete = other.obsolete |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1003 self.previous_msgctxt = other.previous_msgctxt |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1004 self.previous_msgid = other.previous_msgid |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1005 self.previous_msgid_plural = other.previous_msgid_plural |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1006 if other.msgstr_plural: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1007 for pos in other.msgstr_plural: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1008 try: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1009 # keep existing translation at pos if any |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1010 self.msgstr_plural[pos] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1011 except KeyError: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1012 self.msgstr_plural[pos] = '' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1013 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1014 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1015 # class MOEntry {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1016 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1017 class MOEntry(_BaseEntry): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1018 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1019 Represents a mo file entry. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1020 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1021 pass |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1022 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1023 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1024 # class _POFileParser {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1025 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1026 class _POFileParser(object): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1027 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1028 A finite state machine to parse efficiently and correctly po |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1029 file format. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1030 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1031 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1032 def __init__(self, pofile, *args, **kwargs): |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1033 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1034 Constructor. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1035 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1036 Keyword arguments: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1037 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1038 ``pofile`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1039 string, path to the po file or its content |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1040 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1041 ``encoding`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1042 string, the encoding to use, defaults to ``default_encoding`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1043 global variable (optional). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1044 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1045 ``check_for_duplicates`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1046 whether to check for duplicate entries when adding entries to the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1047 file (optional, default: ``False``). |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1048 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1049 enc = kwargs.get('encoding', default_encoding) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1050 if os.path.exists(pofile): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1051 try: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1052 self.fhandle = codecs.open(pofile, 'rU', enc) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1053 except LookupError: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1054 enc = default_encoding |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1055 self.fhandle = codecs.open(pofile, 'rU', enc) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1056 else: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1057 self.fhandle = pofile.splitlines() |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1058 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1059 self.instance = POFile( |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1060 pofile=pofile, |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1061 encoding=enc, |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1062 check_for_duplicates=kwargs.get('check_for_duplicates', False) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1063 ) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1064 self.transitions = {} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1065 self.current_entry = POEntry() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1066 self.current_state = 'ST' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1067 self.current_token = None |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1068 # two memo flags used in handlers |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1069 self.msgstr_index = 0 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1070 self.entry_obsolete = 0 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1071 # Configure the state machine, by adding transitions. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1072 # Signification of symbols: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1073 # * ST: Beginning of the file (start) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1074 # * HE: Header |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1075 # * TC: a translation comment |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1076 # * GC: a generated comment |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1077 # * OC: a file/line occurence |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1078 # * FL: a flags line |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1079 # * CT: a message context |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1080 # * PC: a previous msgctxt |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1081 # * PM: a previous msgid |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1082 # * PP: a previous msgid_plural |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1083 # * MI: a msgid |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1084 # * MP: a msgid plural |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1085 # * MS: a msgstr |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1086 # * MX: a msgstr plural |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1087 # * MC: a msgid or msgstr continuation line |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1088 all = ['ST', 'HE', 'GC', 'OC', 'FL', 'CT', 'PC', 'PM', 'PP', 'TC', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1089 'MS', 'MP', 'MX', 'MI'] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1090 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1091 self.add('TC', ['ST', 'HE'], 'HE') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1092 self.add('TC', ['GC', 'OC', 'FL', 'TC', 'PC', 'PM', 'PP', 'MS', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1093 'MP', 'MX', 'MI'], 'TC') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1094 self.add('GC', all, 'GC') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1095 self.add('OC', all, 'OC') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1096 self.add('FL', all, 'FL') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1097 self.add('PC', all, 'PC') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1098 self.add('PM', all, 'PM') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1099 self.add('PP', all, 'PP') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1100 self.add('CT', ['ST', 'HE', 'GC', 'OC', 'FL', 'TC', 'PC', 'PM', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1101 'PP', 'MS', 'MX'], 'CT') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1102 self.add('MI', ['ST', 'HE', 'GC', 'OC', 'FL', 'CT', 'TC', 'PC', |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1103 'PM', 'PP', 'MS', 'MX'], 'MI') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1104 self.add('MP', ['TC', 'GC', 'PC', 'PM', 'PP', 'MI'], 'MP') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1105 self.add('MS', ['MI', 'MP', 'TC'], 'MS') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1106 self.add('MX', ['MI', 'MX', 'MP', 'TC'], 'MX') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1107 self.add('MC', ['CT', 'MI', 'MP', 'MS', 'MX', 'PM', 'PP', 'PC'], 'MC') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1108 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1109 def parse(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1110 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1111 Run the state machine, parse the file line by line and call process() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1112 with the current matched symbol. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1113 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1114 i = 0 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1115 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1116 keywords = { |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1117 'msgctxt': 'CT', |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1118 'msgid': 'MI', |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1119 'msgstr': 'MS', |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1120 'msgid_plural': 'MP', |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1121 } |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1122 prev_keywords = { |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1123 'msgid_plural': 'PP', |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1124 'msgid': 'PM', |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1125 'msgctxt': 'PC', |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1126 } |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1127 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1128 for line in self.fhandle: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1129 i += 1 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1130 line = line.strip() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1131 if line == '': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1132 continue |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1133 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1134 tokens = line.split(None, 2) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1135 nb_tokens = len(tokens) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1136 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1137 if tokens[0] == '#~' and nb_tokens > 1: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1138 line = line[3:].strip() |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1139 tokens = tokens[1:] |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1140 nb_tokens -= 1 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1141 self.entry_obsolete = 1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1142 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1143 self.entry_obsolete = 0 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1144 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1145 # Take care of keywords like |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1146 # msgid, msgid_plural, msgctxt & msgstr. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1147 if tokens[0] in keywords and nb_tokens > 1: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1148 line = line[len(tokens[0]):].lstrip() |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1149 self.current_token = line |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1150 self.process(keywords[tokens[0]], i) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1151 continue |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1152 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1153 self.current_token = line |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1154 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1155 if tokens[0] == '#:' and nb_tokens > 1: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1156 # we are on a occurrences line |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1157 self.process('OC', i) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1158 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1159 elif line[:1] == '"': |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1160 # we are on a continuation line |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1161 self.process('MC', i) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1162 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1163 elif line[:7] == 'msgstr[': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1164 # we are on a msgstr plural |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1165 self.process('MX', i) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1166 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1167 elif tokens[0] == '#,' and nb_tokens > 1: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1168 # we are on a flags line |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1169 self.process('FL', i) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1170 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1171 elif tokens[0] == '#': |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1172 if line == '#': line += ' ' |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1173 # we are on a translator comment line |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1174 self.process('TC', i) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1175 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1176 elif tokens[0] == '#.' and nb_tokens > 1: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1177 # we are on a generated comment line |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1178 self.process('GC', i) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1179 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1180 elif tokens[0] == '#|': |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1181 if nb_tokens < 2: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1182 self.process('??', i) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1183 continue |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1184 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1185 # Remove the marker and any whitespace right after that. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1186 line = line[2:].lstrip() |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1187 self.current_token = line |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1188 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1189 if tokens[1].startswith('"'): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1190 # Continuation of previous metadata. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1191 self.process('MC', i) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1192 continue |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1193 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1194 if nb_tokens == 2: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1195 # Invalid continuation line. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1196 self.process('??', i) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1197 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1198 # we are on a "previous translation" comment line, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1199 if tokens[1] not in prev_keywords: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1200 # Unknown keyword in previous translation comment. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1201 self.process('??', i) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1202 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1203 # Remove the keyword and any whitespace |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1204 # between it and the starting quote. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1205 line = line[len(tokens[1]):].lstrip() |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1206 self.current_token = line |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1207 self.process(prev_keywords[tokens[1]], i) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1208 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1209 else: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1210 self.process('??', i) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1211 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1212 if self.current_entry: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1213 # since entries are added when another entry is found, we must add |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1214 # the last entry here (only if there are lines) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1215 self.instance.append(self.current_entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1216 # before returning the instance, check if there's metadata and if |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1217 # so extract it in a dict |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1218 firstentry = self.instance[0] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1219 if firstentry.msgid == '': # metadata found |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1220 # remove the entry |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1221 firstentry = self.instance.pop(0) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1222 self.instance.metadata_is_fuzzy = firstentry.flags |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1223 key = None |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1224 for msg in firstentry.msgstr.splitlines(): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1225 try: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1226 key, val = msg.split(':', 1) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1227 self.instance.metadata[key] = val.strip() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1228 except: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1229 if key is not None: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1230 self.instance.metadata[key] += '\n'+ msg.strip() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1231 # close opened file |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1232 if isinstance(self.fhandle, file): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1233 self.fhandle.close() |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1234 return self.instance |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1235 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1236 def add(self, symbol, states, next_state): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1237 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1238 Add a transition to the state machine. |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1239 |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1240 Keywords arguments: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1241 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1242 ``symbol`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1243 string, the matched token (two chars symbol). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1244 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1245 ``states`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1246 list, a list of states (two chars symbols). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1247 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1248 ``next_state`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1249 the next state the fsm will have after the action. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1250 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1251 for state in states: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1252 action = getattr(self, 'handle_%s' % next_state.lower()) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1253 self.transitions[(symbol, state)] = (action, next_state) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1254 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1255 def process(self, symbol, linenum): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1256 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1257 Process the transition corresponding to the current state and the |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1258 symbol provided. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1259 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1260 Keywords arguments: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1261 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1262 ``symbol`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1263 string, the matched token (two chars symbol). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1264 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1265 ``linenum`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1266 integer, the current line number of the parsed file. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1267 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1268 try: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1269 (action, state) = self.transitions[(symbol, self.current_state)] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1270 if action(): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1271 self.current_state = state |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1272 except Exception, exc: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1273 raise IOError('Syntax error in po file (line %s)' % linenum) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1274 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1275 # state handlers |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1276 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1277 def handle_he(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1278 """Handle a header comment.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1279 if self.instance.header != '': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1280 self.instance.header += '\n' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1281 self.instance.header += self.current_token[2:] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1282 return 1 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1283 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1284 def handle_tc(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1285 """Handle a translator comment.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1286 if self.current_state in ['MC', 'MS', 'MX']: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1287 self.instance.append(self.current_entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1288 self.current_entry = POEntry() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1289 if self.current_entry.tcomment != '': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1290 self.current_entry.tcomment += '\n' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1291 self.current_entry.tcomment += self.current_token[2:] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1292 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1293 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1294 def handle_gc(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1295 """Handle a generated comment.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1296 if self.current_state in ['MC', 'MS', 'MX']: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1297 self.instance.append(self.current_entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1298 self.current_entry = POEntry() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1299 if self.current_entry.comment != '': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1300 self.current_entry.comment += '\n' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1301 self.current_entry.comment += self.current_token[3:] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1302 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1303 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1304 def handle_oc(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1305 """Handle a file:num occurence.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1306 if self.current_state in ['MC', 'MS', 'MX']: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1307 self.instance.append(self.current_entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1308 self.current_entry = POEntry() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1309 occurrences = self.current_token[3:].split() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1310 for occurrence in occurrences: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1311 if occurrence != '': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1312 try: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1313 fil, line = occurrence.split(':') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1314 if not line.isdigit(): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1315 fil = fil + line |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1316 line = '' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1317 self.current_entry.occurrences.append((fil, line)) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1318 except: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1319 self.current_entry.occurrences.append((occurrence, '')) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1320 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1321 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1322 def handle_fl(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1323 """Handle a flags line.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1324 if self.current_state in ['MC', 'MS', 'MX']: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1325 self.instance.append(self.current_entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1326 self.current_entry = POEntry() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1327 self.current_entry.flags += self.current_token[3:].split(', ') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1328 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1329 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1330 def handle_pp(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1331 """Handle a previous msgid_plural line.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1332 if self.current_state in ['MC', 'MS', 'MX']: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1333 self.instance.append(self.current_entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1334 self.current_entry = POEntry() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1335 self.current_entry.previous_msgid_plural = \ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1336 unescape(self.current_token[1:-1]) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1337 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1338 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1339 def handle_pm(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1340 """Handle a previous msgid line.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1341 if self.current_state in ['MC', 'MS', 'MX']: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1342 self.instance.append(self.current_entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1343 self.current_entry = POEntry() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1344 self.current_entry.previous_msgid = \ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1345 unescape(self.current_token[1:-1]) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1346 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1347 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1348 def handle_pc(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1349 """Handle a previous msgctxt line.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1350 if self.current_state in ['MC', 'MS', 'MX']: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1351 self.instance.append(self.current_entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1352 self.current_entry = POEntry() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1353 self.current_entry.previous_msgctxt = \ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1354 unescape(self.current_token[1:-1]) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1355 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1356 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1357 def handle_ct(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1358 """Handle a msgctxt.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1359 if self.current_state in ['MC', 'MS', 'MX']: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1360 self.instance.append(self.current_entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1361 self.current_entry = POEntry() |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1362 self.current_entry.msgctxt = unescape(self.current_token[1:-1]) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1363 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1364 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1365 def handle_mi(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1366 """Handle a msgid.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1367 if self.current_state in ['MC', 'MS', 'MX']: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1368 self.instance.append(self.current_entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1369 self.current_entry = POEntry() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1370 self.current_entry.obsolete = self.entry_obsolete |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1371 self.current_entry.msgid = unescape(self.current_token[1:-1]) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1372 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1373 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1374 def handle_mp(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1375 """Handle a msgid plural.""" |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1376 self.current_entry.msgid_plural = unescape(self.current_token[1:-1]) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1377 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1378 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1379 def handle_ms(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1380 """Handle a msgstr.""" |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1381 self.current_entry.msgstr = unescape(self.current_token[1:-1]) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1382 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1383 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1384 def handle_mx(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1385 """Handle a msgstr plural.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1386 index, value = self.current_token[7], self.current_token[11:-1] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1387 self.current_entry.msgstr_plural[index] = unescape(value) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1388 self.msgstr_index = index |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1389 return True |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1390 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1391 def handle_mc(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1392 """Handle a msgid or msgstr continuation line.""" |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1393 token = unescape(self.current_token[1:-1]) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1394 if self.current_state == 'CT': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1395 typ = 'msgctxt' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1396 self.current_entry.msgctxt += token |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1397 elif self.current_state == 'MI': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1398 typ = 'msgid' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1399 self.current_entry.msgid += token |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1400 elif self.current_state == 'MP': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1401 typ = 'msgid_plural' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1402 self.current_entry.msgid_plural += token |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1403 elif self.current_state == 'MS': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1404 typ = 'msgstr' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1405 self.current_entry.msgstr += token |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1406 elif self.current_state == 'MX': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1407 typ = 'msgstr[%s]' % self.msgstr_index |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1408 self.current_entry.msgstr_plural[self.msgstr_index] += token |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1409 elif self.current_state == 'PP': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1410 typ = 'previous_msgid_plural' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1411 token = token[3:] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1412 self.current_entry.previous_msgid_plural += token |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1413 elif self.current_state == 'PM': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1414 typ = 'previous_msgid' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1415 token = token[3:] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1416 self.current_entry.previous_msgid += token |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1417 elif self.current_state == 'PC': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1418 typ = 'previous_msgctxt' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1419 token = token[3:] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1420 self.current_entry.previous_msgctxt += token |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1421 # don't change the current state |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1422 return False |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1423 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1424 # }}} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1425 # class _MOFileParser {{{ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1426 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1427 class _MOFileParser(object): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1428 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1429 A class to parse binary mo files. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1430 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1431 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1432 def __init__(self, mofile, *args, **kwargs): |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1433 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1434 Constructor. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1435 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1436 Keyword arguments: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1437 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1438 ``mofile`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1439 string, path to the mo file or its content |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1440 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1441 ``encoding`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1442 string, the encoding to use, defaults to ``default_encoding`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1443 global variable (optional). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1444 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1445 ``check_for_duplicates`` |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1446 whether to check for duplicate entries when adding entries to the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1447 file (optional, default: ``False``). |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1448 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1449 self.fhandle = open(mofile, 'rb') |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1450 self.instance = MOFile( |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1451 fpath=mofile, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1452 encoding=kwargs.get('encoding', default_encoding), |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1453 check_for_duplicates=kwargs.get('check_for_duplicates', False) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1454 ) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1455 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1456 def parse(self): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1457 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1458 Build the instance with the file handle provided in the |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1459 constructor. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1460 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1461 # parse magic number |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1462 magic_number = self._readbinary('<I', 4) |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1463 if magic_number == MOFile.LITTLE_ENDIAN: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1464 ii = '<II' |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1465 elif magic_number == MOFile.BIG_ENDIAN: |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1466 ii = '>II' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1467 else: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1468 raise IOError('Invalid mo file, magic number is incorrect !') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1469 self.instance.magic_number = magic_number |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1470 # parse the version number and the number of strings |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1471 self.instance.version, numofstrings = self._readbinary(ii, 8) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1472 # original strings and translation strings hash table offset |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1473 msgids_hash_offset, msgstrs_hash_offset = self._readbinary(ii, 8) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1474 # move to msgid hash table and read length and offset of msgids |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1475 self.fhandle.seek(msgids_hash_offset) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1476 msgids_index = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1477 for i in range(numofstrings): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1478 msgids_index.append(self._readbinary(ii, 8)) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1479 # move to msgstr hash table and read length and offset of msgstrs |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1480 self.fhandle.seek(msgstrs_hash_offset) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1481 msgstrs_index = [] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1482 for i in range(numofstrings): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1483 msgstrs_index.append(self._readbinary(ii, 8)) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1484 # build entries |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1485 for i in range(numofstrings): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1486 self.fhandle.seek(msgids_index[i][1]) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1487 msgid = self.fhandle.read(msgids_index[i][0]) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1488 self.fhandle.seek(msgstrs_index[i][1]) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1489 msgstr = self.fhandle.read(msgstrs_index[i][0]) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1490 if i == 0: # metadata |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1491 raw_metadata, metadata = msgstr.split('\n'), {} |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1492 for line in raw_metadata: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1493 tokens = line.split(':', 1) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1494 if tokens[0] != '': |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1495 try: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1496 metadata[tokens[0]] = tokens[1].strip() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1497 except IndexError: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1498 metadata[tokens[0]] = '' |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1499 self.instance.metadata = metadata |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1500 continue |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1501 # test if we have a plural entry |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1502 msgid_tokens = msgid.split('\0') |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1503 if len(msgid_tokens) > 1: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1504 entry = self._build_entry( |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1505 msgid=msgid_tokens[0], |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1506 msgid_plural=msgid_tokens[1], |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1507 msgstr_plural=dict((k,v) for k,v in enumerate(msgstr.split('\0'))) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1508 ) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1509 else: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1510 entry = self._build_entry(msgid=msgid, msgstr=msgstr) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1511 self.instance.append(entry) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1512 # close opened file |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1513 self.fhandle.close() |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1514 return self.instance |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1515 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1516 def _build_entry(self, msgid, msgstr=None, msgid_plural=None, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1517 msgstr_plural=None): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1518 msgctxt_msgid = msgid.split('\x04') |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1519 if len(msgctxt_msgid) > 1: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1520 kwargs = { |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1521 'msgctxt': msgctxt_msgid[0], |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1522 'msgid' : msgctxt_msgid[1], |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1523 } |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1524 else: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1525 kwargs = {'msgid': msgid} |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1526 if msgstr: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1527 kwargs['msgstr'] = msgstr |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1528 if msgid_plural: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1529 kwargs['msgid_plural'] = msgid_plural |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1530 if msgstr_plural: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1531 kwargs['msgstr_plural'] = msgstr_plural |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1532 return MOEntry(**kwargs) |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1533 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1534 def _readbinary(self, fmt, numbytes): |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1535 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1536 Private method that unpack n bytes of data using format <fmt>. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1537 It returns a tuple or a mixed value if the tuple length is 1. |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1538 """ |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1539 bytes = self.fhandle.read(numbytes) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1540 tup = struct.unpack(fmt, bytes) |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1541 if len(tup) == 1: |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1542 return tup[0] |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1543 return tup |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1544 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1545 # }}} |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1546 # class TextWrapper {{{ |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1547 |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1548 class TextWrapper(textwrap.TextWrapper): |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1549 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1550 Subclass of textwrap.TextWrapper that backport the |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1551 drop_whitespace option. |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1552 """ |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1553 def __init__(self, *args, **kwargs): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1554 drop_whitespace = kwargs.pop('drop_whitespace', True) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1555 textwrap.TextWrapper.__init__(self, *args, **kwargs) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1556 self.drop_whitespace = drop_whitespace |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1557 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1558 def _wrap_chunks(self, chunks): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1559 """_wrap_chunks(chunks : [string]) -> [string] |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1560 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1561 Wrap a sequence of text chunks and return a list of lines of |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1562 length 'self.width' or less. (If 'break_long_words' is false, |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1563 some lines may be longer than this.) Chunks correspond roughly |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1564 to words and the whitespace between them: each chunk is |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1565 indivisible (modulo 'break_long_words'), but a line break can |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1566 come between any two chunks. Chunks should not have internal |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1567 whitespace; ie. a chunk is either all whitespace or a "word". |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1568 Whitespace chunks will be removed from the beginning and end of |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1569 lines, but apart from that whitespace is preserved. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1570 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1571 lines = [] |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1572 if self.width <= 0: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1573 raise ValueError("invalid width %r (must be > 0)" % self.width) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1574 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1575 # Arrange in reverse order so items can be efficiently popped |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1576 # from a stack of chucks. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1577 chunks.reverse() |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1578 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1579 while chunks: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1580 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1581 # Start the list of chunks that will make up the current line. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1582 # cur_len is just the length of all the chunks in cur_line. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1583 cur_line = [] |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1584 cur_len = 0 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1585 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1586 # Figure out which static string will prefix this line. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1587 if lines: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1588 indent = self.subsequent_indent |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1589 else: |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1590 indent = self.initial_indent |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1591 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1592 # Maximum width for this line. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1593 width = self.width - len(indent) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1594 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1595 # First chunk on line is whitespace -- drop it, unless this |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1596 # is the very beginning of the text (ie. no lines started yet). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1597 if self.drop_whitespace and chunks[-1].strip() == '' and lines: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1598 del chunks[-1] |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1599 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1600 while chunks: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1601 l = len(chunks[-1]) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1602 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1603 # Can at least squeeze this chunk onto the current line. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1604 if cur_len + l <= width: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1605 cur_line.append(chunks.pop()) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1606 cur_len += l |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1607 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1608 # Nope, this line is full. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1609 else: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1610 break |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1611 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1612 # The current line is full, and the next chunk is too big to |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1613 # fit on *any* line (not just this one). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1614 if chunks and len(chunks[-1]) > width: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1615 self._handle_long_word(chunks, cur_line, cur_len, width) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1616 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1617 # If the last chunk on this line is all whitespace, drop it. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1618 if self.drop_whitespace and cur_line and cur_line[-1].strip() == '': |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1619 del cur_line[-1] |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1620 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1621 # Convert current line back to a string and store it in list |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1622 # of all lines (return value). |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1623 if cur_line: |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1624 lines.append(indent + ''.join(cur_line)) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1625 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1626 return lines |
11387
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1627 |
181936ec9bfb
i18n: import polib 0.5.2 (rev b0ab301cfdcc)
Wagner Bruna <wbruna@yahoo.com>
parents:
diff
changeset
|
1628 # }}} |
15290
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1629 # function wrap() {{{ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1630 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1631 def wrap(text, width=70, **kwargs): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1632 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1633 Wrap a single paragraph of text, returning a list of wrapped lines. |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1634 """ |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1635 if sys.version_info < (2, 6): |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1636 return TextWrapper(width=width, **kwargs).wrap(text) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1637 return textwrap.wrap(text, width=width, **kwargs) |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1638 |
e40430fb787b
i18n: import polib 0.6.4 (rev 84598f2b5365)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
13030
diff
changeset
|
1639 #}}} |