chiark / gitweb /
add generate() interface to TagsSearch, only implemented lsearch for now
authorRoss Younger <ross@impropriety.org.uk>
Thu, 28 Feb 2013 20:56:31 +0000 (09:56 +1300)
committerRoss Younger <ross@impropriety.org.uk>
Thu, 28 Feb 2013 20:56:43 +0000 (09:56 +1300)
TagsSearch.py

index b36d1ea..150c3a9 100644 (file)
@@ -37,6 +37,12 @@ class AbstractTagsSearcher:
       NOTE: Only returns the first match it finds.
       '''
       raise 'Abstract interface!'
+   def generate(self, tag):
+      '''
+      Tag search generator, i.e. returns an iterator that contains all
+      possible completions. Not quite the same as find().
+      '''
+      raise 'Abstract interface!'
 
 class LinearTagsSearcher(AbstractTagsSearcher):
    ''' Crungey old lsearch. '''
@@ -48,6 +54,13 @@ class LinearTagsSearcher(AbstractTagsSearcher):
             return CTag(line).to_response()
       return None
 
+   def generate(self,tag):
+      f = open(self.tagsfile, 'r')
+      needle = tag # Different from find() !
+      for line in f:
+         if line.startswith(needle):
+            yield CTag(line)
+
 class BinaryTagsSearcher(AbstractTagsSearcher):
    ''' bsearch is faster, particularly on large files '''
    def find(self,needle):
@@ -91,4 +104,6 @@ class BinaryTagsSearcher(AbstractTagsSearcher):
 class TagsSearcherFactory:
    def get(self, tagsfile):
       return BinaryTagsSearcher(tagsfile)
+   def get_generator(self,tagsfile):
+      return LinearTagsSearcher(tagsfile)