Changeset 55

Show
Ignore:
Timestamp:
Sat Jul 2 05:46:16 2005
Author:
fredrikc
Message:

Added a index position tree to make document segment lookup efficient.

Files:

Legend:

Unmodified
Added
Removed
Modified
  • trunk/transolution/xliffeditor/gtk_documenteditor.py

    r2 r55  
    70 70                 self.apply_tag_by_name(tag,iter(o.start),iter_start)  
    71 71  
    72           # set insertion point to selected seg  
    73           self.setInsertionPoint(selected_seg.start)  
      72 ##        # set insertion point to selected seg  
      73 ##        self.setInsertionPoint(selected_seg.start)  
    74 74          
    75 75         self.thaw_notify()  
    76 76  
    77 77  
    78           self.setInsertionPoint(selected_seg.start)  
      78         self.setInsertionPoint(doc.tree.getBounds(selected_seg)[0])  
    78 78  
    79 79         self.interactive = org # restore orginal interactive state  
     
    179 179         buf.remove_tag_by_name('bg_selected',start_iter,end_iter)  
    180 180  
    181           iter_start,iter_end = iter(seg.start),iter(seg.end)  
      181         # get the text span of segment  
      182         s,e = self.buf.model.getTextSpanOfSeg(seg)  
      183         iter_start,iter_end = iter(s),iter(e)  
      184          
    182 185         buf.move_mark(start_mark,iter_start)  
    183 186         buf.move_mark(end_mark,iter_end)  
  • trunk/transolution/xliffeditor/gtk_documentviewpanel.py

    r51 r55  
    311 311             self.open_seg.tu.closeForEdit(commit,approve,state=state,common_state=common_state)  
    312 312             # Update doc ui to jump to end of closed segment  
    313               self.document_control.get_buffer().setInsertionPoint(self.open_seg.end)  
      313             self.document_control.get_buffer().setInsertionPoint(self.doc_model.getTextSpanOfSeg(self.open_seg)[1])  
    313 313             self.document_control.showInsertPoint()  
    314 314  
     
    484 484             self.openTransUnit(seg)  
    485 485             # Update doc ui to show open segment  
    486               self.document_control.get_buffer().setInsertionPoint(seg.start)  
      486             start,end = self.doc_model.getTextSpanOfSeg(seg)  
      487             self.document_control.get_buffer().setInsertionPoint(start)  
    487 488             self.document_control.showInsertPoint()  
    488 489  
     
    661 662             self.openTransUnit(f.seg)  
    662 663         # update document widget to show open segment  
    663           self.document_control.get_buffer().setInsertionPoint(f.seg.start)  
      664         start,end = self.doc_model.getTextSpanOfSeg(f.seg)  
      665         self.document_control.get_buffer().setInsertionPoint(start)  
    664 666         # update TU status info in document view window  
    665 667         self.document_control.xnotify(f.seg)  
  • trunk/transolution/xliffeditor/document/document.py

    r54 r55  
    3 3 from transolution.xliffeditor.general import Notifier,Observer,EditorException  
    4 4 from segments import External,TuSegment,FileInfo,TuInfo  
    5   from bisect import bisect  
      5 from tree import IndexTree  
    5 5  
    6 6 class DocumentIndexException(EditorException):pass  
     
    23 23         Observer.__init__(self)  
    24 24         self.segs = []  
    25           self.segment_end_positions = [] # holds all segments end positions so we can use  
    26                                           # bisect module to lookup the segment at pos efficiently.  
    27 25         self.documentFormatter = None  
      26         self.tree = IndexTree()  
      27         self.getTextSpanOfSeg = self.tree.getBounds  
      28         self._initTree = True  
      29          
      30     def initTree(self):  
      31         'initialize the lookup tree upon first use'  
      32         for seg in self.segs:  
      33             seg.format()  
      34         # Build the lookup tree  
      35         self.tree.buildTree(self.segs)  
      36         self._initTree = False  
    28 37  
    29 38     def setFormatter(self,documentFormatter):  
     
    58 67         #seg.setParent(self)  
    59 68  
    60        
    61 69     def getSegByTextIndex(self,ti):  
    62   ##        for seg in self.segs:  
    63   ##            if seg.end > ti:  
    64   ##                return seg,seg.start,seg.end  
    65           # bisect used for speed  
    66           seg = self.segs[bisect(self.segment_end_positions, ti)]  
    67           return seg,seg.start,seg.end  
      70         if self._initTree:  
      71             self.initTree()  
      72         seg = self.tree.lookup(ti).seg  
      73         start,end = self.getTextSpanOfSeg(seg)  
      74         return seg,start,end  
    68 75  
    69 76     def getSegUIUpdates(self):  
    70 77         'get a list of SegUIUpdate with the text span to update and text to update'  
    71           end = 0  
    72           segpos = []  
      78         if self._initTree:  
      79             self.initTree()  
      80         getTextSpanOfSeg = self.getTextSpanOfSeg  
    73 81         for i,seg in enumerate(self.segs):  
    74               formatted = seg.format()  
    75               start = end  
    76               end += len(seg)  
      82             seg.format()  
    77 83             if seg.dirty:  
    78 84                 seg.dirty = False  
    79                   yield SegUIUpdate(seg.styledtext,start,start+seg.oldlen,  
      85                 start,end = getTextSpanOfSeg(seg)  
      86                 yield SegUIUpdate(seg.styledtext,start,end,  
    80 87                                   bg_color=seg.bg_color,  
    81 88                                   segindex=i)  
    82               seg.setRange(start,end)  
    83               segpos.append(end)  
    84           self.segment_end_positions = segpos  
    85            
      89                 self.tree.updateSeg(seg)  
      90  
      91  
    86 92     def xupdate(self,seg=None):  
    87 93         'observer interface'  
     
    165 171  
    166 172     def parseXliff(self,xliff=None,use_skeleton=True):  
      173         self._initTree = True  
    167 174         self.has_skeleton = False  
    168 175  
     
    186 193  
    187 194  
      195  
    188 196         print "Xliff Done"  
  • trunk/transolution/xliffeditor/document/segments.py

    r2 r55  
    11 11         self._node = node  
    12 12         self.dirty = True # flag that tells that ui needs to update  
    13           self.start,self.end,self.oldlen = 0,0,0  
      13         self.oldlen = 0  
    13 13         self.styledtext = None  
    14           self.data = None  
      14         self.data = ''  
    14 14         self.bg_color = None  
    15 15  
    16       def setRange(self,start,end):  
    17           self.start,self.end, self.oldlen = start,end,end-start  
    18 16          
    19 17     def getNode(self):  
     
    24 22  
    25 23     def format(self,node=None):  
      24         self.oldlen = len(self.data)  
    26 25         if not self.dirty: return  
    27 26         self.__class__.formatter.format(self)