Ignore:
Timestamp:
02/20/06 12:41:45 (9 years ago)
Author:
xi
Message:

Cleanup error messages.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/pyyaml3000/lib/yaml/error.py

    r45 r52  
     1 
     2__all__ = ['Marker', 'YAMLError', 'MarkedYAMLError'] 
     3 
     4class Marker: 
     5 
     6    def __init__(self, name, line, column, buffer, pointer): 
     7        self.name = name 
     8        self.line = line 
     9        self.column = column 
     10        self.buffer = buffer 
     11        self.pointer = pointer 
     12 
     13    def get_snippet(self, indent=4, max_length=75): 
     14        if self.buffer is None: 
     15            return None 
     16        head = '' 
     17        start = self.pointer 
     18        while start > 0 and self.buffer[start-1] not in u'\0\r\n\x85\u2028\u2029': 
     19            start -= 1 
     20            if self.pointer-start > max_length/2-1: 
     21                head = ' ... ' 
     22                start += 5 
     23                break 
     24        tail = '' 
     25        end = self.pointer 
     26        while end < len(self.buffer) and self.buffer[end] not in u'\0\r\n\x85\u2028\u2029': 
     27            end += 1 
     28            if end-self.pointer > max_length/2-1: 
     29                tail = ' ... ' 
     30                end -= 5 
     31                break 
     32        snippet = self.buffer[start:end].encode('utf-8') 
     33        return ' '*indent + head + snippet + tail + '\n'  \ 
     34                + ' '*(indent+self.pointer-start+len(head)) + '^' 
     35 
     36    def __str__(self): 
     37        snippet = self.get_snippet() 
     38        where = "  in \"%s\", line %d, column %d"   \ 
     39                % (self.name, self.line+1, self.column+1) 
     40        if snippet is not None: 
     41            where += ":\n"+snippet 
     42        return where 
    143 
    244class YAMLError(Exception): 
    345    pass 
    446 
     47class MarkedYAMLError(YAMLError): 
     48 
     49    def __init__(self, context=None, context_marker=None, 
     50            problem=None, problem_marker=None): 
     51        self.context = context 
     52        self.context_marker = context_marker 
     53        self.problem = problem 
     54        self.problem_marker = problem_marker 
     55 
     56    def __str__(self): 
     57        lines = [] 
     58        #for (place, marker) in [(self.context, self.context_marker), 
     59        #                        (self.problem, self.problem_marker)]: 
     60        #    if place is not None: 
     61        #        lines.append(place) 
     62        #        if marker is not None: 
     63        #            lines.append(str(marker)) 
     64        if self.context is not None: 
     65            lines.append(self.context) 
     66            if self.context_marker is not None  \ 
     67                and (self.problem is None or self.problem_marker is None 
     68                        or self.context_marker.name != self.problem_marker.name 
     69                        or self.context_marker.line != self.problem_marker.line 
     70                        or self.context_marker.column != self.problem_marker.column): 
     71                lines.append(str(self.context_marker)) 
     72        if self.problem is not None: 
     73            lines.append(self.problem) 
     74            if self.problem_marker is not None: 
     75                lines.append(str(self.problem_marker)) 
     76        return '\n'.join(lines) 
     77 
     78 
     79 
Note: See TracChangeset for help on using the changeset viewer.