Index: translate/storage/cpo.py
===================================================================
--- translate/storage/cpo.py (revision 7740)
+++ translate/storage/cpo.py (working copy)
@@ -134,12 +134,18 @@
gpo.po_message_msgid_plural.restype = STRING
gpo.po_message_msgstr.restype = STRING
gpo.po_message_msgstr_plural.restype = STRING
+gpo.po_message_prev_msgid.restype = STRING
+gpo.po_message_prev_msgid.restype = STRING
+gpo.po_message_prev_msgid_plural.restype = STRING
# Message (set methods)
gpo.po_message_set_comments.argtypes = [c_int, STRING]
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()
@@ -181,6 +187,72 @@
gpo.po_message_set_msgid_plural(self._gpo_message, msgid_plural)
msgid_plural = property(None, setmsgid_plural)
+ def setprev_context(self, msgid_context):
+ """Set the previous context for this message"""
+ gpo.po_message_set_prev_msgctxt(self._gpo_message, msgid_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 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:
+ self.prev_plural = str(prev_source[1])
+
+ prev_source = str(prev_source[0])
+
+ self.source = ""
+ print prev_source, type(prev_source)
+ 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 ""
+ return prev_source
+
+ prev_source = property(getprev_source, setprev_source)
+
+ def setprev_plural(self, msgid_plural):
+ """Set a given msgid_plural as a previous plural"""
+ if isinstance(msgid_plural, list):
+ msgid_plural = "".join(msgid_plural)
+ gpo.po_message_set_prev_msgid_plural(self._gpo_message, msgid_plural)
+
+ def getprev_plural(self):
+ """Get the previous plural for this message, if any"""
+ prev_plural = gpo.po_message_prev_msgid_plural(self._gpo_message)
+ if not prev_plural:
+ return ""
+ return prev_plural
+
+ prev_plural = property(getprev_plural, setprev_plural)
+
+ 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
+
+ self.markfuzzy()
+ self.prev_context = gpo.po_message_msgctxt(self._gpo_message)
+ self.prev_source = self.source
+
def getsource(self):
def remove_msgid_comments(text):
if not text: