equal
deleted
inserted
replaced
1 |
1 |
2 import regex |
2 import regex |
3 |
3 |
4 |
4 |
5 class ParseException(Exception): |
5 class ParseException(BaseException): |
6 |
6 |
7 def __init__(self, msg): |
7 def __init__(self, msg, lineno = None, line = None): |
8 self.msg = msg |
8 self.msg = msg |
|
9 self.lineno = lineno |
|
10 self.line = line |
9 |
11 |
10 def __repr__(self): |
12 def __repr__(self): |
11 return self.msg |
13 if self.lineno is None: |
|
14 return self.msg |
|
15 elif self.line is None: |
|
16 return ":{:d}:{:s}".format(self.lineno, self.msg) |
|
17 else: |
|
18 return ":{:d}: {:s}\nLINE: {:s}".format(self.lineno, self.msg, self.line) |
12 |
19 |
13 |
20 |
14 class Parser: |
21 class Parser: |
15 |
22 |
16 SEPARATOR_RE = regex.compile(r"^__$") |
23 SEPARATOR_RE = regex.compile(r"^__$") |
40 self.parse_prelude() |
47 self.parse_prelude() |
41 while not self.eof: |
48 while not self.eof: |
42 self.parse_article() |
49 self.parse_article() |
43 except ParseException as ex: |
50 except ParseException as ex: |
44 if self.TRAILING_SPACES_RE.match(self.line): |
51 if self.TRAILING_SPACES_RE.match(self.line): |
45 fout.write("{:s}:{:d}: {:s}".format(fgadict, self.lineno, "Traling spaces detected...\n")) |
52 raise ParseException("Traling spaces detected...\n", self.lineno, self.line) from ex |
46 fout.write("{:s}:{:d}: {:s}\nLINE: {:s}\n".format(fgadict, self.lineno, str(ex), self.line)) |
53 raise ParseException(ex.msg, self.lineno, self.line) from ex |
47 raise Exception(ex) |
|
48 return self.dom |
54 return self.dom |
49 |
55 |
50 def parse_prelude(self): |
56 def parse_prelude(self): |
51 """Read dictionary prelude until first "__" delimiter.""" |
57 """Read dictionary prelude until first "__" delimiter.""" |
52 while True: |
58 while True: |