mirror of
https://gitee.com/openharmony/third_party_pyyaml
synced 2024-11-27 12:20:38 +00:00
2c225b29fc
Could, as well as should, shall, must, may, can, might, etc. are auxiliary words. After an auxiliary word should come an infinitive verb.
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)
|
|
|