@@ -22,6 +22,9 @@ def __init__(self, with_junk=False):
22
22
self .with_junk = with_junk
23
23
24
24
def serialize (self , resource ):
25
+ if not isinstance (resource , ast .Resource ):
26
+ raise Exception ('Unknown resource type: {}' .format (type (resource )))
27
+
25
28
state = 0
26
29
27
30
parts = []
@@ -50,7 +53,10 @@ def serialize_entry(self, entry, state=0):
50
53
return "{}\n \n " .format (serialize_resource_comment (entry ))
51
54
if isinstance (entry , ast .Junk ):
52
55
return serialize_junk (entry )
53
- raise Exception ('Unknown entry type: {}' .format (entry .type ))
56
+ raise Exception ('Unknown entry type: {}' .format (type (entry )))
57
+
58
+ def serialize_expression (self , expr ):
59
+ return serialize_expression (expr )
54
60
55
61
56
62
def serialize_comment (comment ):
@@ -139,7 +145,7 @@ def serialize_element(element):
139
145
return serialize_text_element (element )
140
146
if isinstance (element , ast .Placeable ):
141
147
return serialize_placeable (element )
142
- raise Exception ('Unknown element type: {}' .format (element . type ))
148
+ raise Exception ('Unknown element type: {}' .format (type ( element ) ))
143
149
144
150
145
151
def serialize_text_element (text ):
@@ -150,14 +156,18 @@ def serialize_placeable(placeable):
150
156
expr = placeable .expression
151
157
152
158
if isinstance (expr , ast .Placeable ):
153
- return "{{{}}}" .format (
154
- serialize_placeable (expr ))
159
+ return "{{{}}}" .format (serialize_placeable (expr ))
155
160
if isinstance (expr , ast .SelectExpression ):
156
- return "{{{}}}" .format (
157
- serialize_select_expression (expr ))
161
+ # Special-case select expressions to control the withespace around the
162
+ # opening and the closing brace.
163
+ if expr .expression is not None :
164
+ # A select expression with a selector.
165
+ return "{{ {}}}" .format (serialize_select_expression (expr ))
166
+ else :
167
+ # A variant list without a selector.
168
+ return "{{{}}}" .format (serialize_select_expression (expr ))
158
169
if isinstance (expr , ast .Expression ):
159
- return "{{ {} }}" .format (
160
- serialize_expression (expr ))
170
+ return "{{ {} }}" .format (serialize_expression (expr ))
161
171
162
172
163
173
def serialize_expression (expression ):
@@ -175,7 +185,9 @@ def serialize_expression(expression):
175
185
return serialize_variant_expression (expression )
176
186
if isinstance (expression , ast .CallExpression ):
177
187
return serialize_call_expression (expression )
178
- raise Exception ('Unknown expression type: {}' .format (expression .type ))
188
+ if isinstance (expression , ast .SelectExpression ):
189
+ return serialize_select_expression (expression )
190
+ raise Exception ('Unknown expression type: {}' .format (type (expression )))
179
191
180
192
181
193
def serialize_string_expression (expr ):
@@ -198,7 +210,7 @@ def serialize_select_expression(expr):
198
210
parts = []
199
211
200
212
if expr .expression :
201
- selector = " {} ->" .format (
213
+ selector = "{} ->" .format (
202
214
serialize_expression (expr .expression )
203
215
)
204
216
parts .append (selector )
@@ -262,7 +274,7 @@ def serialize_argument_value(argval):
262
274
return serialize_string_expression (argval )
263
275
if isinstance (argval , ast .NumberExpression ):
264
276
return serialize_number_expression (argval )
265
- raise Exception ('Unknown argument type: {}' .format (argval . type ))
277
+ raise Exception ('Unknown argument type: {}' .format (type ( argval ) ))
266
278
267
279
268
280
def serialize_identifier (identifier ):
@@ -278,7 +290,7 @@ def serialize_variant_key(key):
278
290
return serialize_variant_name (key )
279
291
if isinstance (key , ast .NumberExpression ):
280
292
return serialize_number_expression (key )
281
- raise Exception ('Unknown variant key type: {}' .format (key . type ))
293
+ raise Exception ('Unknown variant key type: {}' .format (type ( key ) ))
282
294
283
295
284
296
def serialize_function (function ):
0 commit comments