1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
import settings
import expo.models as models
import re
import os
re_include_extension = re.compile(r"^\s*\*include\s+([^\s]*).svx$", re.IGNORECASE)
re_include_no_extension = re.compile(r"^\s*\*include\s+([^\s]*)$", re.IGNORECASE)
re_begin = re.compile(r"^\s*\*begin\s+(.*?)\s*$", re.IGNORECASE)
re_end = re.compile(r"^\s*\*end\s+(.*?)\s*$", re.IGNORECASE)
def save(x): #There seems to be an intermitent problem with sqlite and Vista, this should fix it
#try:
x.save()
#except Exception: #sqlite3.OperationalError:
# print "Error"
# time.sleep(1)
# save(x)
def fileIterator(directory, filename):
survex_file = os.path.join(directory, filename + ".svx")
f = open(os.path.join(settings.SURVEX_DATA, survex_file), "rb")
char = 0
for line in f.readlines():
line = unicode(line, "latin1").decode("utf-8")
include_extension = re_include_extension.match(line)
include_no_extension = re_include_no_extension.match(line)
def a(include):
link = re.split(r"/|\\", include)
print os.path.join(directory, *link[:-1]), link[-1]
return fileIterator(os.path.join(directory, *link[:-1]), link[-1])
if include_extension:
for sf, c, l in a(include_extension.groups()[0]):
yield sf, c, l
elif include_no_extension:
for sf, c, l in a(include_no_extension.groups()[0]):
yield sf, c, l
else:
yield survex_file, char, line
char = char + len(line)
def make_model(name, parent, iter_lines, sf, c, l):
if parent:
m = models.SurvexBlock(name = name, parent = parent, begin_file = sf, begin_char = c, text = l)
else:
m = models.SurvexBlock(name = name, begin_file = sf, begin_char = c, text = l)
save(m)
for survex_file, count, line in iter_lines:
begin = re_begin.match(line.split(";")[0])
end = re_end.match(line.split(";")[0])
if begin:
make_model(begin.groups()[0], m, iter_lines, survex_file, count, line)
elif end:
m.text = m.text + line
m.end_file = survex_file
m.end_char = count
print len(m.text)
save(m)
assert (end.groups()[0]).lower() == (name).lower()
return None
else:
m.text = m.text + line
m.text = m.text + line
m.end_file = survex_file
m.end_char = count
save(m)
filename = "all"
make_model("", None, fileIterator("", filename), filename, 0, "")
|