r"""Reads a var statement. >>> read_var = Parser().read_var >>> read_var('var x=10\nfoo') ( , 'foo') >>> read_var('var x: hello $name\nfoo') ( , 'foo')
(self, text)
| 130 | return self.readline(text) |
| 131 | |
| 132 | def read_var(self, text): |
| 133 | r"""Reads a var statement. |
| 134 | |
| 135 | >>> read_var = Parser().read_var |
| 136 | >>> read_var('var x=10\nfoo') |
| 137 | (<var: x = 10>, 'foo') |
| 138 | >>> read_var('var x: hello $name\nfoo') |
| 139 | (<var: x = join_(u'hello ', escape_(name, True))>, 'foo') |
| 140 | """ |
| 141 | line, text = splitline(text) |
| 142 | tokens = self.python_tokens(line) |
| 143 | if len(tokens) < 4: |
| 144 | raise SyntaxError("Invalid var statement") |
| 145 | |
| 146 | name = tokens[1] |
| 147 | sep = tokens[2] |
| 148 | value = line.split(sep, 1)[1].strip() |
| 149 | |
| 150 | if sep == "=": |
| 151 | pass # no need to process value |
| 152 | elif sep == ":": |
| 153 | # @@ Hack for backward-compatability |
| 154 | if tokens[3] == "\n": # multi-line var statement |
| 155 | block, text = self.read_indented_block(text, " ") |
| 156 | lines = [self.readline(x)[0] for x in block.splitlines()] |
| 157 | nodes = [] |
| 158 | for x in lines: |
| 159 | nodes.extend(x.nodes) |
| 160 | nodes.append(TextNode("\n")) |
| 161 | else: # single-line var statement |
| 162 | linenode, _ = self.readline(value) |
| 163 | nodes = linenode.nodes |
| 164 | parts = [node.emit("") for node in nodes] |
| 165 | value = "join_(%s)" % ", ".join(parts) |
| 166 | else: |
| 167 | raise SyntaxError("Invalid var statement") |
| 168 | return VarNode(name, value), text |
| 169 | |
| 170 | def read_suite(self, text): |
| 171 | r"""Reads section by section till end of text. |
no test coverage detected