20 from .tokens
import Token
34 raise NotImplementedError
37 raise NotImplementedError
40 raise NotImplementedError
57 raise NotImplementedError
72 token.type = Token.ARGUMENT
79 return statement[0].value.startswith(
'*')
83 token_type = Token.SETTING_HEADER
87 token_type = Token.VARIABLE_HEADER
91 token_type = Token.TESTCASE_HEADER
95 token_type = Token.TASK_HEADER
99 token_type = Token.KEYWORD_HEADER
103 token_type = Token.COMMENT_HEADER
109 self.
ctxctx.lex_invalid_section(self.
statementstatement)
113 token_type = Token.COMMENT
119 super().
input(statement)
120 if len(statement) == 1
and statement[0].value.lower().startswith(
'language:'):
121 lang = statement[0].value.split(
':', 1)[1].strip()
123 self.
ctxctx.add_language(lang)
125 statement[0].set_error(
126 f
"Invalid language configuration: "
127 f
"Language '{lang}' not found nor importable as a language module."
130 statement[0].type = Token.CONFIG
148 marker = statement[0].value
149 return marker
and marker[0] ==
'[' and marker[-1] ==
']'
153 token_type = Token.VARIABLE
159 if self.
ctxctx.template_set:
166 token.type = Token.ARGUMENT
172 token.type = Token.ARGUMENT
173 elif is_assign(token.value, allow_assign_mark=
True):
174 token.type = Token.ASSIGN
176 token.type = Token.KEYWORD
181 separators = (
'IN',
'IN RANGE',
'IN ENUMERATE',
'IN ZIP')
185 return statement[0].value ==
'FOR'
188 self.
statementstatement[0].type = Token.FOR
189 separator_seen =
False
190 for token
in self.
statementstatement[1:]:
192 token.type = Token.ARGUMENT
194 token.type = Token.FOR_SEPARATOR
195 separator_seen =
True
197 token.type = Token.VARIABLE
201 token_type = Token.IF
205 return statement[0].value ==
'IF' and len(statement) <= 2
209 token_type = Token.INLINE_IF
213 for token
in statement:
214 if token.value ==
'IF':
216 if not is_assign(token.value, allow_assign_mark=
True):
224 token.type = Token.ARGUMENT
225 elif token.value ==
'IF':
226 token.type = Token.INLINE_IF
229 token.type = Token.ASSIGN
233 token_type = Token.ELSE_IF
241 token_type = Token.ELSE
245 return statement[0].value ==
'ELSE'
249 token_type = Token.TRY
253 return statement[0].value ==
'TRY'
257 token_type = Token.EXCEPT
261 return statement[0].value ==
'EXCEPT'
264 self.
statementstatement[0].type = Token.EXCEPT
267 for token
in self.
statementstatement[1:]:
268 if token.value ==
'AS':
269 token.type = Token.AS
272 token.type = Token.VARIABLE
274 token.type = Token.ARGUMENT
276 if last_pattern
and last_pattern.value.startswith(
'type='):
277 last_pattern.type = Token.OPTION
281 token_type = Token.FINALLY
285 return statement[0].value ==
'FINALLY'
289 token_type = Token.WHILE
293 return statement[0].value ==
'WHILE'
296 self.
statementstatement[0].type = Token.WHILE
297 for token
in self.
statementstatement[1:]:
298 token.type = Token.ARGUMENT
299 if self.
statementstatement[-1].value.startswith(
'limit='):
300 self.
statementstatement[-1].type = Token.OPTION
304 token_type = Token.END
308 return statement[0].value ==
'END'
312 token_type = Token.RETURN_STATEMENT
316 return statement[0].value ==
'RETURN'
320 token_type = Token.CONTINUE
324 return statement[0].value ==
'CONTINUE'
328 token_type = Token.BREAK
332 return statement[0].value ==
'BREAK'
def handles(cls, statement, ctx)
def handles(cls, statement, ctx)
def handles(cls, statement, ctx)
def _lex_as_keyword_call(self)
def _lex_as_template(self)
def handles(cls, statement, ctx)
def input(self, statement)
def accepts_more(self, statement)
def handles(cls, statement, ctx)
def accepts_more(self, statement)
def input(self, statement)
def handles(cls, statement, ctx)
def normalize_whitespace(string)
def is_assign(string, identifiers='$@&', allow_assign_mark=False)