MCPcopy Create free account
hub / github.com/pyload/pyload / subparse

Method subparse

module/lib/jinja2/parser.py:844–890  ·  view source on GitHub ↗
(self, end_tokens=None)

Source from the content-addressed store, hash-verified

842 return node
843
844 def subparse(self, end_tokens=None):
845 body = []
846 data_buffer = []
847 add_data = data_buffer.append
848
849 if end_tokens is not None:
850 self._end_token_stack.append(end_tokens)
851
852 def flush_data():
853 if data_buffer:
854 lineno = data_buffer[0].lineno
855 body.append(nodes.Output(data_buffer[:], lineno=lineno))
856 del data_buffer[:]
857
858 try:
859 while self.stream:
860 token = self.stream.current
861 if token.type == 'data':
862 if token.value:
863 add_data(nodes.TemplateData(token.value,
864 lineno=token.lineno))
865 next(self.stream)
866 elif token.type == 'variable_begin':
867 next(self.stream)
868 add_data(self.parse_tuple(with_condexpr=True))
869 self.stream.expect('variable_end')
870 elif token.type == 'block_begin':
871 flush_data()
872 next(self.stream)
873 if end_tokens is not None and \
874 self.stream.current.test_any(*end_tokens):
875 return body
876 rv = self.parse_statement()
877 if isinstance(rv, list):
878 body.extend(rv)
879 else:
880 body.append(rv)
881 self.stream.expect('block_end')
882 else:
883 raise AssertionError('internal parsing error')
884
885 flush_data()
886 finally:
887 if end_tokens is not None:
888 self._end_token_stack.pop()
889
890 return body
891
892 def parse(self):
893 """Parse the whole template into a `Template` node."""

Callers 2

parse_statementsMethod · 0.95
parseMethod · 0.95

Calls 8

parse_tupleMethod · 0.95
parse_statementMethod · 0.95
nextFunction · 0.90
expectMethod · 0.80
test_anyMethod · 0.80
extendMethod · 0.80
popMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected