Index: translate/storage/cpo.py
===================================================================
--- translate/storage/cpo.py (revision 7803)
+++ translate/storage/cpo.py (working copy)
@@ -140,6 +140,9 @@
gpo.po_message_set_extracted_comments.argtypes = [c_int, STRING]
gpo.po_message_set_fuzzy.argtypes = [c_int, c_int]
gpo.po_message_set_msgctxt.argtypes = [c_int, STRING]
+gpo.po_message_set_prev_msgctxt.argtypes = [c_int, STRING]
+gpo.po_message_set_prev_msgid.argtypes = [c_int, STRING]
+gpo.po_message_set_prev_msgid_plural.argtypes = [c_int, STRING]
# Setup the po_xerror_handler
xerror_handler = po_xerror_handler()
@@ -195,6 +198,72 @@
gpo.po_message_set_msgid_plural(self._gpo_message, msgid_plural)
msgid_plural = property(None, setmsgid_plural)
+ def setprev_context(self, context):
+ """Set the previous context for this message"""
+ if self.isfuzzy():
+ return
+ gpo.po_message_set_prev_msgctxt(self._gpo_message, context)
+
+ def getprev_context(self):
+ """Get the previous context for this message, if any """
+ prev_ctxt = gpo.po_message_prev_msgctxt(self._gpo_message)
+ if not prev_ctxt:
+ return ""
+ return prev_ctxt
+
+ prev_context = property(getprev_context, setprev_context)
+
+ def setprev_source(self, prev_source):
+ """Set msgid as a previous msgid for this message"""
+ if self.isfuzzy():
+ return
+ if not self.source:
+ return
+ if isinstance(prev_source, multistring):
+ prev_source = prev_source.strings
+ if isinstance(prev_source, unicode):
+ prev_source = prev_source.encode(self._encoding)
+ if isinstance(prev_source, list):
+ if len(prev_source) > 1:
+ msgid_plural = str(prev_source[1])
+ if isinstance(msgid_plural, list):
+ msgid_plural = "".join(msgid_plural)
+
+ gpo.po_message_set_prev_msgid_plural(self._gpo_message,
+ msgid_plural)
+ prev_source = str(prev_source[0])
+
+ gpo.po_message_set_prev_msgid(self._gpo_message, prev_source)
+
+ def getprev_source(self):
+ """Get the previous msgid for this message, if any"""
+ prev_source = gpo.po_message_prev_msgid(self._gpo_message)
+ if not prev_source:
+ return multistring(u"")
+
+ prev_source = multistring(prev_source, self._encoding)
+ prev_plural = gpo.po_message_prev_msgid_plural(self._gpo_message)
+ if prev_plural:
+ prev_source.strings.append(prev_plural.decode(self._encoding))
+ return prev_source
+
+ prev_source = property(getprev_source, setprev_source)
+
+ def set_as_previous(self):
+ """Sets the current msgid as previous message. Then, the current
+ msgid could be filled with a new msgid. Note that, if a unit
+ contains a previous msgid, it also is marked as fuzzy (to keep the
+ same behavior as msgmerge).
+ """
+ if not self.target:
+ return
+ # since the context accessor might also return KDE style comments, I'm
+ # just using the libgettextpo accessor to retrive only the context
+ self.prev_context = gpo.po_message_msgctxt(self._gpo_message)
+ self.prev_source = self.source
+ self.source = ""
+ self.markfuzzy()
+
def getsource(self):
def remove_msgid_comments(text):
if not text: