OSDN Git Service

add HTMLTree.next_tag() and prev_tag()
authorHiromichi MATSUSHIMA <hirom@office-sv.osdn.jp>
Thu, 28 Jul 2011 11:55:00 +0000 (20:55 +0900)
committerHiromichi MATSUSHIMA <hirom@office-sv.osdn.jp>
Thu, 28 Jul 2011 11:55:00 +0000 (20:55 +0900)
htmltree.py

index fea5a7b..d29a066 100644 (file)
@@ -181,6 +181,24 @@ class HTMLElement(list):
         """returns tag's previous element."""
         return self._prev_elem
 
+    def next_tag(self):
+        """returns tag's next tag."""
+        next = self.next()
+        while(next != None):
+            if next.is_tag():
+                break
+            next = next.next()
+        return next
+
+    def prev_tag(self):
+        """returns tag's previous tag."""
+        prev = self.prev()
+        while(prev != None):
+            if prev.is_tag():
+                break
+            prev = prev.prev()
+        return prev
+
     # basic query functions
     def get_elements_by_name(self, name):
         buf = []
@@ -395,11 +413,11 @@ class HTMLTree(HTMLParser.HTMLParser):
         l = len(elem)
         if l > 1:
             elem[0]._next_elem = elem[1]
-        for i in range(1, l-1):
-            elem[i]._prev_elem = elem[i-1]
-            elem[i]._next_elem = elem[i+1]
-        if l > 1:
-            elem[l-1]._prev_elem = elem[l-2]
+            elem[-1]._prev_elem = elem[-2]
+        if l > 2:
+            for i in range(1, l-1): # 1 to l-2
+                elem[i]._prev_elem = elem[i-1]
+                elem[i]._next_elem = elem[i+1]
 
         for sub_elem in elem:
             self._r_finalize(sub_elem)