Mercurial > repos > shellac > sam_consensus_v3
comparison env/lib/python3.9/site-packages/ruamel/yaml/tokens.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4f3585e2f14b |
---|---|
1 # # header | |
2 # coding: utf-8 | |
3 | |
4 from __future__ import unicode_literals | |
5 | |
6 if False: # MYPY | |
7 from typing import Text, Any, Dict, Optional, List # NOQA | |
8 from .error import StreamMark # NOQA | |
9 | |
10 SHOWLINES = True | |
11 | |
12 | |
13 class Token(object): | |
14 __slots__ = 'start_mark', 'end_mark', '_comment' | |
15 | |
16 def __init__(self, start_mark, end_mark): | |
17 # type: (StreamMark, StreamMark) -> None | |
18 self.start_mark = start_mark | |
19 self.end_mark = end_mark | |
20 | |
21 def __repr__(self): | |
22 # type: () -> Any | |
23 # attributes = [key for key in self.__slots__ if not key.endswith('_mark') and | |
24 # hasattr('self', key)] | |
25 attributes = [key for key in self.__slots__ if not key.endswith('_mark')] | |
26 attributes.sort() | |
27 arguments = ', '.join(['%s=%r' % (key, getattr(self, key)) for key in attributes]) | |
28 if SHOWLINES: | |
29 try: | |
30 arguments += ', line: ' + str(self.start_mark.line) | |
31 except: # NOQA | |
32 pass | |
33 try: | |
34 arguments += ', comment: ' + str(self._comment) | |
35 except: # NOQA | |
36 pass | |
37 return '{}({})'.format(self.__class__.__name__, arguments) | |
38 | |
39 def add_post_comment(self, comment): | |
40 # type: (Any) -> None | |
41 if not hasattr(self, '_comment'): | |
42 self._comment = [None, None] | |
43 self._comment[0] = comment | |
44 | |
45 def add_pre_comments(self, comments): | |
46 # type: (Any) -> None | |
47 if not hasattr(self, '_comment'): | |
48 self._comment = [None, None] | |
49 assert self._comment[1] is None | |
50 self._comment[1] = comments | |
51 | |
52 def get_comment(self): | |
53 # type: () -> Any | |
54 return getattr(self, '_comment', None) | |
55 | |
56 @property | |
57 def comment(self): | |
58 # type: () -> Any | |
59 return getattr(self, '_comment', None) | |
60 | |
61 def move_comment(self, target, empty=False): | |
62 # type: (Any, bool) -> Any | |
63 """move a comment from this token to target (normally next token) | |
64 used to combine e.g. comments before a BlockEntryToken to the | |
65 ScalarToken that follows it | |
66 empty is a special for empty values -> comment after key | |
67 """ | |
68 c = self.comment | |
69 if c is None: | |
70 return | |
71 # don't push beyond last element | |
72 if isinstance(target, (StreamEndToken, DocumentStartToken)): | |
73 return | |
74 delattr(self, '_comment') | |
75 tc = target.comment | |
76 if not tc: # target comment, just insert | |
77 # special for empty value in key: value issue 25 | |
78 if empty: | |
79 c = [c[0], c[1], None, None, c[0]] | |
80 target._comment = c | |
81 # nprint('mco2:', self, target, target.comment, empty) | |
82 return self | |
83 if c[0] and tc[0] or c[1] and tc[1]: | |
84 raise NotImplementedError('overlap in comment %r %r' % (c, tc)) | |
85 if c[0]: | |
86 tc[0] = c[0] | |
87 if c[1]: | |
88 tc[1] = c[1] | |
89 return self | |
90 | |
91 def split_comment(self): | |
92 # type: () -> Any | |
93 """ split the post part of a comment, and return it | |
94 as comment to be added. Delete second part if [None, None] | |
95 abc: # this goes to sequence | |
96 # this goes to first element | |
97 - first element | |
98 """ | |
99 comment = self.comment | |
100 if comment is None or comment[0] is None: | |
101 return None # nothing to do | |
102 ret_val = [comment[0], None] | |
103 if comment[1] is None: | |
104 delattr(self, '_comment') | |
105 return ret_val | |
106 | |
107 | |
108 # class BOMToken(Token): | |
109 # id = '<byte order mark>' | |
110 | |
111 | |
112 class DirectiveToken(Token): | |
113 __slots__ = 'name', 'value' | |
114 id = '<directive>' | |
115 | |
116 def __init__(self, name, value, start_mark, end_mark): | |
117 # type: (Any, Any, Any, Any) -> None | |
118 Token.__init__(self, start_mark, end_mark) | |
119 self.name = name | |
120 self.value = value | |
121 | |
122 | |
123 class DocumentStartToken(Token): | |
124 __slots__ = () | |
125 id = '<document start>' | |
126 | |
127 | |
128 class DocumentEndToken(Token): | |
129 __slots__ = () | |
130 id = '<document end>' | |
131 | |
132 | |
133 class StreamStartToken(Token): | |
134 __slots__ = ('encoding',) | |
135 id = '<stream start>' | |
136 | |
137 def __init__(self, start_mark=None, end_mark=None, encoding=None): | |
138 # type: (Any, Any, Any) -> None | |
139 Token.__init__(self, start_mark, end_mark) | |
140 self.encoding = encoding | |
141 | |
142 | |
143 class StreamEndToken(Token): | |
144 __slots__ = () | |
145 id = '<stream end>' | |
146 | |
147 | |
148 class BlockSequenceStartToken(Token): | |
149 __slots__ = () | |
150 id = '<block sequence start>' | |
151 | |
152 | |
153 class BlockMappingStartToken(Token): | |
154 __slots__ = () | |
155 id = '<block mapping start>' | |
156 | |
157 | |
158 class BlockEndToken(Token): | |
159 __slots__ = () | |
160 id = '<block end>' | |
161 | |
162 | |
163 class FlowSequenceStartToken(Token): | |
164 __slots__ = () | |
165 id = '[' | |
166 | |
167 | |
168 class FlowMappingStartToken(Token): | |
169 __slots__ = () | |
170 id = '{' | |
171 | |
172 | |
173 class FlowSequenceEndToken(Token): | |
174 __slots__ = () | |
175 id = ']' | |
176 | |
177 | |
178 class FlowMappingEndToken(Token): | |
179 __slots__ = () | |
180 id = '}' | |
181 | |
182 | |
183 class KeyToken(Token): | |
184 __slots__ = () | |
185 id = '?' | |
186 | |
187 # def x__repr__(self): | |
188 # return 'KeyToken({})'.format( | |
189 # self.start_mark.buffer[self.start_mark.index:].split(None, 1)[0]) | |
190 | |
191 | |
192 class ValueToken(Token): | |
193 __slots__ = () | |
194 id = ':' | |
195 | |
196 | |
197 class BlockEntryToken(Token): | |
198 __slots__ = () | |
199 id = '-' | |
200 | |
201 | |
202 class FlowEntryToken(Token): | |
203 __slots__ = () | |
204 id = ',' | |
205 | |
206 | |
207 class AliasToken(Token): | |
208 __slots__ = ('value',) | |
209 id = '<alias>' | |
210 | |
211 def __init__(self, value, start_mark, end_mark): | |
212 # type: (Any, Any, Any) -> None | |
213 Token.__init__(self, start_mark, end_mark) | |
214 self.value = value | |
215 | |
216 | |
217 class AnchorToken(Token): | |
218 __slots__ = ('value',) | |
219 id = '<anchor>' | |
220 | |
221 def __init__(self, value, start_mark, end_mark): | |
222 # type: (Any, Any, Any) -> None | |
223 Token.__init__(self, start_mark, end_mark) | |
224 self.value = value | |
225 | |
226 | |
227 class TagToken(Token): | |
228 __slots__ = ('value',) | |
229 id = '<tag>' | |
230 | |
231 def __init__(self, value, start_mark, end_mark): | |
232 # type: (Any, Any, Any) -> None | |
233 Token.__init__(self, start_mark, end_mark) | |
234 self.value = value | |
235 | |
236 | |
237 class ScalarToken(Token): | |
238 __slots__ = 'value', 'plain', 'style' | |
239 id = '<scalar>' | |
240 | |
241 def __init__(self, value, plain, start_mark, end_mark, style=None): | |
242 # type: (Any, Any, Any, Any, Any) -> None | |
243 Token.__init__(self, start_mark, end_mark) | |
244 self.value = value | |
245 self.plain = plain | |
246 self.style = style | |
247 | |
248 | |
249 class CommentToken(Token): | |
250 __slots__ = 'value', 'pre_done' | |
251 id = '<comment>' | |
252 | |
253 def __init__(self, value, start_mark, end_mark): | |
254 # type: (Any, Any, Any) -> None | |
255 Token.__init__(self, start_mark, end_mark) | |
256 self.value = value | |
257 | |
258 def reset(self): | |
259 # type: () -> None | |
260 if hasattr(self, 'pre_done'): | |
261 delattr(self, 'pre_done') | |
262 | |
263 def __repr__(self): | |
264 # type: () -> Any | |
265 v = '{!r}'.format(self.value) | |
266 if SHOWLINES: | |
267 try: | |
268 v += ', line: ' + str(self.start_mark.line) | |
269 v += ', col: ' + str(self.start_mark.column) | |
270 except: # NOQA | |
271 pass | |
272 return 'CommentToken({})'.format(v) | |
273 | |
274 def __eq__(self, other): | |
275 # type: (Any) -> bool | |
276 if self.start_mark != other.start_mark: | |
277 return False | |
278 if self.end_mark != other.end_mark: | |
279 return False | |
280 if self.value != other.value: | |
281 return False | |
282 return True | |
283 | |
284 def __ne__(self, other): | |
285 # type: (Any) -> bool | |
286 return not self.__eq__(other) |