Browse Source

added merge flag to iterate_markers

avkonst 11 years ago
parent
commit
ef88203685
3 changed files with 28 additions and 20 deletions
  1. 8 4
      mainline/core/db/loader.py
  2. 7 16
      mainline/ext/std/code/lines.py
  3. 13 0
      mainline/ext/std/code/test.py

+ 8 - 4
mainline/core/db/loader.py

@@ -340,6 +340,7 @@ class FileData(LoadableData):
                          region_id = None, exclude_children = True, merge = False):
         self.load_markers()
         
+        # merged markers
         if merge == True:
             next_marker = None
             for marker in self.iterate_markers(filter_group, region_id, exclude_children, merge = False):
@@ -356,8 +357,11 @@ class FileData(LoadableData):
                     next_marker = Marker(marker.get_offset_begin(),
                                          marker.get_offset_end(),
                                          marker.get_type())
-
-        if region_id == None:
+            if next_marker != None:
+                yield next_marker
+        
+        # all markers per file
+        elif region_id == None:
             next_code_marker_start = 0
             for marker in self.markers:
                 if Marker.T.CODE & filter_group and next_code_marker_start < marker.get_offset_begin():
@@ -367,9 +371,9 @@ class FileData(LoadableData):
                 next_code_marker_start = marker.get_offset_end()
             if Marker.T.CODE & filter_group and next_code_marker_start < len(self.get_content()):
                 yield Marker(next_code_marker_start, len(self.get_content()), Marker.T.CODE)
-            
+
+        # markers per region
         else:
-            # per region
             region = self.get_region(region_id)
             if region != None:
                 

+ 7 - 16
mainline/ext/std/code/lines.py

@@ -79,29 +79,20 @@ class Plugin(core.api.Plugin, core.api.Child, core.api.IConfigurable):
                                       data.get_marker_types().COMMENT,
                                       'comments')
             if self.is_active_total == True:
-                self.count_in_code(data,
-                                   data.get_marker_types().NONE,
-                                   'total')
+                self.count_in_markers(data,
+                                   data.get_marker_types().ANY,
+                                   'total',
+                                   merge=True)
     
-    def count_in_code(self, data, exclude, field_name):
-        text = data.get_content(exclude=exclude)
-        for region in data.iterate_regions():
-            count = 0
-            start_pos = region.get_offset_begin()
-            for sub_id in region.iterate_subregion_ids():
-                count += len(self.pattern_line.findall(text, start_pos, data.get_region(sub_id).get_offset_begin()))
-                start_pos = data.get_region(sub_id).get_offset_end()
-            count += len(self.pattern_line.findall(text, start_pos, region.get_offset_end()))
-            region.set_data(self.get_name(), field_name, count)
-        
-    def count_in_markers(self, data, marker_type, field_name):
+    def count_in_markers(self, data, marker_type, field_name, merge=False):
         text = data.get_content()
         for region in data.iterate_regions():
             count = 0
             for marker in data.iterate_markers(
                             filter_group = marker_type,
                             region_id = region.get_id(),
-                            exclude_children = True):
+                            exclude_children = True,
+                            merge=merge):
                 count += len(self.pattern_line.findall(text, marker.get_offset_begin(), marker.get_offset_end()))
             region.set_data(self.get_name(), field_name, count)
             

+ 13 - 0
mainline/ext/std/code/test.py

@@ -52,3 +52,16 @@ class Plugin(core.api.Plugin, core.api.Child):
                          " >>>" + text[marker.get_offset_begin():marker.get_offset_end()] + "<<<")
             text_comb += text[marker.get_offset_begin():marker.get_offset_end()]
         print "LENGTH:", len(text), len(text_comb)
+
+        text_comb = ""
+        for region in data.iterate_regions():
+            logging.warn(region.get_name() + " " + str(region.get_cursor()))
+            for marker in data.iterate_markers(region_id=region.get_id(),
+                                               filter_group = data.get_marker_types().ANY,
+                                               exclude_children = True,
+                                               merge = True):
+                logging.warn("\tMarker: merged" + 
+                             " " + str(marker.get_offset_begin()) + " " + str(marker.get_offset_end()) +
+                             " >>>" + text[marker.get_offset_begin():marker.get_offset_end()] + "<<<")
+                text_comb += text[marker.get_offset_begin():marker.get_offset_end()]
+        print "LENGTH:", len(text), len(text_comb)