author | Tero Marttila <terom@fixme.fi> |
Sun, 08 Feb 2009 03:08:25 +0200 | |
changeset 44 | d09cc8b3709c |
parent 21 | b05979822dee |
permissions | -rw-r--r-- |
16
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
""" |
4a40718c7b4b
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. |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 |
""" |
4a40718c7b4b
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 |
|
17
b538e1f7011c
add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
8 |
class TreeParseError (Exception) : |
b538e1f7011c
add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
9 |
""" |
b538e1f7011c
add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
10 |
Error parsing a tree file |
b538e1f7011c
add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
11 |
""" |
b538e1f7011c
add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
12 |
|
b538e1f7011c
add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
13 |
pass |
b538e1f7011c
add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
14 |
|
21
b05979822dee
some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
15 |
def _read_lines (path, stop_tokens, charset) : |
16
4a40718c7b4b
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 |
""" |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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. |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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. |
4a40718c7b4b
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 |
""" |
4a40718c7b4b
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 |
|
4a40718c7b4b
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')) : |
21
b05979822dee
some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
26 |
# decode to unicode |
b05979822dee
some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
27 |
line = line.decode(charset) |
b05979822dee
some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
28 |
|
16
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 : |
4a40718c7b4b
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 |
4a40718c7b4b
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' |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 == ' ' : |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 : |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 : |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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() |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 : |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
21
b05979822dee
some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
58 |
def parse (path, stop_tokens='', charset='utf8') : |
16
4a40718c7b4b
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 |
""" |
4a40718c7b4b
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. |
4a40718c7b4b
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 |
""" |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 = [] |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
21
b05979822dee
some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
73 |
for line_number, indent, line in _read_lines(path, stop_tokens, charset) : |
16
4a40718c7b4b
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 |
4a40718c7b4b
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, []) |
4a40718c7b4b
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 |
|
4a40718c7b4b
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? |
4a40718c7b4b
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 : |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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)) |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 : |
4a40718c7b4b
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 |
4a40718c7b4b
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] |
4a40718c7b4b
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 |
|
4a40718c7b4b
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? |
4a40718c7b4b
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 : |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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)) |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 : |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 : |
4a40718c7b4b
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 : |
4a40718c7b4b
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 |
4a40718c7b4b
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) |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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] |
4a40718c7b4b
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 |
|
4a40718c7b4b
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? |
4a40718c7b4b
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 : |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 : |
17
b538e1f7011c
add some better error checking to the page_tree stuff
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
122 |
raise TreeParseError("Bad unindent on %s:%d, %d < %d" % (path, line_number, stack_indent, indent)) |
16
4a40718c7b4b
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 |
|
4a40718c7b4b
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? |
4a40718c7b4b
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 : |
4a40718c7b4b
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) |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |
|
4a40718c7b4b
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 |
4a40718c7b4b
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 |
4a40718c7b4b
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 |