diff options
Diffstat (limited to 'lib/yaml/marker.py')
-rw-r--r-- | lib/yaml/marker.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/yaml/marker.py b/lib/yaml/marker.py new file mode 100644 index 0000000..6ec12e6 --- /dev/null +++ b/lib/yaml/marker.py @@ -0,0 +1,35 @@ + +class Marker: + + def __init__(self, source, data, index, row, column): + self.source = source + self.data = data + self.index = index + self.row = row + self.column = column + + def get_snippet(self, max_length=79): + if not isinstance(self.data, basestring): + return None + head = '' + start = self.index + while start > 0 and self.data[start-1] not in '\r\n': + start -= 1 + if self.index-start > max_length/2-1: + head = ' ... ' + start += 5 + break + tail = '' + end = self.index + while end < len(self.data) and self.data[end] not in '\r\n': + end += 1 + if end-self.index > max_length/2-1: + tail = ' ... ' + end -= 5 + break + snippet = self.data[start:end] + if isinstance(snippet, unicode): + snippet = snippet.encode('utf-8') + return head + snippet + tail + '\n' \ + + ' '*(self.index-start+len(head)) + '^' + '\n' + |