mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Close #630: Revamp data structures used for message catalogs.
This commit is contained in:
parent
16a2fd9010
commit
651a00f3cd
@ -43,6 +43,17 @@ msgstr ""
|
|||||||
"""[1:]
|
"""[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):
|
class I18nBuilder(Builder):
|
||||||
"""
|
"""
|
||||||
General i18n builder.
|
General i18n builder.
|
||||||
@ -52,7 +63,7 @@ class I18nBuilder(Builder):
|
|||||||
|
|
||||||
def init(self):
|
def init(self):
|
||||||
Builder.init(self)
|
Builder.init(self)
|
||||||
self.catalogs = defaultdict(dict)
|
self.catalogs = defaultdict(Catalog)
|
||||||
|
|
||||||
def get_target_uri(self, docname, typ=None):
|
def get_target_uri(self, docname, typ=None):
|
||||||
return ''
|
return ''
|
||||||
@ -71,9 +82,7 @@ class I18nBuilder(Builder):
|
|||||||
continue # built-in message
|
continue # built-in message
|
||||||
if isinstance(node, nodes.literal_block):
|
if isinstance(node, nodes.literal_block):
|
||||||
continue
|
continue
|
||||||
if not msg in catalog:
|
catalog.add(msg, node)
|
||||||
catalog[msg] = []
|
|
||||||
catalog[msg].append((node.source, node.line, node.uid))
|
|
||||||
|
|
||||||
|
|
||||||
class MessageCatalogBuilder(I18nBuilder):
|
class MessageCatalogBuilder(I18nBuilder):
|
||||||
@ -91,7 +100,7 @@ class MessageCatalogBuilder(I18nBuilder):
|
|||||||
# XXX should supply tz
|
# XXX should supply tz
|
||||||
ctime = datetime.now().strftime('%Y-%m-%d %H:%M%z'),
|
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... ",
|
self.catalogs.iteritems(), "writing message catalogs... ",
|
||||||
lambda (section, _):darkgreen(section), len(self.catalogs)):
|
lambda (section, _):darkgreen(section), len(self.catalogs)):
|
||||||
|
|
||||||
@ -99,7 +108,8 @@ class MessageCatalogBuilder(I18nBuilder):
|
|||||||
pofile = open(pofn, 'w', encoding='utf-8')
|
pofile = open(pofn, 'w', encoding='utf-8')
|
||||||
try:
|
try:
|
||||||
pofile.write(POHEADER % data)
|
pofile.write(POHEADER % data)
|
||||||
for message, positions in messages.iteritems():
|
for message in catalog.messages:
|
||||||
|
positions = catalog.metadata[message]
|
||||||
if positions:
|
if positions:
|
||||||
# generate "#: file1:line1 file2:line2 ..."
|
# generate "#: file1:line1 file2:line2 ..."
|
||||||
pofile.write(u"#: %s\n" % ", ".join("%s:%s" %
|
pofile.write(u"#: %s\n" % ", ".join("%s:%s" %
|
||||||
|
Loading…
Reference in New Issue
Block a user