py/gadict.py
changeset 399 a6a7036f3c6f
parent 394 4d45194c71b6
child 400 aa03182d2e26
equal deleted inserted replaced
398:54ef571cf72a 399:a6a7036f3c6f
     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: