summaryrefslogtreecommitdiffstats
path: root/parsers/survex.py
diff options
context:
space:
mode:
authorsubstantialnoninfringinguser <substantialnoninfringinguser@gmail.com>2009-05-13 05:14:03 +0100
committersubstantialnoninfringinguser <substantialnoninfringinguser@gmail.com>2009-05-13 05:14:03 +0100
commita33700ca1e69188873af3009c8562ac635c08226 (patch)
tree6df40615cebdcd18d330c023c141e23fa64b4461 /parsers/survex.py
parent302f4a1a0f9ced0d8e81c5462f7feff65c5b349b (diff)
downloadtroggle-a33700ca1e69188873af3009c8562ac635c08226.tar.gz
troggle-a33700ca1e69188873af3009c8562ac635c08226.tar.bz2
troggle-a33700ca1e69188873af3009c8562ac635c08226.zip
[svn] we can parse one 2004 logbook in here. corrections made to folk.csv
Copied from http://cucc@cucc.survex.com/svn/trunk/expoweb/troggle/, rev. 8036 by julian @ 10/26/2008 11:27 PM
Diffstat (limited to 'parsers/survex.py')
-rw-r--r--parsers/survex.py137
1 files changed, 69 insertions, 68 deletions
diff --git a/parsers/survex.py b/parsers/survex.py
index f6d11e4..99044cb 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -1,68 +1,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 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")
- 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
- 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, "")
+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, "")