nora_mark 0.2beta3 → 0.2beta4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +5 -0
  3. data/Gemfile +2 -0
  4. data/README.md +17 -12
  5. data/example/nora-simple.css +52 -0
  6. data/example/noramark-reference-ja.nora +246 -0
  7. data/example/noramark-reference-ja_00001.xhtml +187 -0
  8. data/lib/nora_mark/html/{abstract_item_writer.rb → abstract_node_writer.rb} +3 -3
  9. data/lib/nora_mark/html/context.rb +3 -21
  10. data/lib/nora_mark/html/frontmatter_writer.rb +33 -0
  11. data/lib/nora_mark/html/generator.rb +122 -100
  12. data/lib/nora_mark/html/pages.rb +3 -9
  13. data/lib/nora_mark/html/paragraph_writer.rb +27 -23
  14. data/lib/nora_mark/html/tag_writer.rb +33 -34
  15. data/lib/nora_mark/html/writer_selector.rb +3 -3
  16. data/lib/nora_mark/node.rb +31 -0
  17. data/lib/nora_mark/parser.kpeg +133 -79
  18. data/lib/nora_mark/parser.kpeg.rb +1822 -1526
  19. data/lib/nora_mark/parser.rb +4 -23
  20. data/lib/nora_mark/version.rb +1 -1
  21. data/lib/nora_mark.rb +7 -2
  22. data/nora_mark.gemspec +1 -0
  23. data/spec/epub30-schemas/epub-nav-30.nvdl +16 -0
  24. data/spec/epub30-schemas/epub-nav-30.rnc +10 -0
  25. data/spec/epub30-schemas/epub-nav-30.sch +72 -0
  26. data/spec/epub30-schemas/epub-svg-30.nvdl +15 -0
  27. data/spec/epub30-schemas/epub-svg-30.rnc +15 -0
  28. data/spec/epub30-schemas/epub-svg-30.sch +10 -0
  29. data/spec/epub30-schemas/epub-xhtml-30.nvdl +15 -0
  30. data/spec/epub30-schemas/epub-xhtml-30.rnc +37 -0
  31. data/spec/epub30-schemas/epub-xhtml-30.sch +377 -0
  32. data/spec/epub30-schemas/epub30-catalog.xml +335 -0
  33. data/spec/epub30-schemas/media-overlay-30.nvdl +14 -0
  34. data/spec/epub30-schemas/media-overlay-30.rnc +46 -0
  35. data/spec/epub30-schemas/media-overlay-30.sch +9 -0
  36. data/spec/epub30-schemas/mod/datatypes.rnc +143 -0
  37. data/spec/epub30-schemas/mod/epub-mathml3-30.rnc +74 -0
  38. data/spec/epub30-schemas/mod/epub-prefix-attr.rnc +8 -0
  39. data/spec/epub30-schemas/mod/epub-ssml-attrs.rnc +11 -0
  40. data/spec/epub30-schemas/mod/epub-svg11-30.rnc +12 -0
  41. data/spec/epub30-schemas/mod/epub-svg11-re.sch +7 -0
  42. data/spec/epub30-schemas/mod/epub-switch.rnc +32 -0
  43. data/spec/epub30-schemas/mod/epub-trigger.rnc +17 -0
  44. data/spec/epub30-schemas/mod/epub-type-attr.rnc +7 -0
  45. data/spec/epub30-schemas/mod/epub-xhtml-mathml3-30.rnc +5 -0
  46. data/spec/epub30-schemas/mod/epub-xhtml-svg11-30.rnc +6 -0
  47. data/spec/epub30-schemas/mod/html5/LICENSE +23 -0
  48. data/spec/epub30-schemas/mod/html5/README +21 -0
  49. data/spec/epub30-schemas/mod/html5/html5-aria-30.rnc +105 -0
  50. data/spec/epub30-schemas/mod/html5/html5-attrib-30.rnc +44 -0
  51. data/spec/epub30-schemas/mod/html5/html5-document-30.rnc +44 -0
  52. data/spec/epub30-schemas/mod/html5/html5-edit-30.rnc +24 -0
  53. data/spec/epub30-schemas/mod/html5/html5-embed-30.rnc +155 -0
  54. data/spec/epub30-schemas/mod/html5/html5-forms-30.rnc +431 -0
  55. data/spec/epub30-schemas/mod/html5/html5-grouping-30.rnc +115 -0
  56. data/spec/epub30-schemas/mod/html5/html5-interactive-30.rnc +86 -0
  57. data/spec/epub30-schemas/mod/html5/html5-models-30.rnc +10 -0
  58. data/spec/epub30-schemas/mod/html5/html5-phrasing-30.rnc +134 -0
  59. data/spec/epub30-schemas/mod/html5/html5-script-30.rnc +164 -0
  60. data/spec/epub30-schemas/mod/html5/html5-sections-30.rnc +58 -0
  61. data/spec/epub30-schemas/mod/html5/html5-style-30.rnc +18 -0
  62. data/spec/epub30-schemas/mod/id-unique.sch +10 -0
  63. data/spec/epub30-schemas/mod/mathml/LICENSE +3 -0
  64. data/spec/epub30-schemas/mod/mathml/mathml3-common.rnc +84 -0
  65. data/spec/epub30-schemas/mod/mathml/mathml3-content.rnc +373 -0
  66. data/spec/epub30-schemas/mod/mathml/mathml3-presentation.rnc +536 -0
  67. data/spec/epub30-schemas/mod/mathml/mathml3-strict-content.rnc +60 -0
  68. data/spec/epub30-schemas/mod/security/LICENSE +4 -0
  69. data/spec/epub30-schemas/mod/security/Lenient-Encryption11-ghc.rnc +41 -0
  70. data/spec/epub30-schemas/mod/security/Lenient-Encryption11.rnc +39 -0
  71. data/spec/epub30-schemas/mod/security/Lenient-Signature-exclusiveC14N.rnc +25 -0
  72. data/spec/epub30-schemas/mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc +32 -0
  73. data/spec/epub30-schemas/mod/security/Lenient-Signature11-properties.rnc +30 -0
  74. data/spec/epub30-schemas/mod/security/Lenient-Signature11.rnc +28 -0
  75. data/spec/epub30-schemas/mod/security/Strict-Encryption.rnc +27 -0
  76. data/spec/epub30-schemas/mod/security/Strict-Signature.rnc +22 -0
  77. data/spec/epub30-schemas/mod/security/exc-c14n.rnc +39 -0
  78. data/spec/epub30-schemas/mod/security/security_any.rnc +15 -0
  79. data/spec/epub30-schemas/mod/security/xenc-allowAnyForeign.rnc +25 -0
  80. data/spec/epub30-schemas/mod/security/xenc-schema-11.rnc +96 -0
  81. data/spec/epub30-schemas/mod/security/xenc-schema.rnc +145 -0
  82. data/spec/epub30-schemas/mod/security/xenc11-allowAnyForeign.rnc +19 -0
  83. data/spec/epub30-schemas/mod/security/xmldsig-allowAnyForeign.rnc +47 -0
  84. data/spec/epub30-schemas/mod/security/xmldsig-core-schema.rnc +276 -0
  85. data/spec/epub30-schemas/mod/security/xmldsig-filter2.rnc +16 -0
  86. data/spec/epub30-schemas/mod/security/xmldsig-properties-schema.rnc +34 -0
  87. data/spec/epub30-schemas/mod/security/xmldsig11-allowAnyForeign.rnc +18 -0
  88. data/spec/epub30-schemas/mod/security/xmldsig11-schema.rnc +133 -0
  89. data/spec/epub30-schemas/mod/security/xmlsec-ghc-allowAnyForeign.rnc +21 -0
  90. data/spec/epub30-schemas/mod/security/xmlsec-ghc-schema.rnc +42 -0
  91. data/spec/epub30-schemas/mod/svg11/LICENSE +1 -0
  92. data/spec/epub30-schemas/mod/svg11/README.txt +8 -0
  93. data/spec/epub30-schemas/mod/svg11/svg11-flat.rnc +3999 -0
  94. data/spec/epub30-schemas/ocf-container-30.rnc +16 -0
  95. data/spec/epub30-schemas/ocf-encryption-30.rnc +12 -0
  96. data/spec/epub30-schemas/ocf-signatures-30.rnc +8 -0
  97. data/spec/epub30-schemas/package-30.nvdl +14 -0
  98. data/spec/epub30-schemas/package-30.rnc +91 -0
  99. data/spec/epub30-schemas/package-30.sch +137 -0
  100. data/spec/jing-20091111/bin/jing.jar +0 -0
  101. data/spec/nora_mark_spec.rb +229 -68
  102. data/spec/spec_helper.rb +16 -0
  103. metadata +179 -6
  104. data/lib/nora_mark/html/header_writer.rb +0 -35
  105. data/spec/fixture/test_src_ja.nora +0 -50
@@ -0,0 +1,431 @@
1
+
2
+
3
+
4
+ html5.flow.class |= html5.forms.flow.class
5
+ html5.phrasing.class |= html5.forms.phrasing.class
6
+
7
+ html5.forms.flow.class |= html5.form | html5.fieldset
8
+ html5.forms.phrasing.class |= html5.meter | html5.input.class | html5.textarea
9
+ | html5.label | html5.button.class | html5.select | html5.output | html5.datalist
10
+ | html5.keygen
11
+
12
+ html5.input.class |= html5.input.text | html5.input.password | html5.input.checkbox
13
+ | html5.input.radio | html5.input.button | html5.input.submit | html5.input.reset
14
+ | html5.input.file | html5.input.hidden | html5.input.image | html5.input.datetime
15
+ | html5.input.datetime-local | html5.input.date | html5.input.month | html5.input.time
16
+ | html5.input.week | html5.input.number | html5.input.range | html5.input.email
17
+ | html5.input.url | html5.input.search | html5.input.tel | html5.input.color
18
+
19
+ html5.button.class |= html5.button.submit | html5.button.reset | html5.button.button
20
+
21
+
22
+
23
+
24
+ html5.form = element form { html5.form.attlist & html5.form.content }
25
+ html5.form.attlist &= html5.global.attrs & html5.form.action.attr?
26
+ & html5.form.method.attr? & html5.form.enctype.attr?
27
+ & html5.forms.name.attr? & html5.form.accept-charset.attr?
28
+ & html5.form.novalidate.attr? & html5.form.target.attr?
29
+ & html5.form.autocomplete.attr?
30
+ html5.form.action.attr = attribute action { datatype.html5.URL.spaces }
31
+ html5.form.method.attr = attribute method { html5.form.method.attr.value }
32
+ html5.form.method.attr.value = ( 'get' | 'post' )
33
+ html5.form.enctype.attr = attribute enctype { html5.form.enctype.attr.value }
34
+ html5.form.enctype.attr.value = ( 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/plain' )
35
+ html5.form.accept-charset.attr = attribute accept-charset { datatype.html5.forms.charsetlist}
36
+ html5.form.novalidate.attr = attribute novalidate { 'novalidate' | '' }
37
+ html5.form.target.attr = attribute target { datatype.html5.browsing.context.name.or.keyword }
38
+ html5.form.autocomplete.attr = attribute autocomplete { 'on' | 'off' }
39
+ html5.form.content = html5.flow.model
40
+
41
+
42
+ html5.input.text = element input { html5.input.text.attlist }
43
+ html5.input.text.attlist = html5.global.attrs & html5.forms.common.attrs
44
+ & attribute type { 'text' }? & html5.forms.maxlength.attr?
45
+ & html5.forms.readonly.attr? & html5.forms.size.attr?
46
+ & html5.input.text.value.attr? & html5.input.autocomplete.attr?
47
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
48
+ & html5.forms.pattern.attr? & html5.forms.required.attr?
49
+ & html5.forms.placeholder.attr? & html5.input.common.attrs
50
+ html5.input.text.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks }
51
+
52
+
53
+ html5.input.password = element input { html5.input.password.attlist }
54
+ html5.input.password.attlist = html5.global.attrs & html5.forms.common.attrs
55
+ & attribute type { 'password' } & html5.forms.maxlength.attr?
56
+ & html5.forms.readonly.attr? & html5.forms.size.attr?
57
+ & html5.input.password.value.attr? & html5.input.autocomplete.attr?
58
+ & html5.forms.autofocus.attr? & html5.forms.pattern.attr?
59
+ & html5.forms.required.attr? & html5.forms.placeholder.attr?
60
+ & html5.input.common.attrs
61
+ html5.input.password.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks }
62
+
63
+
64
+ html5.input.checkbox = element input { html5.input.checkbox.attlist }
65
+ html5.input.checkbox.attlist = html5.global.attrs & html5.forms.common.attrs
66
+ & attribute type { 'checkbox' } & html5.input.checked.attr?
67
+ & html5.input.checkbox.value.attr? & html5.forms.autofocus.attr?
68
+ & html5.forms.required.attr? & html5.input.common.attrs
69
+ html5.input.checkbox.value.attr = attribute value { datatype.string }
70
+
71
+
72
+ html5.input.radio = element input { html5.input.radio.attlist }
73
+ html5.input.radio.attlist = html5.global.attrs & html5.forms.common.attrs
74
+ & attribute type { 'radio' } & html5.input.checked.attr?
75
+ & html5.input.radio.value.attr? & html5.forms.autofocus.attr?
76
+ & html5.forms.required.attr? & html5.input.common.attrs
77
+ html5.input.radio.value.attr = attribute value { datatype.string }
78
+
79
+
80
+ html5.input.button = element input { html5.input.button.attlist }
81
+ html5.input.button.attlist = html5.global.attrs & html5.forms.common.attrs
82
+ & attribute type { 'button' } & html5.input.button.value.attr?
83
+ & html5.forms.autofocus.attr? & html5.input.common.attrs
84
+ html5.input.button.value.attr = attribute value { datatype.string }
85
+
86
+
87
+ html5.input.submit = element input { html5.input.submit.attlist }
88
+ html5.input.submit.attlist = html5.global.attrs & html5.forms.common.attrs
89
+ & attribute type { 'submit' } & html5.input.submit.value.attr?
90
+ & html5.forms.formaction.attr? & html5.forms.autofocus.attr?
91
+ & html5.forms.formenctype.attr? & html5.forms.formmethod.attr?
92
+ & html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr?
93
+ & html5.input.common.attrs
94
+ html5.input.submit.value.attr = attribute value { datatype.string }
95
+
96
+
97
+ html5.input.reset = element input { html5.input.reset.attlist }
98
+ html5.input.reset.attlist = html5.global.attrs & html5.forms.common.attrs
99
+ & attribute type { 'reset' } & html5.input.reset.value.attr?
100
+ & html5.forms.autofocus.attr? & html5.input.common.attrs
101
+ html5.input.reset.value.attr = attribute value { datatype.string }
102
+
103
+
104
+ html5.input.file = element input { html5.input.file.attlist }
105
+ html5.input.file.attlist = html5.global.attrs & html5.forms.common.attrs
106
+ & attribute type { 'file'} & html5.input.file.accept.attr?
107
+ & html5.forms.autofocus.attr? & html5.forms.required.attr?
108
+ & html5.input.multiple.attr? & html5.input.common.attrs
109
+ html5.input.file.accept.attr = attribute accept { datatype.html5.forms.mimetypelist }
110
+
111
+
112
+ html5.input.hidden = element input { html5.input.hidden.attlist }
113
+ html5.input.hidden.attlist = html5.global.attrs & html5.forms.common.attrs
114
+ & attribute type { 'hidden' } & html5.input.hidden.value.attr?
115
+ & html5.input.common.attrs
116
+ html5.input.hidden.value.attr = attribute value { datatype.string }
117
+
118
+
119
+ html5.input.image = element input { html5.input.image.attlist }
120
+ html5.input.image.attlist = html5.global.attrs & html5.forms.common.attrs
121
+ & attribute type { 'image' } & html5.alt.attr & html5.src.attr
122
+ & html5.forms.formaction.attr? & html5.forms.autofocus.attr?
123
+ & html5.forms.formenctype.attr? & html5.forms.formmethod.attr?
124
+ & html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr?
125
+ & html5.dimension.attrs? & html5.input.common.attrs
126
+
127
+
128
+
129
+ html5.input.datetime = element input { html5.input.datetime.attlist }
130
+ html5.input.datetime.attlist = html5.global.attrs
131
+ & html5.forms.common.attrs & attribute type { 'datetime'}
132
+ & html5.input.autocomplete.attr? & html5.forms.autofocus.attr?
133
+ & html5.input.list.attr? & html5.input.datetime.min.attr?
134
+ & html5.input.datetime.max.attr? & html5.input.step.float.attr?
135
+ & html5.forms.readonly.attr? & html5.forms.required.attr?
136
+ & html5.input.datetime.value.attr? & html5.input.common.attrs
137
+ html5.input.datetime.min.attr = attribute min { datatype.html5.datetime }
138
+ html5.input.datetime.max.attr = attribute max { datatype.html5.datetime }
139
+ html5.input.datetime.value.attr = attribute value { datatype.html5.datetime }
140
+
141
+
142
+ html5.input.datetime-local = element input { html5.input.datetime-local.attlist }
143
+ html5.input.datetime-local.attlist = html5.global.attrs & html5.forms.common.attrs
144
+ & attribute type { 'datetime-local' } & html5.input.autocomplete.attr?
145
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
146
+ & html5.input.datetime-local.min.attr? & html5.input.datetime-local.max.attr?
147
+ & html5.input.step.float.attr? & html5.forms.readonly.attr?
148
+ & html5.forms.required.attr? & html5.input.datetime-local.value.attr?
149
+ & html5.input.common.attrs
150
+ html5.input.datetime-local.min.attr = attribute min { datatype.html5.datetime.local }
151
+ html5.input.datetime-local.max.attr = attribute max { datatype.html5.datetime.local }
152
+ html5.input.datetime-local.value.attr = attribute value { datatype.html5.datetime.local }
153
+
154
+
155
+ html5.input.date = element input { html5.input.date.attlist }
156
+ html5.input.date.attlist = html5.global.attrs & html5.forms.common.attrs
157
+ & attribute type { 'date' } & html5.input.autocomplete.attr?
158
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
159
+ & html5.input.date.min.attr? & html5.input.date.max.attr?
160
+ & html5.input.step.integer.attr? & html5.forms.readonly.attr?
161
+ & html5.forms.required.attr? & html5.input.date.value.attr?
162
+ & html5.input.common.attrs
163
+ html5.input.date.min.attr = attribute min { datatype.html5.date }
164
+ html5.input.date.max.attr = attribute max { datatype.html5.date }
165
+ html5.input.date.value.attr = attribute value { datatype.html5.date }
166
+
167
+
168
+ html5.input.month = element input { html5.input.month.attlist }
169
+ html5.input.month.attlist = html5.global.attrs & html5.forms.common.attrs
170
+ & attribute type { 'month' } & html5.input.autocomplete.attr?
171
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
172
+ & html5.input.month.min.attr? & html5.input.month.max.attr?
173
+ & html5.input.step.integer.attr? & html5.forms.readonly.attr?
174
+ & html5.forms.required.attr? & html5.input.month.value.attr?
175
+ & html5.input.common.attrs
176
+ html5.input.month.min.attr = attribute min { datatype.html5.month }
177
+ html5.input.month.max.attr = attribute max { datatype.html5.month }
178
+ html5.input.month.value.attr = attribute value { datatype.html5.month }
179
+
180
+
181
+ html5.input.time = element input { html5.input.time.attlist }
182
+ html5.input.time.attlist = html5.global.attrs & html5.forms.common.attrs
183
+ & attribute type { 'time' } & html5.input.autocomplete.attr?
184
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
185
+ & html5.input.time.min.attr? & html5.input.time.max.attr?
186
+ & html5.input.step.float.attr? & html5.forms.readonly.attr?
187
+ & html5.forms.required.attr? & html5.input.time.value.attr?
188
+ & html5.input.common.attrs
189
+ html5.input.time.min.attr = attribute min { datatype.html5.time }
190
+ html5.input.time.max.attr = attribute max { datatype.html5.time }
191
+ html5.input.time.value.attr = attribute value { datatype.html5.time }
192
+
193
+
194
+ html5.input.week = element input { html5.input.week.attlist }
195
+ html5.input.week.attlist = html5.global.attrs & html5.forms.common.attrs
196
+ & attribute type { 'week' } & html5.input.autocomplete.attr?
197
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
198
+ & html5.input.week.min.attr? & html5.input.week.max.attr?
199
+ & html5.input.step.integer.attr? & html5.forms.readonly.attr?
200
+ & html5.forms.required.attr? & html5.input.week.value.attr?
201
+ & html5.input.common.attrs
202
+ html5.input.week.min.attr = attribute min { datatype.html5.week }
203
+ html5.input.week.max.attr = attribute max { datatype.html5.week }
204
+ html5.input.week.value.attr = attribute value { datatype.html5.week }
205
+
206
+
207
+ html5.input.number = element input { input.number.attlist }
208
+ input.number.attlist = html5.global.attrs & html5.forms.common.attrs
209
+ & attribute type { 'number' } & html5.input.autocomplete.attr?
210
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
211
+ & html5.input.number.min.attr? & html5.input.number.max.attr?
212
+ & html5.input.step.float.attr? & html5.forms.readonly.attr?
213
+ & html5.forms.required.attr? & html5.input.number.value.attr?
214
+ & html5.input.common.attrs
215
+ html5.input.number.min.attr = attribute min { datatype.float }
216
+ html5.input.number.max.attr = attribute max { datatype.float }
217
+ html5.input.number.value.attr = attribute value { datatype.float }
218
+
219
+
220
+ html5.input.range = element input { html5.input.range.attlist }
221
+ html5.input.range.attlist = html5.global.attrs & html5.forms.common.attrs
222
+ & attribute type { 'range' } & html5.input.autocomplete.attr?
223
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
224
+ & html5.input.range.min.attr? & html5.input.range.max.attr?
225
+ & html5.input.step.float.attr? & html5.input.range.value.attr?
226
+ & html5.input.common.attrs
227
+ html5.input.range.min.attr = attribute min { datatype.float }
228
+ html5.input.range.max.attr = attribute max { datatype.float }
229
+ html5.input.range.value.attr = attribute value { datatype.float }
230
+
231
+
232
+ html5.input.email = element input { html5.input.email.attlist }
233
+ html5.input.email.attlist = html5.global.attrs & html5.forms.common.attrs
234
+ & attribute type { 'email' } & html5.input.autocomplete.attr?
235
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
236
+ & html5.forms.maxlength.attr? & html5.forms.pattern.attr?
237
+ & html5.forms.readonly.attr? & html5.forms.required.attr?
238
+ & html5.forms.size.attr? & html5.forms.placeholder.attr?
239
+ & ((html5.input.multiple.attr & html5.input.email.value.multiple.attr?)
240
+ | html5.input.email.value.single.attr? )?
241
+ & html5.input.common.attrs
242
+ html5.input.email.value.single.attr = attribute value { datatype.html5.emailaddress }
243
+ html5.input.email.value.multiple.attr = attribute value { datatype.html5.emailaddresslist }
244
+
245
+
246
+ html5.input.url = element input { html5.input.url.attlist }
247
+ html5.input.url.attlist = html5.global.attrs & html5.forms.common.attrs
248
+ & attribute type { 'url' } & html5.input.autocomplete.attr?
249
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
250
+ & html5.forms.maxlength.attr? & html5.forms.pattern.attr?
251
+ & html5.forms.readonly.attr? & html5.forms.required.attr?
252
+ & html5.forms.size.attr? & html5.forms.placeholder.attr?
253
+ & html5.input.url.value.attr? & html5.input.common.attrs
254
+ html5.input.url.value.attr = attribute value { '' | datatype.URI.absolute }
255
+
256
+
257
+ html5.input.search = element input { html5.input.search.attlist }
258
+ html5.input.search.attlist = html5.global.attrs & html5.forms.common.attrs
259
+ & attribute type { 'search' } & html5.input.autocomplete.attr?
260
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
261
+ & html5.forms.maxlength.attr? & html5.forms.pattern.attr?
262
+ & html5.forms.readonly.attr? & html5.forms.required.attr?
263
+ & html5.forms.size.attr? & html5.forms.placeholder.attr?
264
+ & html5.input.search.value.attr? & html5.input.common.attrs
265
+ html5.input.search.value.attr = attribute value { datatype.html5.forms.string.nolinebreaks }
266
+
267
+
268
+ html5.input.tel = element input { html5.input.tel.attlist }
269
+ html5.input.tel.attlist = html5.global.attrs & html5.forms.common.attrs
270
+ & attribute type { 'tel' } & html5.input.autocomplete.attr?
271
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
272
+ & html5.forms.maxlength.attr? & html5.forms.pattern.attr?
273
+ & html5.forms.readonly.attr? & html5.forms.required.attr?
274
+ & html5.forms.size.attr? & html5.forms.placeholder.attr?
275
+ & html5.input.tel.value.attr? & html5.input.common.attrs
276
+ html5.input.tel.value.attr = attribute value { datatype.string }
277
+
278
+
279
+ html5.input.color = element input { html5.input.color.attlist }
280
+ html5.input.color.attlist = html5.global.attrs & html5.forms.common.attrs
281
+ & attribute type { 'color' } & html5.input.autocomplete.attr?
282
+ & html5.forms.autofocus.attr? & html5.input.list.attr?
283
+ & html5.input.color.value.attr? & html5.input.common.attrs
284
+ html5.input.color.value.attr = attribute value { datatype.html5.color }
285
+
286
+
287
+ html5.textarea = element textarea { html5.textarea.attlist & html5.textarea.content }
288
+ html5.textarea.attlist = html5.global.attrs & html5.forms.common.attrs
289
+ & html5.forms.readonly.attr? & html5.forms.maxlength.attr?
290
+ & html5.forms.autofocus.attr? & html5.forms.required.attr?
291
+ & html5.forms.placeholder.attr? & html5.textarea.rows.attr?
292
+ & ((html5.textarea.wrap.hard.attr? & html5.textarea.cols.attr)|
293
+ (html5.textarea.wrap.soft.attr? & html5.textarea.cols.attr?))
294
+ & html5.forms.dirname.attr?
295
+ html5.textarea.cols.attr = attribute cols { datatype.positive.integer }
296
+ html5.textarea.rows.attr = attribute rows { datatype.positive.integer }
297
+ html5.textarea.wrap.hard.attr = attribute wrap { 'hard' }
298
+ html5.textarea.wrap.soft.attr = attribute wrap { 'soft' }
299
+ html5.textarea.content = datatype.text
300
+
301
+
302
+ html5.option = element option { html5.option.attlist & html5.option.content }
303
+ html5.option.attlist = html5.global.attrs & html5.forms.disabled.attr?
304
+ & html5.option.selected.attr? & html5.option.label.attr?
305
+ & html5.option.value.attr?
306
+ html5.option.selected.attr = attribute selected { 'selected' | '' }
307
+ html5.option.label.attr = attribute label { datatype.string }
308
+ html5.option.value.attr = attribute value { datatype.string }
309
+ html5.option.content = datatype.text
310
+
311
+
312
+ html5.optgroup = element optgroup { html5.optgroup.attlist & html5.optgroup.content }
313
+ html5.optgroup.attlist = html5.global.attrs & html5.optgroup.label.attr & html5.forms.disabled.attr?
314
+ html5.optgroup.label.attr = attribute label { datatype.string }
315
+ html5.optgroup.content = html5.option*
316
+
317
+
318
+ html5.select = element select { html5.select.attlist & html5.select.content }
319
+ html5.select.attlist = html5.global.attrs & html5.forms.common.attrs
320
+ & html5.select.size.attr? & html5.select.multiple.attr?
321
+ & html5.forms.autofocus.attr? & html5.forms.required.attr?
322
+ html5.select.size.attr = attribute size { datatype.positive.integer }
323
+ html5.select.multiple.attr = attribute multiple { 'multiple' | '' }
324
+ html5.select.content = html5.optgroup* & html5.option*
325
+
326
+
327
+ html5.button.submit = element button { html5.button.submit.attlist & html5.button.content }
328
+ html5.button.submit.attlist = html5.global.attrs & html5.forms.common.attrs
329
+ & html5.button.submit.type.attr? & html5.button.value.attr?
330
+ & html5.forms.formaction.attr? & html5.forms.autofocus.attr?
331
+ & html5.forms.formenctype.attr? & html5.forms.formmethod.attr?
332
+ & html5.forms.formtarget.attr? & html5.forms.formnovalidate.attr?
333
+ html5.button.submit.type.attr = attribute type { 'submit' }
334
+
335
+
336
+ html5.button.reset = element button { html5.button.reset.attlist & html5.button.content }
337
+ html5.button.reset.attlist = html5.global.attrs & html5.forms.common.attrs
338
+ & html5.button.reset.type.attr & html5.button.value.attr?
339
+ & html5.forms.autofocus.attr?
340
+ html5.button.reset.type.attr = attribute type { 'reset' }
341
+
342
+
343
+ html5.button.button = element button { html5.button.button.attlist & html5.button.content }
344
+ html5.button.button.attlist = html5.global.attrs & html5.forms.common.attrs
345
+ & html5.button.button.type.attr & html5.button.value.attr?
346
+ & html5.forms.autofocus.attr?
347
+ html5.button.button.type.attr = attribute type { 'button' }
348
+
349
+ html5.button.value.attr = attribute value { datatype.string }
350
+ html5.button.content = html5.phrasing.model
351
+
352
+
353
+ html5.fieldset = element fieldset { html5.fieldset.attlist & html5.fieldset.content }
354
+ html5.fieldset.attlist = html5.global.attrs & html5.forms.common.attrs
355
+ html5.fieldset.content = html5.legend?, html5.flow.model
356
+
357
+
358
+ html5.legend = element legend { html5.legend.attlist & html5.legend.content }
359
+ html5.legend.attlist = html5.global.attrs
360
+ html5.legend.content = html5.phrasing.model
361
+
362
+
363
+ html5.label = element label { html5.label.attlist & html5.label.content }
364
+ html5.label.attlist = html5.global.attrs & html5.label.for.attr?
365
+ & html5.forms.form.attr?
366
+ html5.label.for.attr = attribute for { datatype.IDREF }
367
+ html5.label.content = html5.phrasing.model
368
+
369
+
370
+ html5.meter = element meter { html5.meter.attlist & html5.meter.content }
371
+ html5.meter.attlist = html5.global.attrs & html5.meter.value.attr & html5.meter.min.attr?
372
+ & html5.meter.low.attr? & html5.meter.high.attr? & html5.meter.max.attr? & html5.meter.optimum.attr?
373
+ html5.meter.value.attr = attribute value { datatype.float }
374
+ html5.meter.min.attr = attribute min { datatype.float }
375
+ html5.meter.low.attr = attribute low { datatype.float }
376
+ html5.meter.high.attr = attribute high { datatype.float }
377
+ html5.meter.max.attr = attribute max { datatype.float }
378
+ html5.meter.optimum.attr = attribute optimum { datatype.float }
379
+ html5.meter.content = html5.phrasing.model
380
+
381
+
382
+ html5.output = element output { html5.output.attlist & html5.output.content }
383
+ html5.output.attlist = html5.global.attrs & html5.forms.name.attr?
384
+ & html5.forms.form.attr? & html5.output.for.attr?
385
+ html5.output.for.attr = attribute for { datatype.IDREFS }
386
+ html5.output.content = html5.phrasing.model
387
+
388
+
389
+ html5.datalist = element datalist { html5.datalist.attlist & html5.datalist.content }
390
+ html5.datalist.attlist = html5.global.attrs
391
+ html5.datalist.content = html5.option* & html5.phrasing.model
392
+
393
+
394
+ html5.keygen = element keygen { html5.keygen.attlist }
395
+ html5.keygen.attlist = html5.global.attrs & html5.keygen.challenge.attr?
396
+ & html5.keygen.keytype.attr? & html5.forms.autofocus.attr?
397
+ & html5.forms.common.attrs?
398
+ html5.keygen.challenge.attr = attribute challenge { datatype.string }
399
+ html5.keygen.keytype.attr = attribute keytype { 'rsa' }
400
+
401
+
402
+ html5.input.common.attrs = html5.forms.dirname.attr?
403
+ html5.input.checked.attr = attribute checked { 'checked' | '' }
404
+ html5.input.autocomplete.attr = attribute autocomplete { 'on' | 'off'}
405
+ html5.input.list.attr = attribute list { datatype.IDREF }
406
+ html5.input.step.float.attr = attribute step { 'any' | datatype.float.positive }
407
+ html5.input.step.integer.attr = attribute step { 'any' | datatype.positive.integer }
408
+ html5.input.multiple.attr = attribute multiple { 'multiple' | '' }
409
+
410
+
411
+ html5.forms.common.attrs = html5.forms.name.attr? & html5.forms.disabled.attr? & html5.forms.form.attr?
412
+
413
+ html5.forms.name.attr = attribute name { datatype.string }
414
+ html5.forms.disabled.attr = attribute disabled { 'disabled' | '' }
415
+ html5.forms.form.attr = attribute form { datatype.IDREF }
416
+ html5.forms.readonly.attr = attribute readonly { 'readonly' | '' }
417
+ html5.forms.maxlength.attr = attribute maxlength { datatype.non-negative.integer }
418
+ html5.forms.size.attr = attribute size { datatype.positive.integer }
419
+ html5.forms.formaction.attr = attribute formaction { datatype.html5.URL.spaces }
420
+ html5.forms.formenctype.attr = attribute formenctype { html5.forms.formenctype.attr.value }
421
+ html5.forms.formenctype.attr.value = ( 'application/x-www-form-urlencoded' | 'multipart/form-data'| 'text/plain' )
422
+ html5.forms.formmethod.attr = attribute formmethod { html5.forms.formmethod.attr.value }
423
+ html5.forms.formmethod.attr.value = ( 'get'| 'post')
424
+ html5.forms.formtarget.attr = attribute formtarget { datatype.html5.browsing.context.name.or.keyword }
425
+ html5.forms.formnovalidate.attr = attribute formnovalidate { 'formnovalidate' | '' }
426
+ html5.forms.autofocus.attr = attribute autofocus { 'autofocus' | '' }
427
+ html5.forms.pattern.attr = attribute pattern { datatype.html5.forms.pattern }
428
+ html5.forms.template.attr = attribute template { datatype.IDREF }
429
+ html5.forms.required.attr = attribute required { 'required' | '' }
430
+ html5.forms.placeholder.attr = attribute placeholder { datatype.html5.forms.string.nolinebreaks }
431
+ html5.forms.dirname.attr = attribute dirname { datatype.string }
@@ -0,0 +1,115 @@
1
+
2
+
3
+ html5.flow.class |= html5.grouping.class
4
+ html5.grouping.class |= html5.p | html5.hr | html5.pre | html5.blockquote | html5.ul | html5.ol | html5.dl | html5.div | html5.figure | html5.table
5
+
6
+ html5.grouping.attrs &= html5.global.attrs
7
+
8
+ html5.p = element p { html5.p.attlist & html5.p.content }
9
+ html5.p.attlist &= html5.grouping.attrs
10
+ html5.p.content = html5.phrasing.model
11
+
12
+ html5.hr = element hr { html5.hr.attlist }
13
+ html5.hr.attlist = html5.grouping.attrs
14
+
15
+ html5.pre = element pre { html5.pre.attlist & html5.pre.content }
16
+ html5.pre.attlist = html5.grouping.attrs
17
+ html5.pre.content = html5.phrasing.model
18
+
19
+ html5.blockquote = element blockquote { html5.blockquote.attlist & html5.blockquote.content }
20
+ html5.blockquote.attlist = html5.grouping.attrs & html5.cite.attr?
21
+ html5.blockquote.content = html5.flow.model
22
+
23
+ html5.ul = element ul { html5.ul.attlist & html5.ul.content }
24
+ html5.ul.attlist = html5.grouping.attrs
25
+ html5.ul.content = html5.li*
26
+
27
+ html5.li = element li { html5.li.attlist & html5.li.content }
28
+ html5.li.attlist = html5.global.attrs
29
+ html5.li.content = html5.flow.model
30
+
31
+ html5.ol = element ol { html5.ol.attlist & html5.ol.content }
32
+ html5.ol.attlist = html5.grouping.attrs & html5.ol.start.attr? & html5.ol.reversed.attr? & ol.type.attr?
33
+ html5.ol.start.attr = attribute start { datatype.integer }
34
+ html5.ol.reversed.attr = attribute reversed { 'reversed' | '' }
35
+ ol.type.attr = attribute type {'1' | 'a' | 'A' | 'i' | 'I' }
36
+ html5.ol.content = html5.oli*
37
+
38
+ html5.oli = element li { html5.oli.attlist & html5.oli.content }
39
+ html5.oli.attlist = html5.global.attrs & html5.oli.attrs.value?
40
+ html5.oli.attrs.value = attribute value { datatype.integer }
41
+ html5.oli.content = html5.flow.model
42
+
43
+ html5.dl = element dl { html5.dl.attlist & html5.dl.content }
44
+ html5.dl.attlist = html5.grouping.attrs
45
+ html5.dl.content = (html5.dt+ , html5.dd+)*
46
+
47
+ html5.dt = element dt { html5.dt.attlist & html5.dt.content }
48
+ html5.dt.attlist = html5.global.attrs
49
+ html5.dt.content = html5.phrasing.model
50
+
51
+ html5.dd = element dd { html5.dd.attlist & html5.dd.content }
52
+ html5.dd.phrasing = element dd { html5.dd.phrasing.content & html5.dd.attlist }
53
+ html5.dd.attlist = html5.global.attrs
54
+ html5.dd.content = html5.flow.model
55
+ html5.dd.phrasing.content = html5.phrasing.model
56
+
57
+ html5.div = element div { html5.div.attlist & html5.div.content }
58
+ html5.div.attlist = html5.grouping.attrs
59
+ html5.div.content = html5.flow.model
60
+
61
+ html5.figure = element figure { html5.figure.attlist & html5.figure.content }
62
+ html5.figure.attlist = html5.grouping.attrs
63
+ html5.figure.content = ( html5.figcaption, html5.flow.model ) | ( html5.flow.model, html5.figcaption? )
64
+
65
+ html5.figcaption = element figcaption { html5.figcaption.attlist & html5.figcaption.content }
66
+ html5.figcaption.attlist = html5.global.attrs
67
+ html5.figcaption.content = html5.flow.model
68
+
69
+ html5.table = element table { table.attlist & table.content }
70
+ table.attlist &= html5.grouping.attrs & html5.table.border.attr?
71
+ html5.table.border.attr = attribute border { '1' | '' }
72
+ table.content = (html5.caption?, html5.colgroup*, html5.thead?,
73
+ ((html5.tfoot, ( html5.tbody* | html5.tr+ ))|(( html5.tbody* | html5.tr+ ), html5.tfoot?)))
74
+
75
+ html5.caption = element caption { html5.caption.attlist & html5.caption.content }
76
+ html5.caption.attlist &= html5.global.attrs
77
+ html5.caption.content = html5.flow.model
78
+
79
+ html5.colgroup = element colgroup { html5.colgroup.attlist & html5.colgroup.content }
80
+ html5.colgroup.attlist &= html5.global.attrs
81
+ html5.colgroup.content = html5.col* | html5.colspan.col.span.attr?
82
+
83
+ html5.col = element col { html5.col.attlist }
84
+ html5.col.attlist &= html5.global.attrs & html5.colspan.col.span.attr?
85
+
86
+ html5.thead = element thead { html5.thead.attlist & html5.thead.content }
87
+ html5.thead.attlist &= html5.grouping.attrs
88
+ html5.thead.content = html5.tr*
89
+
90
+ html5.tfoot = element tfoot { html5.tfoot.attlist & html5.tfoot.content }
91
+ html5.tfoot.attlist &= ( html5.grouping.attrs )
92
+ html5.tfoot.content = ( html5.tr* )
93
+
94
+ html5.tbody = element tbody { html5.tbody.attlist & html5.tbody.content }
95
+ html5.tbody.attlist &= ( html5.grouping.attrs )
96
+ html5.tbody.content = ( html5.tr* )
97
+
98
+ html5.tr = element tr { html5.tr.attlist & html5.tr.content }
99
+ html5.tr.attlist &= html5.grouping.attrs
100
+ html5.tr.content = ( html5.td | html5.th )*
101
+
102
+ html5.td = element td { html5.td.attlist & html5.td.content }
103
+ html5.td.attlist &= html5.global.attrs & html5.table.colspan.attr? & html5.table.rowspan.attr? & html5.table.headers.attr?
104
+ html5.td.content = ( html5.flow.model )
105
+
106
+ html5.th = element th { html5.th.content & html5.th.attlist }
107
+ html5.th.attlist &= html5.global.attrs & html5.table.colspan.attr? & html5.table.rowspan.attr? & html5.table.scope.attr? & html5.table.headers.attr?
108
+ html5.th.content = html5.phrasing.model
109
+
110
+ html5.colspan.col.span.attr = attribute span { datatype.positive.integer }
111
+ html5.table.colspan.attr = attribute colspan { datatype.positive.integer }
112
+ html5.table.rowspan.attr = attribute rowspan { datatype.non-negative.integer }
113
+ html5.table.headers.attr = attribute headers { datatype.IDREFS }
114
+ html5.table.scope.attr = attribute scope { 'row' | 'col' | 'rowgroup' | 'colgroup' }
115
+ html5.table.abbr.attr = attribute abbr { string }
@@ -0,0 +1,86 @@
1
+
2
+
3
+ html5.flow.class |= html5.interactive.flow.class
4
+ html5.phrasing.class |= html5.interactive.phrasing.class
5
+ html5.metadata.class |= html5.interactive.metadata.class
6
+
7
+ html5.interactive.phrasing.class |= html5.command.class | html5.progress
8
+ html5.interactive.flow.class |= html5.menu | html5.details
9
+ html5.interactive.metadata.class |= html5.command.class
10
+
11
+ html5.command.class |= html5.command.command | html5.command.radio | html5.command.checkbox
12
+
13
+
14
+ html5.html.attlist &= html5.interactive.manifest.attr?
15
+ html5.global.attrs &= html5.interactive.global.attrs
16
+
17
+ html5.interactive.global.attrs &= html5.interactive.contextmenu.attr?
18
+ & html5.interactive.contenteditable.attr? & html5.interactive.draggable.attr?
19
+ & html5.interactive.hidden.attr? & html5.interactive.spellcheck.attr?
20
+ & html5.interactive.accesskey.attr? & html5.interactive.tabindex.attr? & html5.interactive.dropzone.attr?
21
+
22
+ html5.progress = element progress { html5.progress.attlist & html5.progress.content }
23
+ html5.progress.attlist &= html5.phrasing.attrs & html5.progress.value.attr? & html5.progress.max.attr?
24
+ html5.progress.value.attr = attribute value { datatype.float.non-negative }
25
+ html5.progress.max.attr = attribute max { datatype.float.positive }
26
+ html5.progress.content = html5.phrasing.model
27
+
28
+
29
+ html5.command.command = element command { html5.command.command.attlist }
30
+ html5.command.command.attlist &= html5.phrasing.attrs & html5.command.command.type.attr? & html5.common-command.attrs
31
+ html5.command.command.type.attr = attribute type { 'command' }
32
+
33
+ html5.command.checked.attr = attribute checked { 'checked' | '' }
34
+
35
+ html5.command.radio = element command { html5.command.radio.attlist }
36
+ html5.command.radio.attlist &= html5.phrasing.attrs & ( html5.command.radio.type.attr & html5.command.radio.radiogroup.attr & html5.command.checked.attr? ) & html5.common-command.attrs
37
+ html5.command.radio.type.attr = attribute type { 'radio' }
38
+ html5.command.radio.radiogroup.attr = attribute radiogroup { datatype.string }
39
+
40
+ html5.command.checkbox = element command { html5.command.checkbox.attlist }
41
+ html5.command.checkbox.attlist = html5.phrasing.attrs & ( html5.command.checkbox.type.attr & html5.command.checked.attr? ) & html5.common-command.attrs
42
+ html5.command.checkbox.type.attr = attribute type { 'checkbox' }
43
+
44
+ html5.common-command.attrs &= html5.command.label.attr? & html5.command.icon.attr? & html5.command.disabled.attr?
45
+ html5.command.label.attr = attribute label { string }
46
+ html5.command.icon.attr = attribute icon { datatype.html5.URL.spaces }
47
+ html5.command.disabled.attr = attribute disabled { 'disabled' |'' }
48
+
49
+
50
+ html5.menu = element menu { html5.menu.attlist & html5.menu.content }
51
+ html5.menu.attlist &= html5.global.attrs & html5.menu.type.attr? & html5.menu.label.attr?
52
+ html5.menu.type.attr = attribute type { 'toolbar' | 'context' }
53
+ html5.menu.label.attr = attribute label { string }
54
+ html5.menu.content = ( html5.mli* | html5.flow.model )
55
+
56
+ html5.mli = element li { html5.mli.attlist & html5.mli.content }
57
+ html5.mli.attlist &= html5.global.attrs
58
+ html5.mli.content = html5.flow.model
59
+
60
+ html5.details = element details { html5.details.attlist & html5.details.content }
61
+ html5.details.attlist &= html5.global.attrs & html5.details.open.attr?
62
+ html5.details.open.attr = attribute open { 'open' | '' }
63
+ html5.details.content = html5.summary?, html5.flow.model
64
+
65
+ html5.summary = element summary { html5.summary.attlist & html5.summary.content }
66
+ html5.summary.attlist &= html5.global.attrs
67
+ html5.summary.content = html5.phrasing.model
68
+
69
+
70
+ html5.interactive.manifest.attr = attribute manifest { datatype.html5.URL.spaces }
71
+
72
+ html5.interactive.contextmenu.attr = attribute contextmenu { datatype.IDREF }
73
+ html5.interactive.contenteditable.attr = attribute contenteditable { 'true' | 'false' | '' }
74
+ html5.interactive.draggable.attr = attribute draggable { 'true' | 'false' }
75
+ html5.interactive.hidden.attr = attribute hidden { 'hidden' | '' }
76
+ html5.interactive.spellcheck.attr = attribute spellcheck { 'true' | 'false' | '' }
77
+ html5.interactive.accesskey.attr = attribute accesskey { datatype.html5.accesskey }
78
+ html5.interactive.tabindex.attr = attribute tabindex { datatype.integer }
79
+ html5.interactive.dropzone.attr = attribute dropzone { list {
80
+ ( xsd:string { pattern = "[sS]:.+" } | xsd:string { pattern = "[fF]:.+" })*,
81
+ ( 'copy' | 'move' | 'link' )?,
82
+ ( xsd:string { pattern = "[sS]:.+" } | xsd:string { pattern = "[fF]:.+" })*
83
+ }
84
+ }
85
+
86
+
@@ -0,0 +1,10 @@
1
+
2
+
3
+ html5.flow.model = html5.flow.model.html5
4
+ html5.flow.model.html5 = html5.flow.class*
5
+
6
+ html5.grouping.model = html5.grouping.class+
7
+ html5.phrasing.model = html5.phrasing.class+
8
+
9
+ html5.section.model = html5.section.model.html5
10
+ html5.section.model.html5 = html5.flow.model