1 2def _src_to_xml(text): 3 return text.replace("&", "&").replace("<", "<").replace(">", ">") 4 5def decodes(text): 6 if not text: return text 7 try: 8 return text.decode("utf-8") 9 except: 10 try: 11 return text.decode("latin-1") 12 except: 13 return str(text) 14 15class TextFile: 16 def __init__(self, filename = None): 17 self.filename = filename 18 self.src_text = None 19 self.xml_text = None 20 def parse(self, filename = None): 21 if filename is not None: 22 self.filename = filename 23 if self.filename is None: 24 return False 25 try: 26 fd = open(self.filename, "rb") 27 self.src_text = decodes(fd.read()) 28 fd.close() 29 return True 30 except IOError as e: 31 pass 32 return False 33 def assert_src_text(self): 34 if self.src_text: return True 35 return self.parse() 36 def assert_xml_text(self): 37 if self.xml_text: return True 38 if not self.assert_src_text(): return False 39 self.xml_text = _src_to_xml(self.src_text) 40 def get_src_text(self): 41 self.assert_src_text() 42 return self.src_text 43 def get_xml_text(self): 44 self.assert_xml_text() 45 return self.xml_text 46 def get_filename(self): 47 return self.filename 48 def line_xml_text(self, offset): 49 self._line(self.xml_text, offset) 50 def line_src_text(self, offset): 51 self._line(self.src_text, offset) 52 def _line(self, text, offset): 53 line = 1 54 for x in xrange(0,offset): 55 if x == "\n": 56 line += 1 57 return line 58 59 60