metanorma-plugin-lutaml 0.4.2 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,133 @@
1
+ {% for package in context.packages %}
2
+ {% assign package_name = package.name | downcase | replace: ":", "" | replace: " ", "_" %}
3
+ {% if additional_context.before and additional_context.before.size > 0 %}
4
+ {% for before in additional_context.before %}
5
+ {{ before.text }}
6
+ {% endfor %}
7
+ {% endif %}
8
+ {% assign is_package_spare = package.name | slice: 0,5 %}
9
+ {% if is_package_spare == 'old: ' %}{% continue %}
10
+ {% elsif is_package_spare == 'Spare' %}{% continue %}
11
+ {% endif %}
12
+
13
+ {% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}{{equalsigns}} {{ package.name }} package
14
+ {{equalsigns}}= {{ package.name }} overview
15
+
16
+ {% assign before_package_key = 'before;' | append: package.name %}
17
+ {% if additional_context[before_package_key] and additional_context[before_package_key].size > 0 %}
18
+ {% for before in additional_context[before_package_key] %}
19
+ {{ before.text }}
20
+ {% endfor %}
21
+ {% endif %}
22
+ {% if additional_context.diagram_include_block %}
23
+ {% for diagram_include_block in additional_context.diagram_include_block %}
24
+ {% include "diagrams_block", package_name: package_name, image_base_path: diagram_include_block.base_path, text: diagram_include_block.text %}
25
+ {% endfor %}
26
+ {% endif %}
27
+
28
+ {% if package.packages.size > 0 %}The {{ package.name }} package is organized into
29
+ {{ package.packages.size }} packages{% assign modules_nested_size = 0 %}{% for module in package.packages %}{% assign modules_nested_size = modules_nested_size | plus: module.packages.size %}{% endfor %}{% if modules_nested_size > 0 %} with {{modules_nested_size}} modules{% endif %}:
30
+ {% endif %}
31
+ [arabic]
32
+ {% for module in package.packages %}
33
+ {% if module.packages.length > 0 %}
34
+ . {{ module.name }} package comprises:
35
+ {% for nested_module in module.packages %}
36
+ .. {{nested_module.name}} module
37
+ {% endfor %}
38
+ {% else %}
39
+ . {{ module.name }} package
40
+ {% endif %}
41
+ {% endfor %}
42
+
43
+ {% if package.classes.size > 0 or package.enums.size > 0 or package.data_types.size > 0 %}
44
+
45
+ {{equalsigns}}= Defining tables
46
+
47
+ [arabic]
48
+ {% for klass in package.classes %}
49
+ {% assign is_klass_spare = klass.name | slice: 0,5 %}
50
+ {% if is_klass_spare == 'old: ' %}{% continue %}
51
+ {% elsif is_klass_spare == 'Spare' %}{% continue %}
52
+ {% endif %}
53
+ {% assign klass_name = klass.name | downcase | replace: ':', '' | replace: ' ', '_' %}
54
+ .<<tab-P-{{ package_name }}-C-{{ klass_name }}>> -- Elements of {{ package.name }}::{{ klass.name }}
55
+
56
+ {% endfor %}
57
+ {% for enum in package.enums %}
58
+ {% assign is_enum_spare = enum.name | slice: 0,5 %}
59
+ {% if is_enum_spare == 'old: ' %}{% continue %}
60
+ {% elsif is_enum_spare == 'Spare' %}{% continue %}
61
+ {% endif %}
62
+ {% assign enum_name = enum.name | downcase | replace: ':', '' | replace: ' ', '_' %}
63
+ .<<tab-P-{{ package_name }}-E-{{ enum_name }}>> -- Elements of {{ package.name }}::{{ enum.name }}
64
+
65
+ {% endfor %}
66
+ {% for data_type in package.data_types %}
67
+ {% assign is_data_type_spare = data_type.name | slice: 0,5 %}
68
+ {% if is_data_type_spare == 'old: ' %}{% continue %}
69
+ {% elsif is_data_type_spare == 'Spare' %}{% continue %}
70
+ {% endif %}
71
+ {% assign data_type_name = data_type.name | downcase | replace: ':', '' | replace: ' ', '_' %}
72
+ .<<tab-P-{{ package_name }}-DT-{{ data_type_name }}>> -- Elements of {{ package.name }}::{{ data_type.name }}
73
+
74
+ {% endfor %}
75
+
76
+ {% for klass in package.classes %}
77
+ {% include "packages_class" %}
78
+ {% endfor %}
79
+
80
+ {% for klass in package.enums %}
81
+ {% include "packages_enum" %}
82
+ {% endfor %}
83
+
84
+ {% for klass in package.data_types %}
85
+ {% include "packages_data_type" %}
86
+ {% endfor %}
87
+
88
+ {% endif %}
89
+
90
+ {% if additional_context.include_block and additional_context.include_block.size > 0 %}
91
+ {% for block in additional_context.include_block %}
92
+ {% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
93
+ {% capture block_content %}{% include block_filename %}{% endcapture %}
94
+ {% unless block_content contains "Liquid error" %}
95
+ {% if block.text %}
96
+ {{ block.text }}
97
+ {% endif %}
98
+ {{ block_content }}
99
+ {% endunless %}
100
+ {% endfor %}
101
+ {% endif %}
102
+
103
+ {% assign include_block_package_key = 'include_block;' | append: package.name %}
104
+ {% if additional_context[include_block_package_key] and additional_context[include_block_package_key].size > 0 %}
105
+ {% for block in additional_context[include_block_package_key] %}
106
+ {% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
107
+ {% capture block_content %}{% include block_filename %}{% endcapture %}
108
+ {% unless block_content contains "Liquid error" %}
109
+ {% if block.text %}
110
+ {{ block.text }}
111
+ {% endif %}
112
+ {{ block_content }}
113
+ {% endunless %}
114
+ {% endfor %}
115
+ {% endif %}
116
+
117
+ {% assign after_package_key = 'after;' | append: package.name %}
118
+ {% if additional_context[after_package_key] %}
119
+ {{equalsigns}}= Additional Information
120
+ {% for after in additional_context[after_package_key] %}
121
+ {{ after.text }}
122
+ {% endfor %}
123
+ {% endif %}
124
+ {% if package.packages.size > 0 and render_nested_packages %}
125
+ {% assign nested_depth = depth | plus: 1 %}{% include "packages", depth: nested_depth, context: package %}
126
+ {% endif %}
127
+ {% endfor %}
128
+
129
+ {% if additional_context.after and additional_context.after.size > 0 %}
130
+ {% for after in additional_context.after %}
131
+ {{ after.text }}
132
+ {% endfor %}
133
+ {% endif %}
@@ -0,0 +1,81 @@
1
+ {% assign is_klass_spare = klass.name | slice: 0,5 %}
2
+ {% if is_klass_spare == 'old: ' %}{% continue %}
3
+ {% elsif is_klass_spare == 'Spare' %}{% continue %}
4
+ {% endif %}
5
+ {% assign klass_name = klass.name | downcase | replace: ':', '' | replace: ' ', '_' %}
6
+ [[tab-P-{{ package_name }}-C-{{ klass_name }}]]
7
+ .Elements of {{ package.name }}::{{ klass.name }}
8
+ [width="100%",cols="a,a,a,a,a,a,a,a"]
9
+ |===
10
+
11
+ h|Name: 7+| {{ klass.name }}
12
+
13
+ h|Definition: 7+| {{ klass.definition | html2adoc }}
14
+
15
+ h|Stereotype: 7+| {{ klass.stereotype | default: 'interface' }}
16
+
17
+ {% assign inherited = klass.associations | where: "member_end_type", "inheritance" %}
18
+ {% if inherited.size > 0 %}
19
+ h|Inheritance from: 7+| {{ inherited | map: 'member_end' | join: ", " }}
20
+ {% endif %}
21
+
22
+ {% assign generalizations = klass.associations | where: "member_end_type", "generalization" %}
23
+ {% if generalizations.size > 0 %}
24
+ h|Generalization of: 7+| {{ generalizations | map: 'member_end' | join: ", " }}
25
+ {% endif %}
26
+
27
+ h|Abstract: 7+| {{ klass.is_abstract }}
28
+ {% assign aggregations = klass.associations | where: "member_end_type", "aggregation" %}
29
+ {% if aggregations.size > 0 %}
30
+ .{{aggregations.size | plus: 1}}+h|Associations:
31
+ 4+|_Association with:_
32
+ |_Obligation_
33
+ | _Maximum occurrence_
34
+ |_Provides:_
35
+
36
+ {% for assoc in aggregations %}
37
+ 4+| {{assoc.member_end}}
38
+ | {% if assoc.member_end_cardinality %}{{ assoc.member_end_cardinality.min }}{% endif %}
39
+ | {% if assoc.member_end_cardinality %}{{ assoc.member_end_cardinality.max }}{% endif %}
40
+ | {{ assoc.member_end_attribute_name }}
41
+
42
+ {% endfor %}
43
+ {% else %}
44
+
45
+ .1+h|Associations: 7+| (none)
46
+ {% endif %}
47
+ {% if klass.attributes.size > 0 %}
48
+ .{{klass.attributes.size | plus: 1}}+h|Public attributes:
49
+ | _Name_
50
+ 2+| _Definition_
51
+ | _Derived_
52
+ | _Obligation_
53
+ | _Maximum occurrence_
54
+ | _Data type_
55
+
56
+ {% for attr in klass.attributes %}
57
+ | {{attr.name}}
58
+ 2+| {{ attr.definition | html2adoc }}
59
+ | {{ attr.is_derived }}
60
+ | {{attr.cardinality.min}}
61
+ | {{attr.cardinality.max}}
62
+ | {{attr.type}}
63
+
64
+ {% endfor %}
65
+ {% else %}
66
+ .1+h|Public attributes:
67
+ 7+| (none)
68
+ {% endif %}
69
+
70
+ {% if klass.constraints.size > 0 %}
71
+ .{{ klass.constraints.size }}+|*Constraints:*
72
+ {% for constr in klass.constraints %}
73
+ 7+| `{{ constr.body }}`
74
+
75
+ {% endfor %}
76
+ {% else %}
77
+
78
+ h|Constraints: 7+| (none)
79
+ {% endif %}
80
+
81
+ |===
@@ -0,0 +1,177 @@
1
+ {% for package in context.packages %}
2
+ {% assign package_name = package.name | downcase | replace: ":", "" | replace: " ", "_" %}
3
+ {% if additional_context.before and additional_context.before.size > 0 %}
4
+ {% for before in additional_context.before %}
5
+ {{ before.text }}
6
+ {% endfor %}
7
+ {% endif %}
8
+ {% capture equalsigns %}{% for count in (1..depth) %}={% endfor %}{% endcapture %}{{equalsigns}} {{ package.name }}
9
+ {{equalsigns}}= {{ package.name }}
10
+
11
+ {% assign before_package_key = 'before;' | append: package.name %}
12
+ {% if additional_context[before_package_key] and additional_context[before_package_key].size > 0 %}
13
+ {% for before in additional_context[before_package_key] %}
14
+ {{ before.text }}
15
+ {% endfor %}
16
+ {% endif %}
17
+
18
+ [cols="1a,4a"]
19
+ |===
20
+
21
+ h|Description: | {{ package.definition }}
22
+ h|Parent Package: | {{ context.name }}
23
+ h|Stereotype: | «{{ package.stereotype }}»
24
+
25
+ |===
26
+
27
+ {% assign feature_types = package.classes | where: "stereotype", "FeatureType" %}
28
+ {% assign object_types = package.classes | where: "stereotype", "ObjectType" %}
29
+ {% assign basic_types = package.classes | where: "stereotype", "BasicType" %}
30
+ {% assign unions = package.classes | where: "stereotype", "Union" %}
31
+ {% assign code_lists = package.classes | where: "stereotype", "CodeList" %}
32
+ {% if feature_types.size > 0 or object_types.size > 0 %}
33
+ {{equalsigns}}= Classes
34
+
35
+ {% include "packages_data_dictionary_classes", classes: feature_types %}
36
+ {% include "packages_data_dictionary_classes", classes: object_types %}
37
+ {% endif %}
38
+
39
+ {% if basic_types.size > 0 %}
40
+ {{equalsigns}}= Basic Types
41
+
42
+ {% include "packages_data_dictionary_classes", classes: basic_types %}
43
+ {% endif %}
44
+
45
+ {% if unions.size > 0 %}
46
+ {{equalsigns}}= Unions
47
+
48
+ {% include "packages_data_dictionary_classes", classes: unions %}
49
+ {% endif %}
50
+
51
+ {% if code_lists.size > 0 %}
52
+ {{equalsigns}}= Code Lists
53
+
54
+ {% include "packages_data_dictionary_classes", classes: code_lists %}
55
+ {% endif %}
56
+
57
+ {% if package.data_types.size > 0 %}
58
+ {{equalsigns}}= Data Types
59
+
60
+ {% for data_type in package.data_types %}
61
+ {% capture generalizations %}{% for assoc in data_type.associations | where: "member_end_type", "generalization" %}{{ assoc.member_end }} {% endfor %}{% endcapture %}
62
+ [[{{ data_type.name }}-section]]
63
+ [cols="1a"]
64
+ |===
65
+ |*{{ data_type.name }}*
66
+ |[cols="1,4",frame=none,grid=none]
67
+ !===
68
+ !{nbsp}{nbsp}{nbsp}{nbsp}Definition: ! {{ data_type.definition }}
69
+ !{nbsp}{nbsp}{nbsp}{nbsp}Subclass of: ! {{ generalizations }}
70
+ !{nbsp}{nbsp}{nbsp}{nbsp}Stereotype: ! «DataType»
71
+ !===
72
+ {% if data_type.associations.size > 0 %}
73
+ {% capture rendered_associations %}
74
+ {% for assoc in data_type.associations %}
75
+ {% if assoc.member_end_attribute_name.size > 0 %}
76
+ {% capture cardinality %}{% if assoc.member_end_cardinality.min == 'C' %}[0..{{ assoc.member_end_cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ assoc.member_end_cardinality.max }}]{% endif %}{% endcapture %}
77
+ !{set:cellbgcolor:#FFFFFF} {{ assoc.member_end_attribute_name }} !<<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }} ! {{ assoc.definition }}
78
+ {% endif %}
79
+ {% endfor %}
80
+ {% endcapture %}
81
+ {% if rendered_associations.size > 0 %}
82
+ |[cols="15,20,60",frame=none,grid=none,options="header"]
83
+ !===
84
+ !{set:cellbgcolor:#DDDDDD} *Role name* !*Target class and multiplicity* !*Definition*
85
+ {{ rendered_associations }}
86
+ !===
87
+ {% endif %}
88
+ {% endif %}
89
+ {% if data_type.attributes.size > 0 %}
90
+ |[cols="15,20,60",frame=none,grid=none,options="header"]
91
+ !===
92
+ !{set:cellbgcolor:#DDDDDD} *Attribute* !*Value type and multiplicity* !*Definition*
93
+ {% for attr in data_type.attributes %}
94
+ {% capture cardinality %}{% if attr.cardinality.min == 'C' %}[0..{{ attr.cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ attr.cardinality.max }}]{% endif %}{% endcapture %}
95
+ !{set:cellbgcolor:#FFFFFF} {{ attr.name }} !<<{{ attr.type }}-section,{{ attr.name }}>> {{ cardinality }} !{{ attr.definition }}
96
+ {% endfor %}
97
+ !===
98
+ |{set:cellbgcolor:#FFFFFF} Note: Unless otherwise specified, all attributes and role names have the stereotype «Property».
99
+ {% endif %}
100
+ |===
101
+
102
+ {% endfor %}
103
+ {% endif %}
104
+
105
+ {% if package.enums.size > 0 %}
106
+ {{equalsigns}}= Enumerations
107
+
108
+ {% for enum in package.enums %}
109
+ {% capture generalizations %}{% for assoc in enum.associations | where: "member_end_type", "generalization" %}{{ assoc.member_end }} {% endfor %}{% endcapture %}
110
+ [[{{ enum.name }}-section]]
111
+ [cols="1a"]
112
+ |===
113
+ |*{{ enum.name }}*
114
+ |[cols="1,4",frame=none,grid=none]
115
+ !===
116
+ !{nbsp}{nbsp}{nbsp}{nbsp}Definition: ! {{ enum.definition }}
117
+ !{nbsp}{nbsp}{nbsp}{nbsp}Stereotype: ! «Enumeration»
118
+ !===
119
+ {% if enum.values.size > 0 %}
120
+ |[cols="1,4",frame=none,grid=none,options="header"]
121
+ !===
122
+ ^!{set:cellbgcolor:#DDDDDD} *Literal value* !*Definition*
123
+
124
+ {% for val in enum.values %}
125
+ ^!{set:cellbgcolor:#FFFFFF} {{ val.name }} !{{ val.definition }}
126
+ {% endfor %}
127
+ !===
128
+ {% endif %}
129
+ |===
130
+
131
+ {% endfor %}
132
+ {% endif %}
133
+
134
+ {% if additional_context.include_block and additional_context.include_block.size > 0 %}
135
+ {% for block in additional_context.include_block %}
136
+ {% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
137
+ {% capture block_content %}{% include block_filename %}{% endcapture %}
138
+ {% unless block_content contains "Liquid error" %}
139
+ {% if block.text %}
140
+ {{ block.text }}
141
+ {% endif %}
142
+ {{ block_content }}
143
+ {% endunless %}
144
+ {% endfor %}
145
+ {% endif %}
146
+
147
+ {% assign include_block_package_key = 'include_block;' | append: package.name %}
148
+ {% if additional_context[include_block_package_key] and additional_context[include_block_package_key].size > 0 %}
149
+ {% for block in additional_context[include_block_package_key] %}
150
+ {% capture block_filename %}{{ block.base_path }}{{ package_name }}{% endcapture %}
151
+ {% capture block_content %}{% include block_filename %}{% endcapture %}
152
+ {% unless block_content contains "Liquid error" %}
153
+ {% if block.text %}
154
+ {{ block.text }}
155
+ {% endif %}
156
+ {{ block_content }}
157
+ {% endunless %}
158
+ {% endfor %}
159
+ {% endif %}
160
+
161
+ {% assign after_package_key = 'after;' | append: package.name %}
162
+ {% if additional_context[after_package_key] %}
163
+ {{equalsigns}}= Additional Information
164
+ {% for after in additional_context[after_package_key] %}
165
+ {{ after.text }}
166
+ {% endfor %}
167
+ {% endif %}
168
+ {% if package.packages.size > 0 and render_nested_packages %}
169
+ {% assign nested_depth = depth | plus: 1 %}{% include "packages_data_dictionary", depth: nested_depth, context: package %}
170
+ {% endif %}
171
+ {% endfor %}
172
+
173
+ {% if additional_context.after and additional_context.after.size > 0 %}
174
+ {% for after in additional_context.after %}
175
+ {{ after.text }}
176
+ {% endfor %}
177
+ {% endif %}
@@ -0,0 +1,43 @@
1
+ {% for klass in classes %}
2
+ {% capture generalizations %}{% for assoc in klass.associations | where: "member_end_type", "generalization" %}{{ assoc.member_end }} {% endfor %}{% endcapture %}
3
+ [[{{ klass.name }}-section]]
4
+ [cols="1a"]
5
+ |===
6
+ |*{{ klass.name }}*
7
+ |[cols="1,4",frame=none,grid=none]
8
+ !===
9
+ !{nbsp}{nbsp}{nbsp}{nbsp}Definition: ! {{ klass.definition }}
10
+ !{nbsp}{nbsp}{nbsp}{nbsp}Subclass of: ! {{ generalizations }}
11
+ !{nbsp}{nbsp}{nbsp}{nbsp}Stereotype: ! «{{ klass.stereotype }}»
12
+ !===
13
+ {% if klass.associations.size > 0 %}
14
+ {% capture rendered_associations %}
15
+ {% for assoc in klass.associations %}
16
+ {% if assoc.member_end_attribute_name.size > 0 %}
17
+ {% capture cardinality %}{% if assoc.member_end_cardinality.min == 'C' %}[0..{{ assoc.member_end_cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ assoc.member_end_cardinality.max }}]{% endif %}{% endcapture %}
18
+ !{set:cellbgcolor:#FFFFFF} {{ assoc.member_end_attribute_name }} !<<{{assoc.member_end}}-section,{{assoc.member_end}}>> {{ cardinality }} ! {{ assoc.definition }}
19
+ {% endif %}
20
+ {% endfor %}
21
+ {% endcapture %}
22
+ {% if rendered_associations.size > 0 %}
23
+ |[cols="15,20,60",frame=none,grid=none,options="header"]
24
+ !===
25
+ !{set:cellbgcolor:#DDDDDD} *Role name* !*Target class and multiplicity* !*Definition*
26
+ {{ rendered_associations }}
27
+ !===
28
+ {% endif %}
29
+ {% endif %}
30
+ {% if klass.attributes.size > 0 %}
31
+ |[cols="15,20,60",frame=none,grid=none,options="header"]
32
+ !===
33
+ !{set:cellbgcolor:#DDDDDD} *Attribute* !*Value type and multiplicity* !*Definition*
34
+ {% for attr in klass.attributes %}
35
+ {% capture cardinality %}{% if attr.cardinality.min == 'C' %}[0..{{ attr.cardinality.max }}]{% elsif assoc.member_end_cardinality.min == 'M' and assoc.member_end_cardinality.max == '1' %}[1..1]{% else %}[{{ attr.cardinality.max }}]{% endif %}{% endcapture %}
36
+ !{set:cellbgcolor:#FFFFFF} {{ attr.name }} !<<{{ attr.type }}-section,{{ attr.name }}>> {{ cardinality }} !{{ attr.definition }}
37
+ {% endfor %}
38
+ !===
39
+ |{set:cellbgcolor:#FFFFFF} Note: Unless otherwise specified, all attributes and role names have the stereotype «Property».
40
+ {% endif %}
41
+ |===
42
+
43
+ {% endfor %}
@@ -0,0 +1,63 @@
1
+ {% assign is_klass_spare = klass.name | slice: 0,5 %}
2
+ {% if is_klass_spare == 'old: ' %}{% continue %}
3
+ {% elsif is_klass_spare == 'Spare' %}{% continue %}
4
+ {% endif %}
5
+ {% assign klass_name = klass.name | downcase | replace: ':', '' | replace: ' ', '_' %}
6
+ [[tab-P-{{ package_name }}-DT-{{ klass_name }}]]
7
+ .Elements of {{ package.name }}::{{ klass.name }}
8
+ [width="100%",cols="a,a,a,a,a,a,a,a"]
9
+ |===
10
+
11
+ h|Name: 7+| {{ klass.name }}
12
+
13
+ h|Definition: 7+| {{ klass.definition | html2adoc }}
14
+
15
+ h|Stereotype: 7+| {{ klass.stereotype | default: 'interface' }}
16
+
17
+ {% assign inherited = klass.associations | where: "member_end_type", "inheritance" %}
18
+ {% if inherited.size > 0 %}
19
+ h|Inheritance from: 7+| {{ inherited | map: 'member_end' | join: ", " }}
20
+ {% endif %}
21
+
22
+ {% assign generalizations = klass.associations | where: "member_end_type", "generalization" %}
23
+ {% if generalizations.size > 0 %}
24
+ h|Generalization of: 7+| {{ generalizations | map: 'member_end' | join: ", " }}
25
+ {% endif %}
26
+
27
+ h|Abstract: 7+| {{ klass.is_abstract }}
28
+ {% assign aggregations = klass.associations | where: "member_end_type", "aggregation" %}
29
+ {% if aggregations.size > 0 %}
30
+ .{{aggregations.size | plus: 1}}+h|Associations:
31
+ 4+|_Association with:_
32
+ |_Obligation_
33
+ | _Maximum occurrence_
34
+ |_Provides:_
35
+
36
+ {% for assoc in aggregations %}
37
+ 4+| {{assoc.member_end}}
38
+ | {% if assoc.member_end_cardinality %}{{ assoc.member_end_cardinality.min }}{% endif %}
39
+ | {% if assoc.member_end_cardinality %}{{ assoc.member_end_cardinality.max }}{% endif %}
40
+ | {{ assoc.member_end_attribute_name }}
41
+
42
+ {% endfor %}
43
+ {% else %}
44
+
45
+ .1+h|Associations: 7+| (none)
46
+ {% endif %}
47
+
48
+ {% if klass.attributes.size > 0 %}
49
+ .{{klass.attributes.size | plus: 1}}+h|Values:
50
+ | _Name_
51
+ 6+| _Definition_
52
+
53
+ {% for value in klass.attributes %}
54
+ | {{value.name}}
55
+ 6+| {{ value.definition | html2adoc }}
56
+
57
+ {% endfor %}
58
+ {% else %}
59
+ .1+h|Values:
60
+ 7+| (none)
61
+ {% endif %}
62
+
63
+ |===