nora_mark 0.2beta3 → 0.2beta4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +5 -0
- data/Gemfile +2 -0
- data/README.md +17 -12
- data/example/nora-simple.css +52 -0
- data/example/noramark-reference-ja.nora +246 -0
- data/example/noramark-reference-ja_00001.xhtml +187 -0
- data/lib/nora_mark/html/{abstract_item_writer.rb → abstract_node_writer.rb} +3 -3
- data/lib/nora_mark/html/context.rb +3 -21
- data/lib/nora_mark/html/frontmatter_writer.rb +33 -0
- data/lib/nora_mark/html/generator.rb +122 -100
- data/lib/nora_mark/html/pages.rb +3 -9
- data/lib/nora_mark/html/paragraph_writer.rb +27 -23
- data/lib/nora_mark/html/tag_writer.rb +33 -34
- data/lib/nora_mark/html/writer_selector.rb +3 -3
- data/lib/nora_mark/node.rb +31 -0
- data/lib/nora_mark/parser.kpeg +133 -79
- data/lib/nora_mark/parser.kpeg.rb +1822 -1526
- data/lib/nora_mark/parser.rb +4 -23
- data/lib/nora_mark/version.rb +1 -1
- data/lib/nora_mark.rb +7 -2
- data/nora_mark.gemspec +1 -0
- data/spec/epub30-schemas/epub-nav-30.nvdl +16 -0
- data/spec/epub30-schemas/epub-nav-30.rnc +10 -0
- data/spec/epub30-schemas/epub-nav-30.sch +72 -0
- data/spec/epub30-schemas/epub-svg-30.nvdl +15 -0
- data/spec/epub30-schemas/epub-svg-30.rnc +15 -0
- data/spec/epub30-schemas/epub-svg-30.sch +10 -0
- data/spec/epub30-schemas/epub-xhtml-30.nvdl +15 -0
- data/spec/epub30-schemas/epub-xhtml-30.rnc +37 -0
- data/spec/epub30-schemas/epub-xhtml-30.sch +377 -0
- data/spec/epub30-schemas/epub30-catalog.xml +335 -0
- data/spec/epub30-schemas/media-overlay-30.nvdl +14 -0
- data/spec/epub30-schemas/media-overlay-30.rnc +46 -0
- data/spec/epub30-schemas/media-overlay-30.sch +9 -0
- data/spec/epub30-schemas/mod/datatypes.rnc +143 -0
- data/spec/epub30-schemas/mod/epub-mathml3-30.rnc +74 -0
- data/spec/epub30-schemas/mod/epub-prefix-attr.rnc +8 -0
- data/spec/epub30-schemas/mod/epub-ssml-attrs.rnc +11 -0
- data/spec/epub30-schemas/mod/epub-svg11-30.rnc +12 -0
- data/spec/epub30-schemas/mod/epub-svg11-re.sch +7 -0
- data/spec/epub30-schemas/mod/epub-switch.rnc +32 -0
- data/spec/epub30-schemas/mod/epub-trigger.rnc +17 -0
- data/spec/epub30-schemas/mod/epub-type-attr.rnc +7 -0
- data/spec/epub30-schemas/mod/epub-xhtml-mathml3-30.rnc +5 -0
- data/spec/epub30-schemas/mod/epub-xhtml-svg11-30.rnc +6 -0
- data/spec/epub30-schemas/mod/html5/LICENSE +23 -0
- data/spec/epub30-schemas/mod/html5/README +21 -0
- data/spec/epub30-schemas/mod/html5/html5-aria-30.rnc +105 -0
- data/spec/epub30-schemas/mod/html5/html5-attrib-30.rnc +44 -0
- data/spec/epub30-schemas/mod/html5/html5-document-30.rnc +44 -0
- data/spec/epub30-schemas/mod/html5/html5-edit-30.rnc +24 -0
- data/spec/epub30-schemas/mod/html5/html5-embed-30.rnc +155 -0
- data/spec/epub30-schemas/mod/html5/html5-forms-30.rnc +431 -0
- data/spec/epub30-schemas/mod/html5/html5-grouping-30.rnc +115 -0
- data/spec/epub30-schemas/mod/html5/html5-interactive-30.rnc +86 -0
- data/spec/epub30-schemas/mod/html5/html5-models-30.rnc +10 -0
- data/spec/epub30-schemas/mod/html5/html5-phrasing-30.rnc +134 -0
- data/spec/epub30-schemas/mod/html5/html5-script-30.rnc +164 -0
- data/spec/epub30-schemas/mod/html5/html5-sections-30.rnc +58 -0
- data/spec/epub30-schemas/mod/html5/html5-style-30.rnc +18 -0
- data/spec/epub30-schemas/mod/id-unique.sch +10 -0
- data/spec/epub30-schemas/mod/mathml/LICENSE +3 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-common.rnc +84 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-content.rnc +373 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-presentation.rnc +536 -0
- data/spec/epub30-schemas/mod/mathml/mathml3-strict-content.rnc +60 -0
- data/spec/epub30-schemas/mod/security/LICENSE +4 -0
- data/spec/epub30-schemas/mod/security/Lenient-Encryption11-ghc.rnc +41 -0
- data/spec/epub30-schemas/mod/security/Lenient-Encryption11.rnc +39 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature-exclusiveC14N.rnc +25 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature11-properties-exclusiveC14N.rnc +32 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature11-properties.rnc +30 -0
- data/spec/epub30-schemas/mod/security/Lenient-Signature11.rnc +28 -0
- data/spec/epub30-schemas/mod/security/Strict-Encryption.rnc +27 -0
- data/spec/epub30-schemas/mod/security/Strict-Signature.rnc +22 -0
- data/spec/epub30-schemas/mod/security/exc-c14n.rnc +39 -0
- data/spec/epub30-schemas/mod/security/security_any.rnc +15 -0
- data/spec/epub30-schemas/mod/security/xenc-allowAnyForeign.rnc +25 -0
- data/spec/epub30-schemas/mod/security/xenc-schema-11.rnc +96 -0
- data/spec/epub30-schemas/mod/security/xenc-schema.rnc +145 -0
- data/spec/epub30-schemas/mod/security/xenc11-allowAnyForeign.rnc +19 -0
- data/spec/epub30-schemas/mod/security/xmldsig-allowAnyForeign.rnc +47 -0
- data/spec/epub30-schemas/mod/security/xmldsig-core-schema.rnc +276 -0
- data/spec/epub30-schemas/mod/security/xmldsig-filter2.rnc +16 -0
- data/spec/epub30-schemas/mod/security/xmldsig-properties-schema.rnc +34 -0
- data/spec/epub30-schemas/mod/security/xmldsig11-allowAnyForeign.rnc +18 -0
- data/spec/epub30-schemas/mod/security/xmldsig11-schema.rnc +133 -0
- data/spec/epub30-schemas/mod/security/xmlsec-ghc-allowAnyForeign.rnc +21 -0
- data/spec/epub30-schemas/mod/security/xmlsec-ghc-schema.rnc +42 -0
- data/spec/epub30-schemas/mod/svg11/LICENSE +1 -0
- data/spec/epub30-schemas/mod/svg11/README.txt +8 -0
- data/spec/epub30-schemas/mod/svg11/svg11-flat.rnc +3999 -0
- data/spec/epub30-schemas/ocf-container-30.rnc +16 -0
- data/spec/epub30-schemas/ocf-encryption-30.rnc +12 -0
- data/spec/epub30-schemas/ocf-signatures-30.rnc +8 -0
- data/spec/epub30-schemas/package-30.nvdl +14 -0
- data/spec/epub30-schemas/package-30.rnc +91 -0
- data/spec/epub30-schemas/package-30.sch +137 -0
- data/spec/jing-20091111/bin/jing.jar +0 -0
- data/spec/nora_mark_spec.rb +229 -68
- data/spec/spec_helper.rb +16 -0
- metadata +179 -6
- data/lib/nora_mark/html/header_writer.rb +0 -35
- data/spec/fixture/test_src_ja.nora +0 -50
@@ -0,0 +1,11 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
namespace ssml = "http://www.w3.org/2001/10/synthesis"
|
4
|
+
|
5
|
+
|
6
|
+
html5.global.attrs &= epub.ssml.ph.attr? & epub.ssml.alphabet.attr?
|
7
|
+
|
8
|
+
#TODO determine injection in SVG
|
9
|
+
|
10
|
+
epub.ssml.ph.attr = attribute ssml:ph { datatype.ssml.PhoneticExpression }
|
11
|
+
epub.ssml.alphabet.attr = attribute ssml:alphabet { datatype.ssml.PhoneticAlphabet }
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# $Id: epub-svg11-30.rnc 3093 2011-08-22 18:33:36Z markus.gylling@gmail.com $
|
2
|
+
# Contributors: MURATA Makoto and Markus Gylling
|
3
|
+
|
4
|
+
include "svg11/svg11-flat.rnc" {
|
5
|
+
start = svg
|
6
|
+
SVG.id.attrib = attribute id { parent datatype.ID }?
|
7
|
+
SVG.AnimationEvents.attrib = notAllowed
|
8
|
+
SVG.Animation.class = notAllowed
|
9
|
+
SVG.foreignObject.extra.content = parent html5.flow.class
|
10
|
+
SVG.title.extra.content = parent html5.phrasing.class
|
11
|
+
}
|
12
|
+
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<pattern id="svg-fo-re" xmlns="http://purl.oclc.org/dsdl/schematron">
|
3
|
+
<rule context="svg:foreignObject[@requiredExtensions]">
|
4
|
+
<assert test="@requiredExtensions = 'http://www.idpf.org/2007/ops'"
|
5
|
+
>Invalid value (expecting: 'http://www.idpf.org/2007/ops')</assert>
|
6
|
+
</rule>
|
7
|
+
</pattern>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
namespace epub = "http://www.idpf.org/2007/ops"
|
3
|
+
|
4
|
+
html5.flow.class |= epub.switch.flow
|
5
|
+
html5.phrasing.class |= epub.switch.phrasing
|
6
|
+
|
7
|
+
epub.switch.flow = element epub:switch { epub.switch.attlist, epub.switch.case.flow+, epub.switch.default.flow }
|
8
|
+
epub.switch.phrasing = element epub:switch { epub.switch.attlist, epub.switch.case.phrasing+, epub.switch.default.phrasing }
|
9
|
+
|
10
|
+
epub.switch.case.flow = element epub:case { epub.case.attlist & epub.case.flow.content }
|
11
|
+
epub.switch.case.phrasing = element epub:case { epub.case.attlist & epub.case.phrasing.content }
|
12
|
+
epub.switch.default.flow = element epub:default { epub.default.attlist & epub.default.flow.content }
|
13
|
+
epub.switch.default.phrasing = element epub:default { epub.default.attlist & epub.default.phrasing.content }
|
14
|
+
|
15
|
+
epub.case.flow.content = epub.switch.any
|
16
|
+
epub.case.phrasing.content = epub.switch.any
|
17
|
+
epub.switch.any = (anyElement | text)*
|
18
|
+
|
19
|
+
epub.default.flow.content = html5.flow.model
|
20
|
+
epub.default.phrasing.content = html5.phrasing.model
|
21
|
+
|
22
|
+
epub.switch.attlist &= html5.id.attr?
|
23
|
+
epub.case.attlist &= html5.id.attr? & epub.case.rn.attr
|
24
|
+
epub.default.attlist &= html5.id.attr?
|
25
|
+
|
26
|
+
epub.case.rn.attr = attribute required-namespace { datatype.URI }
|
27
|
+
|
28
|
+
anyElement = element * {
|
29
|
+
(attribute * { text }
|
30
|
+
| text
|
31
|
+
| anyElement)*
|
32
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
namespace epub = "http://www.idpf.org/2007/ops"
|
3
|
+
namespace ev = "http://www.w3.org/2001/xml-events"
|
4
|
+
|
5
|
+
html5.metadata.class |= epub.trigger
|
6
|
+
html5.flow.class |= epub.trigger
|
7
|
+
|
8
|
+
|
9
|
+
epub.trigger = element epub:trigger { epub.trigger.attlist & epub.trigger.content }
|
10
|
+
epub.trigger.attlist = html5.id.attr? & epub.trigger.action.attr & epub.trigger.ref.attr & xml.events.event.attr & xml.events.observer.attr
|
11
|
+
|
12
|
+
epub.trigger.action.attr = attribute action { 'show'|'hide'|'play'|'pause'|'resume'|'mute'|'unmute' }
|
13
|
+
epub.trigger.ref.attr = attribute ref { datatype.IDREF }
|
14
|
+
xml.events.event.attr = attribute ev:event { datatype.NMTOKEN }
|
15
|
+
xml.events.observer.attr = attribute ev:observer { datatype.IDREF }
|
16
|
+
|
17
|
+
epub.trigger.content = empty
|
@@ -0,0 +1,23 @@
|
|
1
|
+
The license statement herein applies to all files in this directory.
|
2
|
+
|
3
|
+
Copyright (c) 2005-2007 Elika J. Etemad (fantasai) and Henri Sivonen (hsivonen)
|
4
|
+
Copyright (c) 2007-2008 Mozilla Foundation
|
5
|
+
Copyright (c) 2010-2011 International Digital Publishing Forum
|
6
|
+
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
8
|
+
this software and associated documentation files (the "Software"), to deal in
|
9
|
+
the Software without restriction, including without limitation the rights to
|
10
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
11
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
12
|
+
so, subject to the following conditions:
|
13
|
+
|
14
|
+
The above copyright notice and this permission notice shall be included in all
|
15
|
+
copies or substantial portions of the Software.
|
16
|
+
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
THE SOFTWARE.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
The modules in this directory are part of the schema that defines
|
3
|
+
a vocabulary and grammar for EPUB3 XHTML Content Documents [1],
|
4
|
+
based on W3C XHTML5 [2], with IDPF/EPUB extensions.
|
5
|
+
|
6
|
+
The modules are derived from the schemas used in the validator.nu
|
7
|
+
service [3].
|
8
|
+
|
9
|
+
The schema for for EPUB3 XHTML Content Documents is not continuously
|
10
|
+
updated to reflect the latest version of the W3C HTML5 specification;
|
11
|
+
it is a static representation of the EPUB3 XHTML Content Document
|
12
|
+
definition, and changes to it occur only in conjunction with new
|
13
|
+
releases of the EPUB3 specification.
|
14
|
+
|
15
|
+
Note - as the W3C HTML5 specification becomes a Final Recommendation,
|
16
|
+
it is anticipated that IDPF will no longer maintain its own complete
|
17
|
+
schema.
|
18
|
+
|
19
|
+
[1] http://idpf.org/epub/30/spec/epub30-contentdocs.html#sec-xhtml
|
20
|
+
[2] http://www.w3.org/TR/html5/
|
21
|
+
[3] https://bitbucket.org/validator/syntax/
|
@@ -0,0 +1,105 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
html5.global.attrs &= aria
|
4
|
+
|
5
|
+
aria = aria.role.attr? & aria.global & aria.widget.excl & aria.relationship.excl
|
6
|
+
|
7
|
+
aria.role.attr = attribute role { datatype.NMTOKENS }
|
8
|
+
|
9
|
+
|
10
|
+
# Global States and Properties
|
11
|
+
# http://www.w3.org/WAI/PF/aria/states_and_properties#global_states
|
12
|
+
aria.global = aria.prop.atomic? & aria.state.busy? & aria.prop.controls?
|
13
|
+
& aria.prop.describedby? & aria.state.disabled? & aria.prop.dropeffect?
|
14
|
+
& aria.prop.flowto? & aria.state.grabbed? & aria.prop.haspopup?
|
15
|
+
& aria.state.hidden? & aria.state.invalid? & aria.prop.label?
|
16
|
+
& aria.prop.labelledby? & aria.prop.live? & aria.prop.owns?
|
17
|
+
& aria.prop.relevant?
|
18
|
+
|
19
|
+
# exclusive widget, not in global
|
20
|
+
# http://www.w3.org/WAI/PF/aria/states_and_properties#attrs_widgets
|
21
|
+
aria.widget.excl = aria.prop.autocomplete? & aria.state.checked?
|
22
|
+
& aria.state.expanded? & aria.prop.level? & aria.prop.multiline?
|
23
|
+
& aria.prop.multiselectable? & aria.prop.orientation? & aria.state.pressed?
|
24
|
+
& aria.prop.readonly? & aria.prop.required? & aria.state.selected?
|
25
|
+
& aria.prop.sort? & aria.prop.valuemax? & aria.prop.valuemin?
|
26
|
+
& aria.prop.valuenow? & aria.prop.valuetext?
|
27
|
+
|
28
|
+
# exclusive relationship, not in global
|
29
|
+
# http://www.w3.org/WAI/PF/aria/states_and_properties#attrs_relationships
|
30
|
+
aria.relationship.excl = aria.prop.activedescendant? & aria.prop.posinset?
|
31
|
+
& aria.prop.setsize?
|
32
|
+
|
33
|
+
|
34
|
+
aria.state.busy = attribute aria-busy { 'true' | 'false' }
|
35
|
+
aria.state.checked = attribute aria-checked { 'true' | 'false' | 'mixed' | 'undefined' }
|
36
|
+
aria.state.disabled = attribute aria-disabled { 'true' | 'false' }
|
37
|
+
aria.state.expanded = attribute aria-expanded { 'true' | 'false' | 'undefined' }
|
38
|
+
aria.state.grabbed = attribute aria-grabbed { 'true' | 'false' | 'undefined' }
|
39
|
+
aria.state.hidden = attribute aria-hidden { 'true' | 'false' }
|
40
|
+
aria.state.invalid = attribute aria-invalid { 'true' | 'false' | 'grammar' | 'spelling' }
|
41
|
+
aria.state.pressed = attribute aria-pressed { 'true' | 'false' | 'mixed' | "undefined" }
|
42
|
+
aria.state.selected = attribute aria-selected { 'true' | 'false' | 'undefined' }
|
43
|
+
|
44
|
+
aria.prop.activedescendant = attribute aria-activedescendant { datatype.IDREF }
|
45
|
+
aria.prop.atomic = attribute aria-atomic { 'true' | 'false' }
|
46
|
+
aria.prop.autocomplete = attribute aria-autocomplete { 'inline' | 'list' | 'both' | 'none' }
|
47
|
+
aria.prop.controls = attribute aria-controls { datatype.IDREFS }
|
48
|
+
aria.prop.describedby = attribute aria-describedby { datatype.IDREFS }
|
49
|
+
aria.prop.dropeffect = attribute aria-dropeffect
|
50
|
+
{ token 'none' | token "popup" | token "execute"
|
51
|
+
| list {('copy'), ('execute')? } | list { ('move'), ('execute')?}
|
52
|
+
| list { ('reference'), ('execute')? } | list { ('execute') , ('copy') }
|
53
|
+
| list { ('execute') , ('move')} | list { ('execute' ), ('reference') }
|
54
|
+
}
|
55
|
+
aria.prop.flowto = attribute aria-flowto { datatype.IDREFS }
|
56
|
+
aria.prop.haspopup = attribute aria-haspopup { 'true' | 'false' }
|
57
|
+
aria.prop.label = attribute aria-label { datatype.string }
|
58
|
+
aria.prop.labelledby = attribute aria-labelledby { datatype.IDREFS }
|
59
|
+
aria.prop.level = attribute aria-level { datatype.positive.integer }
|
60
|
+
aria.prop.live = attribute aria-live { 'off' | 'polite' | 'assertive' }
|
61
|
+
aria.prop.multiline = attribute aria-multiline { 'true' | 'false' }
|
62
|
+
aria.prop.multiselectable = attribute aria-multiselectable { 'true' | 'false' }
|
63
|
+
aria.prop.orientation = attribute aria-orientation { 'vertical' | 'horizontal' }
|
64
|
+
aria.prop.owns = attribute aria-owns { datatype.IDREFS }
|
65
|
+
aria.prop.posinset = attribute aria-posinset { datatype.positive.integer }
|
66
|
+
aria.prop.readonly = attribute aria-readonly { 'true' | 'false' }
|
67
|
+
aria.prop.relevant = attribute aria-relevant
|
68
|
+
{ token "all"
|
69
|
+
| list { ( 'additions' ), ( 'removals' )? , ( 'text' )? }
|
70
|
+
| list { ( 'additions' ), ( 'text' )?, ( 'removals' )? }
|
71
|
+
| list { ( 'removals' ), ( 'additions' )?, ( 'text' )? }
|
72
|
+
| list { ( 'removals' ), ( 'text' )?, ( 'additions' )? }
|
73
|
+
| list { ( 'text' ), ( 'additions' )?, ( 'removals' )? }
|
74
|
+
| list { ( 'text' ), ( 'removals' )? , ( 'additions' )? }
|
75
|
+
}
|
76
|
+
aria.prop.required = attribute aria-required { 'true' | 'false' }
|
77
|
+
aria.prop.setsize = attribute aria-setsize { datatype.non-negative.integer }
|
78
|
+
aria.prop.sort = attribute aria-sort { 'ascending '| 'descending' | 'none' | 'other' }
|
79
|
+
aria.prop.valuemax = attribute aria-valuemax { datatype.float }
|
80
|
+
aria.prop.valuemin = attribute aria-valuemin { datatype.float }
|
81
|
+
aria.prop.valuenow = attribute aria-valuenow { datatype.float }
|
82
|
+
aria.prop.valuetext = attribute aria-valuetext { datatype.string }
|
83
|
+
|
84
|
+
|
85
|
+
aria.roles = aria.widget.roles & aria.structure.roles & aria.landmark.roles
|
86
|
+
|
87
|
+
aria.widget.roles = 'alert' | 'alertdialog' | 'button' | 'checkbox' | 'dialog' |
|
88
|
+
'gridcell' | 'link' | 'log' | 'marquee' | 'menuitem' | 'menuitemcheckbox' |
|
89
|
+
'menuitemradio' | 'option' | 'progressbar' | 'radio' | 'scrollbar' | 'slider' |
|
90
|
+
'spinbutton' | 'status' | 'tab' | 'tabpanel' | 'textbox' | 'timer' | 'tooltip' |
|
91
|
+
'treeitem' | 'combobox' | 'grid' | 'listbox' | 'menu' | 'menubar' | 'radiogroup' |
|
92
|
+
'tablist' | 'tree' | 'treegrid'
|
93
|
+
|
94
|
+
aria.structure.roles = 'article' | 'columnheader' | 'definition' | 'directory' |
|
95
|
+
'document' | 'group' | 'heading' | 'img' | 'list' | 'listitem' | 'math' |
|
96
|
+
'note' | 'presentation' | 'region' | 'row' | 'rowheader' | 'separator' |
|
97
|
+
'toolbar'
|
98
|
+
|
99
|
+
aria.landmark.roles = 'application' | 'banner' | 'complementary' | 'contentinfo' |
|
100
|
+
'form' | 'main' | 'navigation' | 'search'
|
101
|
+
|
102
|
+
aria.abstract.roles = 'command' | 'composite' | 'input' | 'landmark' | 'range'
|
103
|
+
| 'roletype' | 'section' | 'sectionhead' | 'select' | 'structure' | 'widget' |
|
104
|
+
'window'
|
105
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
html5.global.attrs &= html5.global.common.attrs & html5.global.xml.attrs
|
5
|
+
html5.i18n.attrs = html5.xml.lang.attr? & html5.lang.attr? & html5.dir.attr?
|
6
|
+
|
7
|
+
html5.global.xml.attrs &= html5.xml.lang.attr? & html5.xml.base.attr? & html5.xml.space.attr?
|
8
|
+
html5.global.common.attrs &= html5.lang.attr? & html5.id.attr? & html5.title.attr? & html5.dir.attr? & html5.class.attr?
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
html5.lang.attr = attribute lang { datatype.languagecode }
|
13
|
+
html5.xml.lang.attr = attribute xml:lang { datatype.languagecode }
|
14
|
+
html5.dir.attr = attribute dir { 'ltr' | 'rtl' | 'auto' }
|
15
|
+
html5.id.attr = attribute id { datatype.ID }
|
16
|
+
html5.title.attr = attribute title { string }
|
17
|
+
html5.class.attr = attribute class { datatype.html5.space.separated.tokens }
|
18
|
+
html5.xml.base.attr = attribute xml:base { datatype.LEIRI }
|
19
|
+
html5.xml.space.attr = attribute xml:space { 'preserve' | 'default' }
|
20
|
+
|
21
|
+
html5.href.attr = attribute href { datatype.html5.URL.spaces }
|
22
|
+
html5.hreflang.attr = attribute hreflang { datatype.languagecode }
|
23
|
+
html5.target.attr = attribute target { datatype.html5.browsing.context.name.or.keyword }
|
24
|
+
html5.rel.attr = attribute rel { datatype.html5.space.separated.tokens }
|
25
|
+
html5.media.attr = attribute media { datatype.html5.media.query }
|
26
|
+
|
27
|
+
html5.type.mime.attr = attribute type { datatype.mimetype }
|
28
|
+
html5.type.mime.nocharset.attr = attribute type { datatype.mimetype.nocharset }
|
29
|
+
|
30
|
+
html5.charset.attr = attribute charset { datatype.character.encoding }
|
31
|
+
|
32
|
+
html5.src.attr = attribute src { datatype.html5.URL.spaces }
|
33
|
+
html5.usemap.attr = attribute usemap {datatype.html5.name.reference}
|
34
|
+
|
35
|
+
html5.cite.attr = attribute cite { datatype.html5.URL.spaces }
|
36
|
+
html5.alt.attr = attribute alt { datatype.string }
|
37
|
+
|
38
|
+
html5.name.context.attr = attribute name { datatype.html5.browsing.context.name }
|
39
|
+
html5.name.id.attr = attribute name { datatype.html5.name }
|
40
|
+
|
41
|
+
html5.dimension.attrs &= html5.width.attr? & html5.height.attr?
|
42
|
+
html5.width.attr = attribute width { datatype.non-negative.integer }
|
43
|
+
html5.height.attr = attribute height { datatype.non-negative.integer }
|
44
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
html5.html = element html { html5.html.attlist, html5.head, html5.body }
|
4
|
+
html5.html.attlist &= html5.global.attrs
|
5
|
+
|
6
|
+
|
7
|
+
html5.head = element head { html5.head.attlist & html5.head.content }
|
8
|
+
html5.head.attlist &= html5.global.attrs
|
9
|
+
html5.head.content = html5.title? & html5.base? & html5.metadata.class*
|
10
|
+
html5.metadata.class |= html5.link | html5.meta
|
11
|
+
|
12
|
+
|
13
|
+
html5.body = element body { html5.body.attlist & html5.body.content }
|
14
|
+
html5.body.attlist &= html5.global.attrs
|
15
|
+
html5.body.content = html5.section.model
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
html5.base = element base { html5.base.attlist }
|
20
|
+
html5.base.attlist &= html5.global.attrs &
|
21
|
+
((html5.href.attr & html5.target.attr?) | html5.target.attr)
|
22
|
+
|
23
|
+
html5.link = element link { html5.link.attlist }
|
24
|
+
html5.link.attlist &= html5.global.attrs & html5.href.attr &
|
25
|
+
html5.rel.attr & html5.media.attr? & html5.hreflang.attr? &
|
26
|
+
html5.type.mime.attr? & html5.link.sizes.attr?
|
27
|
+
html5.link.sizes.attr = attribute sizes { 'any' | datatype.html5.sizes }
|
28
|
+
|
29
|
+
html5.meta = element meta { html5.meta.attlist }
|
30
|
+
html5.meta.attlist &= html5.global.attrs & (
|
31
|
+
(html5.meta.name.attr & html5.meta.content.attr)
|
32
|
+
| (html5.meta.http-equiv.attr & html5.meta.content.attr)
|
33
|
+
| html5.charset.attr )
|
34
|
+
html5.meta.name.attr = attribute name { datatype.string }
|
35
|
+
html5.meta.http-equiv.attr = attribute http-equiv { html5.meta.http-equiv.attr.content }
|
36
|
+
html5.meta.http-equiv.attr.content = ( 'content-language' | 'content-type' | 'default-style' | 'refresh' )
|
37
|
+
html5.meta.content.attr = attribute content { datatype.string }
|
38
|
+
|
39
|
+
html5.title = element title { html5.title.attlist & html5.title.content }
|
40
|
+
html5.title.attlist &= html5.global.attrs
|
41
|
+
html5.title.content = datatype.text
|
42
|
+
|
43
|
+
|
44
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
html5.flow.class |= html5.edit.flow.class
|
4
|
+
html5.phrasing.class |= html5.edit.phrasing.class
|
5
|
+
|
6
|
+
html5.edit.flow.class |= html5.ins.flow | html5.del.flow
|
7
|
+
html5.edit.phrasing.class |= html5.ins.phrasing | html5.del.phrasing
|
8
|
+
|
9
|
+
|
10
|
+
html5.ins.flow = element ins { html5.ins.attlist & html5.ins.flow.content }
|
11
|
+
html5.ins.phrasing = element ins { html5.ins.attlist & html5.ins.phrasing.content }
|
12
|
+
html5.ins.flow.content = html5.flow.model
|
13
|
+
html5.ins.phrasing.content = html5.phrasing.model
|
14
|
+
html5.ins.attlist &= html5.global.attrs & html5.cite.attr? & html5.edit.datetime.attr?
|
15
|
+
|
16
|
+
|
17
|
+
html5.del.flow = element del { html5.del.attlist & html5.del.flow.content }
|
18
|
+
html5.del.phrasing = element del { html5.del.attlist & html5.del.phrasing.content }
|
19
|
+
|
20
|
+
html5.del.flow.content = html5.flow.model
|
21
|
+
html5.del.phrasing.content = html5.phrasing.model
|
22
|
+
html5.del.attlist &= html5.global.attrs & html5.cite.attr? & html5.edit.datetime.attr?
|
23
|
+
|
24
|
+
html5.edit.datetime.attr = attribute datetime { datatype.html5.date.optional.time }
|
@@ -0,0 +1,155 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
html5.flow.class |= html5.embed.flow.class
|
4
|
+
html5.phrasing.class |= html5.embed.phrasing.class
|
5
|
+
|
6
|
+
html5.embed.flow.class |= html5.audio.flow | html5.video.flow | html5.object.flow | html5.canvas.flow
|
7
|
+
| html5.map.flow | html5.area | html5.iframe | html5.img | html5.embed
|
8
|
+
html5.embed.phrasing.class |= html5.audio.phrasing | html5.video.phrasing | html5.object.phrasing | html5.canvas.phrasing
|
9
|
+
| html5.map.phrasing | html5.area | html5.iframe | html5.img | html5.embed
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
html5.video.flow = element video { html5.video.attlist & html5.video.flow.content }
|
14
|
+
html5.video.phrasing = element video { html5.video.attlist & html5.video.phrasing.content }
|
15
|
+
html5.video.attlist &= html5.global.attrs & html5.av.common.attrs & html5.video.poster.attr? & html5.dimension.attrs
|
16
|
+
html5.video.poster.attr = attribute poster { datatype.html5.URL.spaces }
|
17
|
+
html5.video.flow.content = html5.av.source, html5.track*, html5.flow.model
|
18
|
+
html5.video.phrasing.content = html5.av.source, html5.track*, html5.phrasing.model
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
html5.audio.flow = element audio { html5.audio.attlist & html5.audio.flow.content }
|
23
|
+
html5.audio.phrasing = element audio { html5.audio.attlist & html5.audio.phrasing.content }
|
24
|
+
html5.audio.attlist &= html5.global.attrs & html5.av.common.attrs
|
25
|
+
html5.audio.flow.content = html5.av.source, html5.track*, html5.flow.model
|
26
|
+
html5.audio.phrasing.content = html5.av.source, html5.track*, html5.phrasing.model
|
27
|
+
|
28
|
+
html5.av.source = html5.src.attr | html5.source*
|
29
|
+
|
30
|
+
html5.av.common.attrs = html5.av.autoplay.attr? & html5.av.preload.attr?
|
31
|
+
& html5.av.controls.attr? & html5.av.loop.attr? & html5.av.mediagroup.attr?
|
32
|
+
& html5.av.muted.attr?
|
33
|
+
|
34
|
+
|
35
|
+
html5.track = element track { html5.track.attlist }
|
36
|
+
html5.track.attlist &= html5.global.attrs & html5.track.kind.attr? & html5.src.attr & html5.track.default.attr?
|
37
|
+
& html5.track.srclang.attr? & html5.track.label.attr?
|
38
|
+
|
39
|
+
html5.track.kind.attr = attribute kind { 'subtitles' | 'captions' | 'descriptions' | 'chapters' | 'metadata' }
|
40
|
+
html5.track.srclang.attr = attribute srclang { datatype.languagecode }
|
41
|
+
html5.track.label.attr = attribute label { datatype.string }
|
42
|
+
html5.track.default.attr = attribute default { 'default' | '' }
|
43
|
+
|
44
|
+
|
45
|
+
html5.av.autoplay.attr = attribute autoplay { 'autoplay' | '' }
|
46
|
+
html5.av.preload.attr = attribute preload { 'none' | 'metadata' | 'auto' | '' }
|
47
|
+
html5.av.controls.attr = attribute controls { 'controls' | '' }
|
48
|
+
html5.av.loop.attr = attribute loop { 'loop' | '' }
|
49
|
+
html5.av.mediagroup.attr = attribute mediagroup { datatype.string }
|
50
|
+
html5.av.muted.attr = attribute muted { 'muted' | '' }
|
51
|
+
|
52
|
+
html5.source = element source { html5.source.attlist }
|
53
|
+
html5.source.attlist &= html5.global.attrs & html5.src.attr & html5.type.mime.attr? & html5.media.attr?
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
html5.img = element img { html5.img.attlist }
|
59
|
+
html5.img.attlist &= html5.global.attrs & html5.dimension.attrs & html5.src.attr & html5.alt.attr? & html5.usemap.attr? & html5.img.ismap.attr?
|
60
|
+
html5.img.ismap.attr = attribute ismap { 'ismap' | '' }
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
html5.embed = element embed { html5.embed.attlist }
|
65
|
+
html5.embed.attlist &= html5.global.attrs & html5.src.attr? & html5.type.mime.attr? & html5.dimension.attrs & html5.embed.attrs.other*
|
66
|
+
html5.embed.attrs.other = empty #TODO
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
html5.object.flow = element object { html5.object.flow.content & html5.object.attlist }
|
71
|
+
html5.object.phrasing = element object { html5.object.phrasing.content & html5.object.attlist }
|
72
|
+
html5.object.attlist &= html5.global.attrs & (( html5.object.data.attr & html5.type.mime.attr? ) | html5.type.mime.attr )
|
73
|
+
& html5.dimension.attrs & html5.usemap.attr? & html5.name.context.attr? & html5.forms.form.attr?
|
74
|
+
html5.object.data.attr = attribute data { datatype.html5.URL.spaces }
|
75
|
+
|
76
|
+
html5.object.flow.content = html5.param*, html5.flow.model
|
77
|
+
html5.object.phrasing.content = html5.param*, html5.phrasing.model
|
78
|
+
|
79
|
+
html5.param = element param { html5.param.attlist }
|
80
|
+
html5.param.attlist &= html5.global.attrs & html5.param.name.attr & html5.param.value.attr
|
81
|
+
html5.param.name.attr = attribute name { string }
|
82
|
+
html5.param.value.attr = attribute value { string }
|
83
|
+
|
84
|
+
|
85
|
+
html5.canvas.flow = element canvas { html5.canvas.attlist & html5.canvas.flow.content }
|
86
|
+
html5.canvas.phrasing = element canvas { html5.canvas.attlist & html5.canvas.phrasing.content }
|
87
|
+
html5.canvas.attlist = html5.global.attrs & html5.dimension.attrs
|
88
|
+
html5.canvas.flow.content = html5.flow.model
|
89
|
+
html5.canvas.phrasing.content = html5.phrasing.model
|
90
|
+
|
91
|
+
|
92
|
+
html5.map.flow = element map { html5.map.flow.content & html5.map.attlist }
|
93
|
+
html5.map.phrasing = element map { html5.map.phrasing.content & html5.map.attlist }
|
94
|
+
html5.map.attlist &= html5.global.attrs & html5.name.id.attr
|
95
|
+
html5.map.flow.content = html5.flow.model
|
96
|
+
html5.map.phrasing.content = html5.phrasing.model
|
97
|
+
|
98
|
+
|
99
|
+
html5.area = element area { html5.area.attlist }
|
100
|
+
html5.area.attlist &= html5.global.attrs & (html5.alt.attr & html5.href.attr)? & html5.target.attr? & html5.rel.attr?
|
101
|
+
& html5.media.attr? & html5.hreflang.attr? & html5.type.mime.attr? & html5.area.shape.attrs?
|
102
|
+
|
103
|
+
html5.area.shape.attrs =
|
104
|
+
( html5.area.shape.rect.attr? & html5.area.coords.rect.attr )
|
105
|
+
|( html5.area.shape.circle.attr & html5.area.coords.circle.attr )
|
106
|
+
|( html5.area.shape.poly.attr & html5.area.coords.poly.attr )
|
107
|
+
|( html5.area.shape.default.attr )
|
108
|
+
|
109
|
+
html5.area.shape.rect.attr = attribute shape { 'rect' }
|
110
|
+
html5.area.coords.rect.attr = attribute coords { datatype.html5.coords.rectangle }
|
111
|
+
html5.area.shape.circle.attr = attribute shape { 'circle' }
|
112
|
+
html5.area.coords.circle.attr = attribute coords { datatype.html5.coords.circle }
|
113
|
+
html5.area.shape.poly.attr = attribute shape { 'poly' }
|
114
|
+
html5.area.coords.poly.attr = attribute coords {datatype.html5.coords.poly}
|
115
|
+
html5.area.shape.default.attr = attribute shape { 'default' }
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
html5.iframe = element iframe { html5.iframe.attlist & html5.iframe.content}
|
120
|
+
html5.iframe.attlist &= html5.global.attrs & html5.src.attr? & html5.name.context.attr?
|
121
|
+
& html5.dimension.attrs & html5.iframe.sandbox.attr? & html5.iframe.seamless.attr?
|
122
|
+
& html5.iframe.srcdoc.attr?
|
123
|
+
html5.iframe.seamless.attr = attribute seamless { 'seamless' | '' }
|
124
|
+
html5.iframe.sandbox.attr = attribute sandbox
|
125
|
+
{ list { 'allow-top-navigation'?, 'allow-same-origin'?, 'allow-forms'?, 'allow-scripts'? }
|
126
|
+
| list { 'allow-top-navigation'?, 'allow-same-origin'?, 'allow-scripts'?, 'allow-forms'? }
|
127
|
+
| list { 'allow-top-navigation'?, 'allow-forms'?, 'allow-same-origin'?, 'allow-scripts'? }
|
128
|
+
| list { 'allow-top-navigation'?, 'allow-forms'?, 'allow-scripts'?, 'allow-same-origin'? }
|
129
|
+
| list { 'allow-top-navigation'?, 'allow-scripts'?, 'allow-same-origin'?, 'allow-forms'? }
|
130
|
+
| list { 'allow-top-navigation'?, 'allow-scripts'?, 'allow-forms'?, 'allow-same-origin'? }
|
131
|
+
| list { 'allow-same-origin'?, 'allow-top-navigation'?, 'allow-forms'?, 'allow-scripts'? }
|
132
|
+
| list { 'allow-same-origin'?, 'allow-top-navigation'?, 'allow-scripts'?, 'allow-forms'? }
|
133
|
+
| list { 'allow-forms'?, 'allow-top-navigation'?, 'allow-same-origin'?, 'allow-scripts'? }
|
134
|
+
| list { 'allow-forms'?, 'allow-top-navigation'?, 'allow-scripts'?, 'allow-same-origin'? }
|
135
|
+
| list { 'allow-scripts'?, 'allow-top-navigation'?, 'allow-same-origin'?, 'allow-forms'? }
|
136
|
+
| list { 'allow-scripts'?, 'allow-top-navigation'?, 'allow-forms'?, 'allow-same-origin'? }
|
137
|
+
| list { 'allow-same-origin'?, 'allow-forms'?, 'allow-top-navigation'?, 'allow-scripts'? }
|
138
|
+
| list { 'allow-same-origin'?, 'allow-scripts'?, 'allow-top-navigation'?, 'allow-forms'? }
|
139
|
+
| list { 'allow-forms'?, 'allow-same-origin'?, 'allow-top-navigation'?, 'allow-scripts'? }
|
140
|
+
| list { 'allow-forms'?, 'allow-scripts'?, 'allow-top-navigation'?, 'allow-same-origin'? }
|
141
|
+
| list { 'allow-scripts'?, 'allow-same-origin'?, 'allow-top-navigation'?, 'allow-forms'? }
|
142
|
+
| list { 'allow-scripts'?, 'allow-forms'?, 'allow-top-navigation'?, 'allow-same-origin'? }
|
143
|
+
| list { 'allow-same-origin'?, 'allow-forms'?, 'allow-scripts'?, 'allow-top-navigation'? }
|
144
|
+
| list { 'allow-same-origin'?, 'allow-scripts'?, 'allow-forms'?, 'allow-top-navigation'? }
|
145
|
+
| list { 'allow-forms'?, 'allow-same-origin'?, 'allow-scripts'?, 'allow-top-navigation'? }
|
146
|
+
| list { 'allow-forms'?, 'allow-scripts'?, 'allow-same-origin'?, 'allow-top-navigation'? }
|
147
|
+
| list { 'allow-scripts'?, 'allow-same-origin'?, 'allow-forms'?, 'allow-top-navigation'? }
|
148
|
+
| list { 'allow-scripts'?, 'allow-forms'?, 'allow-same-origin'?, 'allow-top-navigation'? }
|
149
|
+
}
|
150
|
+
html5.iframe.srcdoc.attr = attribute srcdoc { datatype.html5.iframe.srcdoc.xml }
|
151
|
+
|
152
|
+
html5.iframe.content = html5.iframe.content.xml
|
153
|
+
html5.iframe.content.html = datatype.text
|
154
|
+
html5.iframe.content.xml = empty
|
155
|
+
|