diff options
| author | Robert Lehmann <mail@robertlehmann.de> | 2011-07-06 08:25:25 +0200 |
|---|---|---|
| committer | Robert Lehmann <mail@robertlehmann.de> | 2011-07-06 08:25:25 +0200 |
| commit | d52b544a3e40ce2fa8a57502a9af9e9895b13292 (patch) | |
| tree | 88d93e0d0dbbca5b7c9b25e9a3296b18927cfdf6 /sphinx/builders | |
| parent | fdf0755fcb251ac1e6d4b6ead86266286138f611 (diff) | |
| download | sphinx-d52b544a3e40ce2fa8a57502a9af9e9895b13292.tar.gz | |
Close #630: Revamp data structures used for message catalogs.
Diffstat (limited to 'sphinx/builders')
| -rw-r--r-- | sphinx/builders/gettext.py | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/sphinx/builders/gettext.py b/sphinx/builders/gettext.py index 89703e72..47336cad 100644 --- a/sphinx/builders/gettext.py +++ b/sphinx/builders/gettext.py @@ -43,6 +43,17 @@ msgstr "" """[1:] +class Catalog(object): + def __init__(self): + self.messages = [] # retain order + self.metadata = {} # msgid -> file, line, uid + def add(self, msg, origin): + if msg not in self.metadata: # faster lookup in hash + self.messages.append(msg) + self.metadata[msg] = [] + self.metadata[msg].append((origin.source, origin.line, origin.uid)) + + class I18nBuilder(Builder): """ General i18n builder. @@ -52,7 +63,7 @@ class I18nBuilder(Builder): def init(self): Builder.init(self) - self.catalogs = defaultdict(dict) + self.catalogs = defaultdict(Catalog) def get_target_uri(self, docname, typ=None): return '' @@ -71,9 +82,7 @@ class I18nBuilder(Builder): continue # built-in message if isinstance(node, nodes.literal_block): continue - if not msg in catalog: - catalog[msg] = [] - catalog[msg].append((node.source, node.line, node.uid)) + catalog.add(msg, node) class MessageCatalogBuilder(I18nBuilder): @@ -91,7 +100,7 @@ class MessageCatalogBuilder(I18nBuilder): # XXX should supply tz ctime = datetime.now().strftime('%Y-%m-%d %H:%M%z'), ) - for section, messages in self.status_iterator( + for section, catalog in self.status_iterator( self.catalogs.iteritems(), "writing message catalogs... ", lambda (section, _):darkgreen(section), len(self.catalogs)): @@ -99,7 +108,8 @@ class MessageCatalogBuilder(I18nBuilder): pofile = open(pofn, 'w', encoding='utf-8') try: pofile.write(POHEADER % data) - for message, positions in messages.iteritems(): + for message in catalog.messages: + positions = catalog.metadata[message] if positions: # generate "#: file1:line1 file2:line2 ..." pofile.write(u"#: %s\n" % ", ".join("%s:%s" % |
