Aluode/PerceptionLabPortable
0
1 2__all__ = ['Mark', 'YAMLError', 'MarkedYAMLError']3 4class Mark:5 6 def __init__(self, name, index, line, column, buffer, pointer):7 self.name = name8 self.index = index9 self.line = line10 self.column = column11 self.buffer = buffer12 self.pointer = pointer13 14 def get_snippet(self, indent=4, max_length=75):15 if self.buffer is None:16 return None17 head = ''18 start = self.pointer19 while start > 0 and self.buffer[start-1] not in '\0\r\n\x85\u2028\u2029':20 start -= 121 if self.pointer-start > max_length/2-1:22 head = ' ... '23 start += 524 break25 tail = ''26 end = self.pointer27 while end < len(self.buffer) and self.buffer[end] not in '\0\r\n\x85\u2028\u2029':28 end += 129 if end-self.pointer > max_length/2-1:30 tail = ' ... '31 end -= 532 break33 snippet = self.buffer[start:end]34 return ' '*indent + head + snippet + tail + '\n' \35 + ' '*(indent+self.pointer-start+len(head)) + '^'36 37 def __str__(self):38 snippet = self.get_snippet()39 where = " in \"%s\", line %d, column %d" \40 % (self.name, self.line+1, self.column+1)41 if snippet is not None:42 where += ":\n"+snippet43 return where44 45class YAMLError(Exception):46 pass47 48class MarkedYAMLError(YAMLError):49 50 def __init__(self, context=None, context_mark=None,51 problem=None, problem_mark=None, note=None):52 self.context = context53 self.context_mark = context_mark54 self.problem = problem55 self.problem_mark = problem_mark56 self.note = note57 58 def __str__(self):59 lines = []60 if self.context is not None:61 lines.append(self.context)62 if self.context_mark is not None \63 and (self.problem is None or self.problem_mark is None64 or self.context_mark.name != self.problem_mark.name65 or self.context_mark.line != self.problem_mark.line66 or self.context_mark.column != self.problem_mark.column):67 lines.append(str(self.context_mark))68 if self.problem is not None:69 lines.append(self.problem)70 if self.problem_mark is not None:71 lines.append(str(self.problem_mark))72 if self.note is not None:73 lines.append(self.note)74 return '\n'.join(lines)75 76 