lib/tree_parse.py
author Tero Marttila <terom@fixme.fi>
Sun, 08 Feb 2009 02:55:53 +0200
branchsites
changeset 184 a3d9aa76790d
parent 163 5cefbd93926a
permissions -rw-r--r--
implement channel_view count, the query stuff, css, layout all need some cleanup :(
158
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
"""
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
    Parsing trees of node stored using a python-like syntax.
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
    A file consists of a number of lines, and each line consists of indenting whitespace and data. Each line has a parent
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
"""
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
159
8bcbbc465b5f add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents: 158
diff changeset
     8
class TreeParseError (Exception) :
8bcbbc465b5f add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents: 158
diff changeset
     9
    """
8bcbbc465b5f add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents: 158
diff changeset
    10
        Error parsing a tree file
8bcbbc465b5f add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents: 158
diff changeset
    11
    """
8bcbbc465b5f add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents: 158
diff changeset
    12
8bcbbc465b5f add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents: 158
diff changeset
    13
    pass
8bcbbc465b5f add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents: 158
diff changeset
    14
163
5cefbd93926a some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents: 159
diff changeset
    15
def _read_lines (path, stop_tokens, charset) :
158
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    """
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        Reads lines from the given path, ignoring empty lines, and yielding (line_number, indent, line) tuples, where 
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
        line_number is the line number, indent counts the amount of leading whitespace, and line is the actual line
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        data with whitespace stripped.
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
        Stop tokens is a list of chars to stop counting indentation on - if such a line begins with such a char, its
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
        indentation is taken as zero.
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    """
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    for line_number, line in enumerate(open(path, 'rb')) :
163
5cefbd93926a some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents: 159
diff changeset
    26
        # decode to unicode
5cefbd93926a some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents: 159
diff changeset
    27
        line = line.decode(charset)
5cefbd93926a some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents: 159
diff changeset
    28
158
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        indent = 0
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        # count indent
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
        for char in line :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
            # tabs break things
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
            assert char != '\t'
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
            
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
            # increment up to first non-space char
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
            if char == ' ' :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
                indent += 1
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
            
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
            elif char in stop_tokens :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
                # consider line as not having any indentation at all
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
                indent = 0
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
                break
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
            else :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
                break
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
        
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        # strip whitespace
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        line = line.strip()
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
        # ignore empty lines
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        if not line :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
            continue
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
        # yield
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        yield line_number + 1, indent, line
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
163
5cefbd93926a some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents: 159
diff changeset
    58
def parse (path, stop_tokens='', charset='utf8') :
158
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    """
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        Reads and parses the file at the given path, returning a list of (line_number, line, children) tuples.
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    """
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
    # stack of (indent, PageInfo) items
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
    stack = []
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    # the root item
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
    root = None
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    # the previous item processed, None for first one
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
    prev = None
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    # read lines
163
5cefbd93926a some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents: 159
diff changeset
    73
    for line_number, indent, line in _read_lines(path, stop_tokens, charset) :
158
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
        # create item
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
        item = (line_number, line, [])
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
        # are we the first item?
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
        if not prev :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
            # root node does not have a parent
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
            parent = None
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
            
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
            # set root
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
            root = item
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
            # initialize stack
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
            stack.append((0, root))
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
            
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
        else :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
            # peek stack
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
            stack_indent, stack_parent = stack[-1]
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
            # new indent level?
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
            if indent > stack_indent :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
                # set parent to previous item, and push new indent level + parent to stack
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
                parent = prev
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
                # push new indent level + its parent
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
                stack.append((indent, parent))
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
            # same indent level as previous
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
            elif indent == stack_indent :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
                # parent is the one of the current stack level, stack doesn't change
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
                parent = stack_parent
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
            
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
            # unravel stack
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
            elif indent < stack_indent :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
                while True :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
                    # remove current stack level
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
                    stack.pop(-1)
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
                    # peek next level
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
                    stack_indent, stack_parent = stack[-1]
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
                    
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
                    # found the level to return to?
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
                    if stack_indent == indent :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
                        # restore prev
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
                        parent = stack_parent
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
                        break
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
                    elif stack_indent < indent :
159
8bcbbc465b5f add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents: 158
diff changeset
   122
                        raise TreeParseError("Bad unindent on %s:%d, %d < %d" % (path, line_number, stack_indent, indent))
158
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
        
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
        # add to parent?
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
        if parent :
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
            parent[2].append(item)
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
        # update prev
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
        prev = item
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
    
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
    # return the root
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
    return root
0aad1e154ced better error handling of import errors in CGI, and split PageTree out from page.py into page_tree.py and tree_parse.py
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133