MCPcopy Create free account
hub / github.com/webpy/webpy / read_var

Method read_var

web/template.py:132–168  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

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.

Callers 1

read_sectionMethod · 0.95

Calls 9

python_tokensMethod · 0.95
read_indented_blockMethod · 0.95
readlineMethod · 0.95
splitlineFunction · 0.85
TextNodeClass · 0.85
VarNodeClass · 0.85
appendMethod · 0.80
joinMethod · 0.80
emitMethod · 0.45

Tested by

no test coverage detected