package YAML::Error; use strict; use warnings; use YAML::Base -base; #> __all__ = ['Mark', 'YAMLError', 'MarkedYAMLError'] #> #> class Mark(object): package YAML::Mark; use YAML::Base -base; #> def __init__(self, name, index, line, column, buffer, pointer): #> self.name = name #> self.index = index #> self.line = line #> self.column = column #> self.buffer = buffer #> self.pointer = pointer field 'name'; field 'index'; field 'line'; field 'column'; field 'buffer'; field 'pointer'; #> def get_snippet(self, indent=4, max_length=75): #> if self.buffer is None: #> return None #> head = '' #> start = self.pointer #> while start > 0 and self.buffer[start-1] not in u'\0\r\n\x85\u2028\u2029': #> start -= 1 #> if self.pointer-start > max_length/2-1: #> head = ' ... ' #> start += 5 #> break #> tail = '' #> end = self.pointer #> while end < len(self.buffer) and self.buffer[end] not in u'\0\r\n\x85\u2028\u2029': #> end += 1 #> if end-self.pointer > max_length/2-1: #> tail = ' ... ' #> end -= 5 #> break #> snippet = self.buffer[start:end].encode('utf-8') #> return ' '*indent + head + snippet + tail + '\n' \ #> + ' '*(indent+self.pointer-start+len(head)) + '^' #> #> def __str__(self): #> snippet = self.get_snippet() #> where = " in \"%s\", line %d, column %d" \ #> % (self.name, self.line+1, self.column+1) #> if snippet is not None: #> where += ":\n"+snippet #> return where package YAML::Error::Marked; use YAML::Base -base; 1; __END__ class YAMLError(Exception): pass class MarkedYAMLError(YAMLError): def __init__(self, context=None, context_mark=None, problem=None, problem_mark=None, note=None): self.context = context self.context_mark = context_mark self.problem = problem self.problem_mark = problem_mark self.note = note def __str__(self): lines = [] if self.context is not None: lines.append(self.context) if self.context_mark is not None \ and (self.problem is None or self.problem_mark is None or self.context_mark.name != self.problem_mark.name or self.context_mark.line != self.problem_mark.line or self.context_mark.column != self.problem_mark.column): lines.append(str(self.context_mark)) if self.problem is not None: lines.append(self.problem) if self.problem_mark is not None: lines.append(str(self.problem_mark)) if self.note is not None: lines.append(self.note) return '\n'.join(lines)