summaryrefslogtreecommitdiff
path: root/src/scripts
diff options
context:
space:
mode:
authorDave Andreoli <dave@gurumeditation.it>2018-03-17 11:37:13 +0100
committerDave Andreoli <dave@gurumeditation.it>2018-03-17 11:37:13 +0100
commit2cb896dfab7180e3dc802be01987943c0bd3e555 (patch)
tree7bd9de879ae1ea1415e8a5f59aa4317e35a976b5 /src/scripts
parent35316db2f0714eb4cc599f171e95023f01d6df5f (diff)
Pyolian doc generator: update wrt name API changes
Argh, this has been difficult... hopefully I have done this right
Diffstat (limited to 'src/scripts')
-rw-r--r--src/scripts/gendoc/doc_alias.template4
-rw-r--r--src/scripts/gendoc/doc_class.template4
-rw-r--r--src/scripts/gendoc/doc_enum.template8
-rw-r--r--src/scripts/gendoc/doc_macros.include26
-rw-r--r--src/scripts/gendoc/doc_struct.template10
-rwxr-xr-xsrc/scripts/gendoc/gendoc.py20
-rw-r--r--src/scripts/gendoc/namespaces.template4
-rw-r--r--src/scripts/pyolian/test_gen_class.template12
-rw-r--r--src/scripts/pyolian/test_gen_namespace.template14
9 files changed, 51 insertions, 51 deletions
diff --git a/src/scripts/gendoc/doc_alias.template b/src/scripts/gendoc/doc_alias.template
index c0d5fa7a3d..0f3382344b 100644
--- a/src/scripts/gendoc/doc_alias.template
+++ b/src/scripts/gendoc/doc_alias.template
@@ -1,6 +1,6 @@
1<!--(include)-->doc_macros.include<!--(end)-->#! 1<!--(include)-->doc_macros.include<!--(end)-->#!
2~~Title: ${alias.full_name}$~~ 2~~Title: ${alias.name}$~~
3====== ${alias.full_name}$ (alias) ====== 3====== ${alias.name}$ (alias) ======
4 4
5${BEST_SUMMARY(obj=alias)}$ 5${BEST_SUMMARY(obj=alias)}$
6 6
diff --git a/src/scripts/gendoc/doc_class.template b/src/scripts/gendoc/doc_class.template
index 60f6779af1..6daaa5f087 100644
--- a/src/scripts/gendoc/doc_class.template
+++ b/src/scripts/gendoc/doc_class.template
@@ -1,6 +1,6 @@
1<!--(include)-->doc_macros.include<!--(end)-->#! 1<!--(include)-->doc_macros.include<!--(end)-->#!
2~~Title: ${cls.full_name}$~~ 2~~Title: ${cls.name}$~~
3====== ${cls.full_name}$ (${CLS_TYPE}$) ====== 3====== ${cls.name}$ (${CLS_TYPE}$) ======
4 4
5${BEST_SUMMARY(obj=cls)}$ 5${BEST_SUMMARY(obj=cls)}$
6 6
diff --git a/src/scripts/gendoc/doc_enum.template b/src/scripts/gendoc/doc_enum.template
index 03f6cd62cd..bdbb37a527 100644
--- a/src/scripts/gendoc/doc_enum.template
+++ b/src/scripts/gendoc/doc_enum.template
@@ -1,6 +1,6 @@
1<!--(include)-->doc_macros.include<!--(end)-->#! 1<!--(include)-->doc_macros.include<!--(end)-->#!
2~~Title: ${enum.full_name}$~~ 2~~Title: ${enum.name}$~~
3====== ${enum.full_name}$ (enum) ====== 3====== ${enum.name}$ (enum) ======
4 4
5${BEST_SUMMARY(obj=enum)}$ 5${BEST_SUMMARY(obj=enum)}$
6 6
@@ -23,7 +23,7 @@ ${OBJECT_STATIC_CONTENT(obj=enum, section='fields')}$
23<code> 23<code>
24enum { 24enum {
25<!--(for field in enum.enum_fields)--> 25<!--(for field in enum.enum_fields)-->
26 ${field.name}$: ${field.value.serialize}$, 26 ${field.name}$: ${field.value.serialize}$
27<!--(end)--> 27<!--(end)-->
28} 28}
29</code> 29</code>
@@ -35,5 +35,5 @@ typedef enum {
35<!--(for field in enum.enum_fields)--> 35<!--(for field in enum.enum_fields)-->
36 ${field.c_name}$ = ${field.value.serialize}$, 36 ${field.c_name}$ = ${field.value.serialize}$,
37<!--(end)--> 37<!--(end)-->
38} ${enum.full_name.replace('.', '_')}$; 38} ${enum.name.replace('.', '_')}$;
39</code> 39</code>
diff --git a/src/scripts/gendoc/doc_macros.include b/src/scripts/gendoc/doc_macros.include
index 577052ef64..1e62a2b62e 100644
--- a/src/scripts/gendoc/doc_macros.include
+++ b/src/scripts/gendoc/doc_macros.include
@@ -125,7 +125,7 @@ interface#!
125 <!--(for n in cls.namespaces)--> 125 <!--(for n in cls.namespaces)-->
126:${n.lower()}$#! 126:${n.lower()}$#!
127 <!--(end)--> 127 <!--(end)-->
128:${cls.name.lower()}$|${cls.full_name}$]] 128:${cls.short_name.lower()}$|${cls.name}$]]
129<!--(end)--> 129<!--(end)-->
130#!############################################################################## 130#!##############################################################################
131#!#### EVENT_LINK(cls, ev) ################################################### 131#!#### EVENT_LINK(cls, ev) ###################################################
@@ -135,9 +135,9 @@ interface#!
135 <!--(for n in cls.namespaces)--> 135 <!--(for n in cls.namespaces)-->
136:${n.lower()}$#! 136:${n.lower()}$#!
137 <!--(end)--> 137 <!--(end)-->
138:${cls.name.lower()}$#! 138:${cls.short_name.lower()}$#!
139:event#! 139:event#!
140:${ev.name.lower().replace(',','_')}$|${ev.name}$]] 140:${ev.short_name.lower().replace(',','_')}$|${ev.name}$]]
141<!--(end)--> 141<!--(end)-->
142#!############################################################################## 142#!##############################################################################
143#!#### TYPEDECL_LINK(typedecl) ############################################### 143#!#### TYPEDECL_LINK(typedecl) ###############################################
@@ -147,7 +147,7 @@ interface#!
147 <!--(for n in typedecl.namespaces)--> 147 <!--(for n in typedecl.namespaces)-->
148:${n.lower()}$#! 148:${n.lower()}$#!
149 <!--(end)--> 149 <!--(end)-->
150:${typedecl.name.lower()}$|${typedecl.full_name}$]] 150:${typedecl.short_name.lower()}$|${typedecl.name}$]]
151<!--(end)--> 151<!--(end)-->
152#!############################################################################## 152#!##############################################################################
153#!#### TYPE_LINK(type) ####################################################### 153#!#### TYPE_LINK(type) #######################################################
@@ -157,7 +157,7 @@ interface#!
157 <!--(for n in type.namespaces)--> 157 <!--(for n in type.namespaces)-->
158:${n.lower()}$#! 158:${n.lower()}$#!
159 <!--(end)--> 159 <!--(end)-->
160:${type.name.lower()}$|${type.full_name}$]] 160:${type.short_name.lower()}$|${type.name}$]]
161<!--(end)--> 161<!--(end)-->
162#!############################################################################## 162#!##############################################################################
163#!#### FUNC_LINK(func) ####################################################### 163#!#### FUNC_LINK(func) #######################################################
@@ -172,7 +172,7 @@ interface#!
172 <!--(else)--> 172 <!--(else)-->
173:property#! 173:property#!
174 <!--(end)--> 174 <!--(end)-->
175:${func.name}$|${func.name}$]] 175:${func.short_name}$|${func.short_name}$]]
176<!--(end)--> 176<!--(end)-->
177#!############################################################################## 177#!##############################################################################
178#!#### FUNC_SCOPE(func) ###################################################### 178#!#### FUNC_SCOPE(func) ######################################################
@@ -253,7 +253,7 @@ interface#!
253 <!--(if i == 0)--> 253 <!--(if i == 0)-->
254^ parameters ^ type ^ description ^ 254^ parameters ^ type ^ description ^
255 <!--(end)--> 255 <!--(end)-->
256|${PARAM_DIRECTION_TAG(param=par)}$ **${par.name}$**|${par.type.full_name}$ #! 256|${PARAM_DIRECTION_TAG(param=par)}$ **${par.name}$**|${par.type.name}$ #!
257|${BEST_SUMMARY(obj=par)}$ ${BEST_DESCRIPTION(obj=par)}$| 257|${BEST_SUMMARY(obj=par)}$ ${BEST_DESCRIPTION(obj=par)}$|
258 <!--(else)--> 258 <!--(else)-->
259**This function do not accept any parameter.** 259**This function do not accept any parameter.**
@@ -262,7 +262,7 @@ interface#!
262 <!--(if func.method_return_type)--> 262 <!--(if func.method_return_type)-->
263${setvar("obj", "func.return_documentation(Eolian_Function_Type.METHOD)")}$#! 263${setvar("obj", "func.return_documentation(Eolian_Function_Type.METHOD)")}$#!
264^ return ^ description ^ 264^ return ^ description ^
265|**${func.method_return_type.full_name}$**|${BEST_SUMMARY(obj=obj)}$ ${BEST_DESCRIPTION(obj=obj)}$| 265|**${func.method_return_type.name}$**|${BEST_SUMMARY(obj=obj)}$ ${BEST_DESCRIPTION(obj=obj)}$|
266 <!--(else)--> 266 <!--(else)-->
267**This function do not return anything.** 267**This function do not return anything.**
268 <!--(end)--> 268 <!--(end)-->
@@ -277,14 +277,14 @@ ${setvar("obj", "func.return_documentation(Eolian_Function_Type.METHOD)")}$#!
277 <!--(if i == 0)--> 277 <!--(if i == 0)-->
278^ values ^ type ^ description ^ 278^ values ^ type ^ description ^
279 <!--(end)--> 279 <!--(end)-->
280|**${val.name}$**|${val.type.full_name}$|${BEST_SUMMARY(obj=val)}$| 280|**${val.name}$**|${val.type.name}$|${BEST_SUMMARY(obj=val)}$|
281 <!--(end)--> 281 <!--(end)-->
282 282
283 <!--(for i, key in enumerate(func.getter_keys or func.setter_keys))--> 283 <!--(for i, key in enumerate(func.getter_keys or func.setter_keys))-->
284 <!--(if i == 0)--> 284 <!--(if i == 0)-->
285^ keys ^ type ^ description ^ 285^ keys ^ type ^ description ^
286 <!--(end)--> 286 <!--(end)-->
287|**${key.name}$**|${key.type.full_name}$|${BEST_SUMMARY(obj=key)}$| 287|**${key.name}$**|${key.type.name}$|${BEST_SUMMARY(obj=key)}$|
288 <!--(end)--> 288 <!--(end)-->
289 289
290<!--(end)--> 290<!--(end)-->
@@ -296,19 +296,19 @@ ${setvar("obj", "func.return_documentation(Eolian_Function_Type.METHOD)")}$#!
296(#! 296(#!
297 <!--(if impl.is_property)--> 297 <!--(if impl.is_property)-->
298 <!--(for i, val in enumerate(impl.function.getter_values or impl.function.setter_values))--> 298 <!--(for i, val in enumerate(impl.function.getter_values or impl.function.setter_values))-->
299${', ' if i else ''}$${val.type.name}$#! 299${', ' if i else ''}$${val.type.short_name}$#!
300 <!--(end)--> 300 <!--(end)-->
301 <!--(elif impl.is_method)--> 301 <!--(elif impl.is_method)-->
302 <!--(for i, param in enumerate(impl.function.parameters))--> 302 <!--(for i, param in enumerate(impl.function.parameters))-->
303${', ' if i else ''}$#! 303${', ' if i else ''}$#!
304//${param.type.name}$// ''${param.direction.name.lower()}$'' **${param.name}$**#! 304//${param.type.short_name}$// ''${param.direction.name.lower()}$'' **${param.short_name}$**#!
305 <!--(end)--> 305 <!--(end)-->
306 <!--(end)--> 306 <!--(end)-->
307) #! 307) #!
308${IMPLEMENT_TAGS}$ #! 308${IMPLEMENT_TAGS}$ #!
309 <!--(if impl.is_method)--> 309 <!--(if impl.is_method)-->
310 <!--(if impl.function.method_return_type)--> 310 <!--(if impl.function.method_return_type)-->
311 => //${impl.function.method_return_type.name}$// #! 311 => //${impl.function.method_return_type.short_name}$// #!
312 <!--(else)--> 312 <!--(else)-->
313 => //None// #! 313 => //None// #!
314 <!--(end)--> 314 <!--(end)-->
diff --git a/src/scripts/gendoc/doc_struct.template b/src/scripts/gendoc/doc_struct.template
index 370e9be6e9..306dcfd961 100644
--- a/src/scripts/gendoc/doc_struct.template
+++ b/src/scripts/gendoc/doc_struct.template
@@ -1,6 +1,6 @@
1<!--(include)-->doc_macros.include<!--(end)-->#! 1<!--(include)-->doc_macros.include<!--(end)-->#!
2~~Title: ${struct.full_name}$~~ 2~~Title: ${struct.name}$~~
3====== ${struct.full_name}$ (struct) ====== 3====== ${struct.name}$ (struct) ======
4 4
5${BEST_SUMMARY(obj=struct)}$ 5${BEST_SUMMARY(obj=struct)}$
6 6
@@ -21,7 +21,7 @@ ${OBJECT_STATIC_CONTENT(obj=struct, section='fields')}$
21===== Signature ===== 21===== Signature =====
22 22
23<code> 23<code>
24struct ${struct.full_name}$ { 24struct ${struct.name}$ {
25<!--(for field in struct.struct_fields)--> 25<!--(for field in struct.struct_fields)-->
26 ${field.name}$: ${field.type.name}$, 26 ${field.name}$: ${field.type.name}$,
27<!--(end)--> 27<!--(end)-->
@@ -31,9 +31,9 @@ struct ${struct.full_name}$ {
31===== C Signature ===== 31===== C Signature =====
32 32
33<code> 33<code>
34typedef struct _${struct.full_name.replace('.', '_')}$ { 34typedef struct _${struct.name.replace('.', '_')}$ {
35<!--(for field in struct.struct_fields)--> 35<!--(for field in struct.struct_fields)-->
36 ${field.name}$: **TODO (issue with Typedecl.c_type need Unit)**, 36 ${field.name}$: **TODO (issue with Typedecl.c_type need Unit)**,
37<!--(end)--> 37<!--(end)-->
38} ${struct.full_name.replace('.', '_')}$; 38} ${struct.name.replace('.', '_')}$;
39</code> 39</code>
diff --git a/src/scripts/gendoc/gendoc.py b/src/scripts/gendoc/gendoc.py
index 8fec32cc13..2ebaa605d4 100755
--- a/src/scripts/gendoc/gendoc.py
+++ b/src/scripts/gendoc/gendoc.py
@@ -41,7 +41,7 @@ _choices = ['start', 'classes', 'enums', 'structs', 'aliases']
41parser.add_argument('--step', '-s', metavar='STEP', default=None, 41parser.add_argument('--step', '-s', metavar='STEP', default=None,
42 choices=_choices, 42 choices=_choices,
43 help='A single step to run (default to all), ' 43 help='A single step to run (default to all), '
44 'valid choises: '+ ', '.join(_choices)) 44 'valid choices: '+ ', '.join(_choices))
45args = parser.parse_args() 45args = parser.parse_args()
46 46
47 47
@@ -72,7 +72,7 @@ def page_path_for_object(obj):
72 path = ['data', 'pages', 'develop', 'api'] 72 path = ['data', 'pages', 'develop', 'api']
73 for ns in obj.namespaces: 73 for ns in obj.namespaces:
74 path.append(ns.lower()) 74 path.append(ns.lower())
75 output_file = obj.name.lower() + '.txt' 75 output_file = obj.short_name.lower() + '.txt'
76 return os.path.join(args.root_path, *path, output_file) 76 return os.path.join(args.root_path, *path, output_file)
77 77
78 78
@@ -132,30 +132,30 @@ if args.step in ('start', None):
132if args.step in ('classes', None): 132if args.step in ('classes', None):
133 t = Template('doc_class.template') 133 t = Template('doc_class.template')
134 for cls in eolian_db.classes: 134 for cls in eolian_db.classes:
135 if cls.full_name.startswith(args.namespace): 135 if cls.name.startswith(args.namespace):
136 output_file = page_path_for_object(cls) 136 output_file = page_path_for_object(cls)
137 t.render(output_file, args.verbose, cls=cls.full_name) 137 t.render(output_file, args.verbose, cls=cls.name)
138 138
139# render a page for each Enum 139# render a page for each Enum
140if args.step in ('enums', None): 140if args.step in ('enums', None):
141 t = Template('doc_enum.template') 141 t = Template('doc_enum.template')
142 for enum in eolian_db.enums: 142 for enum in eolian_db.enums:
143 if enum.full_name.startswith(args.namespace): 143 if enum.name.startswith(args.namespace):
144 output_file = page_path_for_object(enum) 144 output_file = page_path_for_object(enum)
145 t.render(output_file, args.verbose, enum=enum.full_name) 145 t.render(output_file, args.verbose, enum=enum.name)
146 146
147# render a page for each Struct 147# render a page for each Struct
148if args.step in ('structs', None): 148if args.step in ('structs', None):
149 t = Template('doc_struct.template') 149 t = Template('doc_struct.template')
150 for struct in eolian_db.structs: 150 for struct in eolian_db.structs:
151 if struct.full_name.startswith(args.namespace): 151 if struct.name.startswith(args.namespace):
152 output_file = page_path_for_object(struct) 152 output_file = page_path_for_object(struct)
153 t.render(output_file, args.verbose, struct=struct.full_name) 153 t.render(output_file, args.verbose, struct=struct.name)
154 154
155# render a page for each Alias 155# render a page for each Alias
156if args.step in ('aliases', None): 156if args.step in ('aliases', None):
157 t = Template('doc_alias.template') 157 t = Template('doc_alias.template')
158 for alias in eolian_db.aliases: 158 for alias in eolian_db.aliases:
159 if alias.full_name.startswith(args.namespace): 159 if alias.name.startswith(args.namespace):
160 output_file = page_path_for_object(alias) 160 output_file = page_path_for_object(alias)
161 t.render(output_file, args.verbose, alias=alias.full_name) 161 t.render(output_file, args.verbose, alias=alias.name)
diff --git a/src/scripts/gendoc/namespaces.template b/src/scripts/gendoc/namespaces.template
index 02c071b634..d373025d56 100644
--- a/src/scripts/gendoc/namespaces.template
+++ b/src/scripts/gendoc/namespaces.template
@@ -8,7 +8,7 @@
8 <!--(for n in cls.namespaces)--> 8 <!--(for n in cls.namespaces)-->
9:${n.lower()}$#! 9:${n.lower()}$#!
10 <!--(end)--> 10 <!--(end)-->
11:${cls.name.lower()}$|${cls.name}$]] 11:${cls.short_name.lower()}$|${cls.short_name}$]]
12<!--(end)--> 12<!--(end)-->
13 13
14#!############################################################################## 14#!##############################################################################
@@ -19,7 +19,7 @@
19 <!--(for n in typedecl.namespaces)--> 19 <!--(for n in typedecl.namespaces)-->
20:${n.lower()}$#! 20:${n.lower()}$#!
21 <!--(end)--> 21 <!--(end)-->
22:${typedecl.name.lower()}$|${typedecl.name}$]] 22:${typedecl.short_name.lower()}$|${typedecl.short_name}$]]
23<!--(end)--> 23<!--(end)-->
24 24
25#!############################################################################## 25#!##############################################################################
diff --git a/src/scripts/pyolian/test_gen_class.template b/src/scripts/pyolian/test_gen_class.template
index 15129bf080..cc0e845ab5 100644
--- a/src/scripts/pyolian/test_gen_class.template
+++ b/src/scripts/pyolian/test_gen_class.template
@@ -1,12 +1,12 @@
1 1
2================================================================================ 2================================================================================
3Class: ${cls.full_name}$ 3Class: ${cls.name}$ (${cls.short_name}$)
4================================================================================ 4================================================================================
5Class type: ${cls.type}$ 5Class type: ${cls.type}$
6Base Class: ${cls.base_class.full_name if cls.base_class else None}$ 6Base Class: ${cls.base_class.name if cls.base_class else None}$
7Inherits: ${', '.join([i.full_name for i in cls.inherits])}$ 7Inherits: ${', '.join([i.name for i in cls.inherits])}$
8Hierarchy: ${' => '.join([i.full_name for i in cls.hierarchy])}$ 8Hierarchy: ${' => '.join([i.name for i in cls.hierarchy])}$
9InheritsFull: ${', '.join([i.full_name for i in cls.inherits_full])}$ 9InheritsFull: ${', '.join([i.name for i in cls.inherits_full])}$
10Namespace: ${cls.namespace}$ 10Namespace: ${cls.namespace}$
11Namespaces: ${list(cls.namespaces)}$ 11Namespaces: ${list(cls.namespaces)}$
12File: ${cls.file}$ 12File: ${cls.file}$
@@ -40,7 +40,7 @@ Properties:
40Implements: 40Implements:
41=========== 41===========
42<!--(for i in cls.implements)--> 42<!--(for i in cls.implements)-->
43 * ${i.full_name}$ 43 * ${i.name}$
44<!--(else)--> 44<!--(else)-->
45 no implements available 45 no implements available
46<!--(end)--> 46<!--(end)-->
diff --git a/src/scripts/pyolian/test_gen_namespace.template b/src/scripts/pyolian/test_gen_namespace.template
index 2276c4ce96..8cdb4f7ca7 100644
--- a/src/scripts/pyolian/test_gen_namespace.template
+++ b/src/scripts/pyolian/test_gen_namespace.template
@@ -6,7 +6,7 @@ Namespace: ${namespace.name}$ ${namespace.namespaces}$
6Regular Classes: 6Regular Classes:
7================ 7================
8<!--(for cls in namespace.regulars)--> 8<!--(for cls in namespace.regulars)-->
9 * ${cls.full_name}$ 9 * ${cls.name}$
10<!--(else)--> 10<!--(else)-->
11 no classes available 11 no classes available
12<!--(end)--> 12<!--(end)-->
@@ -14,7 +14,7 @@ Regular Classes:
14Abstract Classes: 14Abstract Classes:
15================ 15================
16<!--(for cls in namespace.abstracts)--> 16<!--(for cls in namespace.abstracts)-->
17 * ${cls.full_name}$ 17 * ${cls.name}$
18<!--(else)--> 18<!--(else)-->
19 no classes available 19 no classes available
20<!--(end)--> 20<!--(end)-->
@@ -22,7 +22,7 @@ Abstract Classes:
22Mixins: 22Mixins:
23======= 23=======
24<!--(for cls in namespace.mixins)--> 24<!--(for cls in namespace.mixins)-->
25 * ${cls.full_name}$ 25 * ${cls.name}$
26<!--(else)--> 26<!--(else)-->
27 no classes available 27 no classes available
28<!--(end)--> 28<!--(end)-->
@@ -30,7 +30,7 @@ Mixins:
30Interfaces: 30Interfaces:
31=========== 31===========
32<!--(for cls in namespace.interfaces)--> 32<!--(for cls in namespace.interfaces)-->
33 * ${cls.full_name}$ 33 * ${cls.name}$
34<!--(else)--> 34<!--(else)-->
35 no classes available 35 no classes available
36<!--(end)--> 36<!--(end)-->
@@ -38,7 +38,7 @@ Interfaces:
38Aliases: 38Aliases:
39======== 39========
40<!--(for typedecl in namespace.aliases)--> 40<!--(for typedecl in namespace.aliases)-->
41 * ${typedecl.full_name}$ 41 * ${typedecl.name}$
42<!--(else)--> 42<!--(else)-->
43 no alias available 43 no alias available
44<!--(end)--> 44<!--(end)-->
@@ -46,7 +46,7 @@ Aliases:
46Structs: 46Structs:
47======== 47========
48<!--(for typedecl in namespace.structs)--> 48<!--(for typedecl in namespace.structs)-->
49 * ${typedecl.full_name}$ 49 * ${typedecl.name}$
50 <!--(for field in typedecl.struct_fields)--> 50 <!--(for field in typedecl.struct_fields)-->
51 ${field.type.name}$ ${field.name}$ 51 ${field.type.name}$ ${field.name}$
52 <!--(end)--> 52 <!--(end)-->
@@ -57,7 +57,7 @@ Structs:
57Enums: 57Enums:
58====== 58======
59<!--(for typedecl in namespace.enums)--> 59<!--(for typedecl in namespace.enums)-->
60 * ${typedecl.full_name}$ 60 * ${typedecl.name}$
61 <!--(for field in typedecl.enum_fields)--> 61 <!--(for field in typedecl.enum_fields)-->
62 ${field.c_name}$ = ${field.value.serialize}$ 62 ${field.c_name}$ = ${field.value.serialize}$
63 <!--(end)--> 63 <!--(end)-->