You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
 | 
						|
__all__ = ['Mark', 'YAMLError', 'MarkedYAMLError']
 | 
						|
 | 
						|
class Mark:
 | 
						|
 | 
						|
    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
 | 
						|
 | 
						|
    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 '\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 '\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]
 | 
						|
        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
 | 
						|
 | 
						|
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)
 | 
						|
 |