Home | Trees | Indices | Help |
|
---|
|
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # 4 # Copyright 2002-2011 Zuza Software Foundation 5 # 6 # This file is part of translate. 7 # 8 # translate is free software; you can redistribute it and/or modify 9 # it under the terms of the GNU General Public License as published by 10 # the Free Software Foundation; either version 2 of the License, or 11 # (at your option) any later version. 12 # 13 # translate is distributed in the hope that it will be useful, 14 # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 # GNU General Public License for more details. 17 # 18 # You should have received a copy of the GNU General Public License 19 # along with translate; if not, write to the Free Software 20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 22 import re 23 import urllib 24 25 from translate.storage import base 26 from translate.storage import poheader 27 from translate.storage.workflow import StateEnum as state 28 29 msgid_comment_re = re.compile("_: (.*?)\n") 30 3133 """The one definitive way to extract a msgid comment out of an unescaped 34 unicode string that might contain it. 35 36 @rtype: unicode""" 37 msgidcomment = msgid_comment_re.match(text) 38 if msgidcomment: 39 return msgidcomment.group(1) 40 return u""41 4244 """Quote the query fragment of a URL; replacing ' ' with '+'""" 45 return urllib.quote_plus(text.encode("utf-8"))46 47 51 5254 S_FUZZY_OBSOLETE = state.OBSOLETE-1 55 S_OBSOLETE = state.OBSOLETE 56 S_UNTRANSLATED = state.EMPTY 57 S_FUZZY = state.NEEDS_WORK 58 S_TRANSLATED = state.UNREVIEWED 59 60 STATE = { 61 S_FUZZY_OBSOLETE: (S_FUZZY_OBSOLETE, state.OBSOLETE), 62 S_OBSOLETE: (state.OBSOLETE, state.EMPTY), 63 S_UNTRANSLATED: (state.EMPTY, state.NEEDS_WORK), 64 S_FUZZY: (state.NEEDS_WORK, state.UNREVIEWED), 65 S_TRANSLATED: (state.UNREVIEWED, state.MAX), 66 } 67174 17569 """Adds an error message to this unit.""" 70 text = u'(pofilter) %s: %s' % (errorname, errortext) 71 # Don't add the same error twice: 72 if text not in self.getnotes(origin='translator'): 73 self.addnote(text, origin="translator")7476 """Get all error messages.""" 77 notes = self.getnotes(origin="translator").split('\n') 78 errordict = {} 79 for note in notes: 80 if '(pofilter) ' in note: 81 error = note.replace('(pofilter) ', '') 82 errorname, errortext = error.split(': ', 1) 83 errordict[errorname] = errortext 84 return errordict8587 """Marks the unit to indicate whether it needs review. Adds an optional explanation as a note.""" 88 if needsreview: 89 reviewnote = "(review)" 90 if explanation: 91 reviewnote += " " + explanation 92 self.addnote(reviewnote, origin="translator") 93 else: 94 # Strip (review) notes. 95 notestring = self.getnotes(origin="translator") 96 notes = notestring.split('\n') 97 newnotes = [] 98 for note in notes: 99 if not '(review)' in note: 100 newnotes.append(note) 101 newnotes = '\n'.join(newnotes) 102 self.removenotes() 103 self.addnote(newnotes, origin="translator")104 107 110 113 116118 return self.STATE[self.S_FUZZY_OBSOLETE][0] <= self.get_state_n() < self.STATE[self.S_OBSOLETE][1]119121 # implementation specific fuzzy detection, must not use get_state_n() 122 raise NotImplementedError()123125 if present: 126 self.set_state_n(self.STATE[self.S_FUZZY][0]) 127 else: 128 self.set_state_n(self.STATE[self.S_TRANSLATED][0])129 # set_state_n will check if target exists 130132 if self.isfuzzy(): 133 self.set_state_n(self.STATE[self.S_FUZZY_OBSOLETE][0]) 134 else: 135 self.set_state_n(self.STATE[self.S_OBSOLETE][0])136138 self.set_state_n(self.STATE[self.S_TRANSLATED][0]) 139 if not self.gettarget(): 140 self.set_state_n(self.STATE[self.S_UNTRANSLATED][0])141 144146 value = super(pounit, self).get_state_n() 147 if value <= self.S_OBSOLETE: 148 return value 149 if self.target: 150 if self.isfuzzy(): 151 return self.S_FUZZY 152 else: 153 return self.S_TRANSLATED 154 else: 155 return self.S_UNTRANSLATED156158 super(pounit, self).set_state_n(value) 159 has_target = False 160 if self.hasplural(): 161 for string in self.target.strings: 162 if string: 163 has_target = True 164 break 165 else: 166 has_target = bool(self.target) 167 if has_target: 168 isfuzzy = self.STATE[self.S_FUZZY][0] <= value < self.STATE[self.S_FUZZY][1] or \ 169 self.STATE[self.S_FUZZY_OBSOLETE][0] <= value < self.STATE[self.S_FUZZY_OBSOLETE][1] 170 self._domarkfuzzy(isfuzzy) # Implementation specific fuzzy-marking 171 else: 172 super(pounit, self).set_state_n(self.S_UNTRANSLATED) 173 self._domarkfuzzy(False)177 """Tests whether the given encoding is known in the python runtime, or returns utf-8. 178 This function is used to ensure that a valid encoding is always used.""" 179 if encoding == "CHARSET" or encoding == None: 180 return 'utf-8' 181 return encoding182 # if encoding is None: return False 183 # return True 184 # try: 185 # tuple = codecs.lookup(encoding) 186 # except LookupError: 187 # return False 188 # return True 189 190192 Name = _("Gettext PO file") # pylint: disable-msg=E0602 193 Mimetypes = ["text/x-gettext-catalog", "text/x-gettext-translation", "text/x-po", "text/x-pot"] 194 Extensions = ["po", "pot"] 195 # We don't want windows line endings on Windows: 196 _binary = True 197207199 super(pofile, self).__init__(unitclass=self.UnitClass) 200 self.units = [] 201 self.filename = '' 202 self._encoding = encodingToUse(encoding) 203 if inputfile is not None: 204 self.parse(inputfile) 205 else: 206 self.init_headers()
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Tue Apr 12 18:12:03 2011 | http://epydoc.sourceforge.net |