Robert Lehmann avatar Robert Lehmann committed 5976fac

Refactor comment generating code for message catalogs.
Bring back UUIDs in comments too.

Overrides kou's 7b77dd3717af.

Comments (0)

Files changed (1)

sphinx/builders/gettext.py

         catalog = self.catalogs[docname.split(SEP, 1)[0]]
 
         for node, msg in extract_messages(doctree):
+            if not node.source:
+                continue # built-in message
             if not msg in catalog:
                 catalog[msg] = []
-            if node.source and node.line:
-                position = {"source": node.source,
-                            "line": node.line}
-                catalog[msg].append(position)
+            catalog[msg].append((node.source, node.line, node.uid))
 
 
 class MessageCatalogBuilder(I18nBuilder):
             try:
                 pofile.write(POHEADER % data)
                 for message, positions in messages.iteritems():
+                    if positions:
+                        # generate "#: file1:line1 file2:line2 ..."
+                        pofile.write(u"#: %s\n" % ", ".join("%s:%s" %
+                            (path.relpath(source, self.srcdir), line)
+                            for source, line, _ in positions))
+                        # generate "# uuid ..."
+                        pofile.write(u"# %s\n" % ", ".join(uid for _, _, uid
+                            in positions))
                     # message contains *one* line of text ready for translation
                     message = message.replace(u'\\', ur'\\'). \
                                       replace(u'"', ur'\"')
-                    for position in positions:
-                        source = path.relpath(position["source"], self.outdir)
-                        line = position["line"]
-                        pofile.write(u'#: %s:%d\n' % (source, line))
                     pofile.write(u'msgid "%s"\nmsgstr ""\n\n' % message)
             finally:
                 pofile.close()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.