Commits

Gabriele Lanaro  committed e38d504

make test run

  • Participants
  • Parent commits aa9225a

Comments (0)

Files changed (1)

File pyorg/parser.py

 import re
 
 def maxhead(text):
-    """tell which is the topmost level
+    """tell which is the topmost level, if there isn't one, return None
     """
     levels = []
     for line in text.splitlines():
         match = re.match('^(\*+)\s(.*?)\s*$', line)
         if match:
             levels.append(len(match.groups()[0]))
+    
+    if levels == []:
+        return None
     return min(levels)
 
 def splitheads(text):
     with the associated text.
     """
     
+    top_level = maxhead(text)
+    if top_level is None:
+        return []
+
     indexes = [m.start() for m in 
                re.finditer('^(\*{%i})\s(.*?)\s*$'%maxhead(text), text, flags = re.MULTILINE)]
     ret = []
-    for i in range(len(indexes)-1):
+    for i in range(len(indexes)):
         start = indexes[i]
-        end = indexes[i+1]
+        end = indexes[i+1] if i+1 < len(indexes) else len(text)
         ret.append(text[start:end])
     
     return ret
             
 
+class Node(object):
+    """represent a typical headline+text in an orgnode file
+    """
+    def __init__(self, text):
+        self.text = text
+        self.headline = text.splitlines()[0]
+        self.level = maxhead(text)
+
+        nohead = '\n'.join(text.splitlines()[1:])
+        self.childs = [Node(head) for head in splitheads(nohead)]