-
Notifications
You must be signed in to change notification settings - Fork 0
/
spicy_template.jinja2
107 lines (99 loc) · 2.62 KB
/
spicy_template.jinja2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
{% if data.meta.application %}
# {{ data.meta.application }}
{% else %}
# {{ data.meta["file-extension"]|upper }} file
{% endif %}
# Spicy parser
# (c) 2017 Dirk Loss
# Draft generated by ksy2spicy
module {{ data.meta.id|upper }};
{% if data.meta.endian == "le" %}
%byteorder = Spicy::ByteOrder::Little;
{% else %}
%byteorder = Spicy::ByteOrder::Big;
{% endif %}
{% if data.enums %}
# Enums
{% for item in data.enums.items() %}
type {{ item.0 }} = enum {
{% for seqitem in item.1.items() %}
{% if loop.last %}
{{ seqitem.1 }} = {{ seqitem.0 }}
{% else %}
{{ seqitem.1 }} = {{ seqitem.0 }},
{% endif %}
{% endfor %}
};
{% endfor %}
{% endif %}
{% if data.types %}
# Units
{% for item in data.types.items() %}
type {{ item.0|capitalize }} = unit {
{% for seqitem in item.1.seq %}
{% if seqitem.type == "u1" %}
{{ seqitem.id }} : uint8;
{% elif seqitem.type == "u2" %}
{{ seqitem.id }} : uint16;
{% elif seqitem.type == "u4" %}
{{ seqitem.id }} : uint32;
{% elif seqitem.type == "s1" %}
{{ seqitem.id }} : int8;
{% elif seqitem.type == "s2" %}
{{ seqitem.id }} : int16;
{% elif seqitem.type == "s4" %}
{{ seqitem.id }} : int32;
{% elif seqitem.type == "strz" %}
{{ seqitem.id }} : bytes; # strz
{% elif seqitem.type == "str" %}
{{ seqitem.id }} : bytes; # str
{% elif seqitem.contents %}
{% if seqitem.contents is sequence %}
{{ seqitem.id }} : LIST{{ contents }}; # FIXME
{% else %}
{{ seqitem.id }} : b"{{ seqitem.contents }}";
{% endif %}
{% elif seqitem.size %}
{{ seqitem.id }} : bytes &length={{ seqitem.size }};
{% else %}
{{ seqitem.id }} : {{ seqitem.type|capitalize }}{{ ' if %s' % seqitem.if if seqitem.if }};
{% endif %}
{% endfor %}
}
{% endfor %}
{% endif %}
{% if data.seq %}
# Main
export type File = unit {
{% for seqitem in data.seq %}
{% if seqitem.doc %}
# {{ seqitem.doc }}
{% endif %}
{% if seqitem.type == "u1" %}
{{ seqitem.id }} : uint8;
{% elif seqitem.type == "u2" %}
{{ seqitem.id }} : uint16;
{% elif seqitem.type == "u4" %}
{{ seqitem.id }} : uint32;
{% elif seqitem.type == "s1" %}
{{ seqitem.id }} : int8;
{% elif seqitem.type == "s2" %}
{{ seqitem.id }} : int16;
{% elif seqitem.type == "s4" %}
{{ seqitem.id }} : int32;
{% elif seqitem.type == "strz" %}
{{ seqitem.id }} : bytes; # strz
{% elif seqitem.type == "str" %}
{{ seqitem.id }} : bytes; # str
{% elif seqitem.contents %}
{% if seqitem.contents is sequence %}
{{ seqitem.id }} : LIST{{ contents }}; # FIXME
{% else %}
{{ seqitem.id }} : b"{{ seqitem.contents }}";
{% endif %}
{% else %}
{{ seqitem.id }} : {{ seqitem.type|capitalize }};
{% endif %}
{% endfor %}
};
{% endif %}