Changeset 54

Show
Ignore:
Timestamp:
Thu Jun 30 12:12:14 2005
Author:
fredrikc
Message:

Now uses bisect module to get the segment at character pos to make lookup faster.

Files:

Legend:

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

    r53 r54  
    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 6  
    6 7 class DocumentIndexException(EditorException):pass  
     
    22 23         Observer.__init__(self)  
    23 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.  
    24 27         self.documentFormatter = None  
    25 28  
     
    57 60      
    58 61     def getSegByTextIndex(self,ti):  
    59           # TODO: do this in a better way that's not as slow.  
    60           for seg in self.segs:  
    61               if seg.end > ti:  
    62                   return seg,seg.start,seg.end  
      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)]  
    63 67         return seg,seg.start,seg.end  
    64          
      68  
    64 68     def getSegUIUpdates(self):  
    65 69         'get a list of SegUIUpdate with the text span to update and text to update'  
    66 70         end = 0  
      71         segpos = []  
    67 72         for i,seg in enumerate(self.segs):  
    68 73             formatted = seg.format()  
     
    76 81                                   segindex=i)  
    77 82             seg.setRange(start,end)  
    78    
      83             segpos.append(end)  
      84         self.segment_end_positions = segpos  
      85          
    79 86     def xupdate(self,seg=None):  
    80 87         'observer interface'