--- a/RelaxNG/publiquiz.rnc jeu. avril 21 12:02:13 2016 +0200
+++ b/RelaxNG/publiquiz.rnc jeu. avril 21 12:02:56 2016 +0200
@@ -79,12 +79,17 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ section ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blanks.section = element section { section.attributes, blanks.section.content }
+blanks-m.section = element section {
+ section.attributes, blanks-m.section.content }
pointing.section = element section {
section.attributes, pointing.section.content }
blanks.section.content =
section.head?,
(blanks.section+ | blanks.block+)
+blanks-m.section.content =
+ section.head?,
+ (blanks-m.section+ | blanks-m.block+)
pointing.section.content =
section.head?,
(pointing.section+ | pointing.block+)
@@ -100,13 +105,14 @@
| choices-check
| blanks-fill
| blanks-select
+ | blanks-media
| blanks-char
| pointing
| pointing-categories
+ | pip
| matching
| sort
| categories
- | mip
| production
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ choices ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -136,7 +142,9 @@
blanks-fill.attributes, blanks-fill.content }
blanks-select = element blanks-select {
blanks-select.attributes, blanks-select.content }
-blanks-char = element blanks-char {
+blanks-media = element blanks-media {
+ blanks-select.attributes, blanks-media.content }
+blanks-char = element blanks-char {
blanks-char.attributes, blanks-select.content }
blanks-fill.attributes =
@@ -147,16 +155,21 @@
success.attribute?
& multiple.attribute?
& noshuffle.attribute?
+ & orientation.attribute?
strict.attribute = attribute strict { xsd:boolean }
multiple.attribute = attribute multiple { xsd:boolean }
noshuffle.attribute = attribute no-shuffle { xsd:boolean }
long.attribute = attribute long { xsd:positiveInteger }
+orientation.attribute = attribute orientation {"north"|"east"|"west"|"south"}
blanks-fill.content =
(blanks.block+ | blanks.section+)
blanks-select.content =
blanks.intruders?,
(blanks.block+ | blanks.section+)
+blanks-media.content =
+ blanks-m.intruders?,
+ (blanks-m.block+ | blanks-m.section+)
blanks-char.attributes =
remove-space.attribute?
@@ -210,6 +223,17 @@
pointing-c.category.content = inlines
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ pip ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+pip = element pip { pip.content }
+
+pip.content =
+ pip.image
+
+pip.image = element image { image.attributes, pip.image.content }
+pip.image.content =
+ pip.point+
+
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ matching ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ~~~~~~ matching
@@ -218,6 +242,7 @@
matching.attributes =
success.attribute?
& multiple.attribute?
+ & orientation.attribute?
matching.content =
matching.intruders?,
@@ -238,6 +263,7 @@
sort.attributes =
success.attribute?
& shuffle.attribute?
+ & orientation.attribute?
sort.content =
comparison?,
@@ -261,6 +287,7 @@
success.attribute?
& multiple.attribute?
& noshuffle.attribute?
+ & orientation.attribute?
categories.content =
categories.intruders?,
@@ -274,17 +301,6 @@
category.head,
category.item*
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mip ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-mip = element mip { mip.attributes, mip.content }
-
-mip.attributes =
- success.attribute?
- & multiple.attribute?
-
-mip.content =
- mip.image
-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ production ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
production = element production { production.content }
@@ -340,6 +356,9 @@
blanks.block = (
blanks.p | blanks.list | blanks.blockquote | blanks.speech | blanks.table
| blanks.media)
+blanks-m.block = (
+ blanks-m.p | blanks-m.list | blanks-m.blockquote | blanks-m.speech
+ | blanks-m.table | blanks-m.media)
pointing.block = (
pointing.p | pointing.list | pointing.blockquote | pointing.speech
| pointing.table | media)
@@ -347,10 +366,13 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
blanks.p = element p { blanks.p.content }
+blanks-m.p = element p { blanks-m.p.content }
pointing.p = element p { pointing.p.content }
blanks.p.content =
blanks.inlines
+blanks-m.p.content =
+ blanks-m.inlines
pointing.p.content =
pointing.inlines
@@ -362,6 +384,11 @@
( (attribute type {"ordered"}?, blanks.item, blanks.item+)
| (attribute type {"glossary"}, glossary.item+) )
}
+blanks-m.list = element list {
+ block.head?,
+ ( (attribute type {"ordered"}?, blanks.item, blanks.item+)
+ | (attribute type {"glossary"}, glossary.item+) )
+}
pointing.list = element list {
block.head?,
( (attribute type {"ordered"}?, pointing.item, pointing.item+)
@@ -370,11 +397,15 @@
# ~~~~~~ item
blanks.item = element item { blanks.item.content }
+blanks-m.item = element item { blanks.item.content }
pointing.item = element item { pointing.item.content }
blanks.item.content =
blanks.inlines
| blanks.block+
+blanks-m.item.content =
+ blanks-m.inlines
+ | blanks-m.block+
pointing.item.content =
pointing.inlines
| pointing.block+
@@ -383,6 +414,8 @@
blanks.blockquote = element blockquote {
blockquote.attributes, blanks.blockquote.content }
+blanks-m.blockquote = element blockquote {
+ blockquote.attributes, blanks-m.blockquote.content }
pointing.blockquote = element blockquote {
blockquote.attributes, pointing.blockquote.content }
@@ -390,6 +423,10 @@
block.head?,
(blanks.p | speech | blanks.list)+,
attribution?
+blanks-m.blockquote.content =
+ block.head?,
+ (blanks-m.p | speech | blanks-m.list)+,
+ attribution?
pointing.blockquote.content =
block.head?,
(pointing.p | speech | pointing.list)+,
@@ -399,12 +436,17 @@
# ~~~~~~ speech
blanks.speech = element speech { blanks.speech.content }
+blanks-m.speech = element speech { blanks-m.speech.content }
pointing.speech = element speech { pointing.speech.content }
blanks.speech.content =
blanks.speaker?,
stage?,
(blanks.p | blanks.blockquote)+
+blanks-m.speech.content =
+ blanks-m.speaker?,
+ stage?,
+ (blanks-m.p | blanks-m.blockquote)+
pointing.speech.content =
pointing.speaker?,
stage?,
@@ -412,21 +454,28 @@
# ~~~~~~ speaker
blanks.speaker = element speaker { blanks.speaker.content }
+blanks-m.speaker = element speaker { blanks-m.speaker.content }
pointing.speaker = element speaker { pointing.speaker.content }
blanks.speaker.content = blanks.inlines
+blanks-m.speaker.content = blanks-m.inlines
pointing.speaker.content = pointing.inlines
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ~~~~~~ table
blanks.table = element table { table.attributes, blanks.table.content }
+blanks-m.table = element table { table.attributes, blanks-m.table.content }
pointing.table = element table { table.attributes, pointing.table.content }
blanks.table.content =
block.head?,
((thead?, blanks.tbody+) | blanks.tr+),
blanks.table.caption?
+blanks-m.table.content =
+ block.head?,
+ ((thead?, blanks-m.tbody+) | blanks-m.tr+),
+ blanks-m.table.caption?
pointing.table.content =
block.head?,
((thead?, pointing.tbody+) | pointing.tr+),
@@ -434,42 +483,57 @@
# ~~~~~~ tbody
blanks.tbody = element tbody { blanks.tbody.content }
+blanks-m.tbody = element tbody { blanks-m.tbody.content }
pointing.tbody = element tbody { pointing.tbody.content }
blanks.tbody.content =
blanks.tr+
+blanks-m.tbody.content =
+ blanks-m.tr+
pointing.tbody.content =
pointing.tr+
# ~~~~~~ tr
blanks.tr = element tr { tr.attributes, blanks.tr.content }
+blanks-m.tr = element tr { tr.attributes, blanks-m.tr.content }
pointing.tr = element tr { tr.attributes, pointing.tr.content }
blanks.tr.content =
(blanks.td | blanks.th)+
+blanks-m.tr.content =
+ (blanks-m.td | blanks-m.th)+
pointing.tr.content =
(pointing.td | pointing.th)+
# ~~~~~~ td, th
blanks.td = element td { td.attributes, blanks.td.content }
blanks.th = element th { td.attributes, blanks.td.content }
+blanks-m.td = element td { td.attributes, blanks-m.td.content }
+blanks-m.th = element th { td.attributes, blanks-m.td.content }
pointing.td = element td { td.attributes, pointing.td.content }
pointing.th = element th { td.attributes, pointing.td.content }
blanks.td.content =
blanks.inlines
| (blanks.p | blanks.media)+
+blanks-m.td.content =
+ blanks-m.inlines
+ | (blanks-m.p | blanks-m.media)+
pointing.td.content =
pointing.inlines
| (pointing.p | media)+
# ~~~~~~ table.caption
blanks.table.caption = element caption { blanks.caption.content }
+blanks-m.table.caption = element caption { blanks-m.caption.content }
pointing.table.caption = element caption { pointing.caption.content }
blanks.caption.content =
blanks.inlines
| (blanks.p | speech | blanks.list | blockquote)+
+blanks-m.caption.content =
+ blanks-m.inlines
+ | (blanks-m.p | speech | blanks-m.list | blockquote)+
pointing.caption.content =
pointing.inlines
| (pointing.p | speech | pointing.list | blockquote)+
@@ -478,6 +542,7 @@
# ~~~~~~ media
blanks.media = element media { media.attributes, blanks.media.content }
+blanks-m.media = element media { media.attributes, blanks-m.media.content }
pointing.media = element media { media.attributes, pointing.media.content }
blanks.media.content =
@@ -485,6 +550,11 @@
(blanks.image | audio | video)+,
blanks.media.caption?,
link?
+blanks-m.media.content =
+ block.head?,
+ (blanks-m.image | audio | video)+,
+ blanks-m.media.caption?,
+ link?
pointing.media.content =
block.head?,
(image | audio | video)+,
@@ -493,38 +563,40 @@
# ~~~~~~ blanks.image
blanks.image = element image { image.attributes, blanks.image.content }
-mip.image = element image { image.attributes, mip.image.content }
+blanks-m.image = element image { image.attributes, blanks-m.image.content }
blanks.image.content =
copyright?,
blanks.dropzone*
-mip.image.content =
- mip.dropzone+
+blanks-m.image.content =
+ copyright?,
+ blanks-m.dropzone*
# ~~~~~~ dropzone
blanks.dropzone = element dropzone {
blanks.dropzone.attributes, blanks.dropzone.content }
-mip.dropzone = element dropzone {
- mip.dropzone.attributes, mip.dropzone.content }
+blanks-m.dropzone = element dropzone {
+ blanks-m.dropzone.attributes, blanks-m.dropzone.content }
blanks.dropzone.attributes =
x.attribute
& y.attribute
-mip.dropzone.attributes =
+blanks-m.dropzone.attributes =
x.attribute
& y.attribute
+ & h.attribute
& w.attribute
- & h.attribute
blanks.dropzone.content =
blank
-mip.dropzone.content =
- image?,
- audio?
+blanks-m.dropzone.content =
+ blank-m
# ~~~~~~ media.caption
blanks.media.caption = element caption {
caption.attributes, blanks.caption.content }
+blanks-m.media.caption = element caption {
+ caption.attributes, blanks-m.caption.content }
pointing.media.caption = element caption {
caption.attributes, pointing.caption.content }
@@ -537,12 +609,13 @@
inlines
| ((p | image | (audio, image?) | video), help?, answer?)
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blanks.intruders ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~ blanks.intruders, blanks-m.intruders ~~~~~~~~~~~~~~~~~~
blanks.intruders = element intruders { blanks.intruders.content }
+blanks-m.intruders = element intruders { blanks-m.intruders.content }
-blanks.intruders.content =
- blank+
+blanks.intruders.content = blank+
+blanks-m.intruders.content = blank-m+
# ~~~~~~~~~~~~~~~~~~~~~~~ matching.intruders, match.item ~~~~~~~~~~~~~~~~~~~~~~
@@ -630,6 +703,37 @@
& blank*
}
+blanks-m.inlines = mixed {
+ sup*
+ & sub*
+ & var*
+ & number*
+ & acronym*
+ & warning*
+
+ & highlight*
+ & emphasis*
+ & mentioned*
+ & literal*
+ & term*
+ & stage*
+ & name*
+ & foreign*
+ & date*
+ & math*
+ & quote*
+ & initial*
+ & note*
+ & link*
+ & anchor*
+ & index*
+ & image*
+ & audio*
+ & smil*
+
+ & blank-m*
+}
+
pointing.inlines = mixed {
sup*
& sub*
@@ -661,7 +765,7 @@
& point*
}
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blank ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blank, blank-m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ~~~~~~ blank
blank = element blank { blank.attributes, blank.content }
@@ -677,17 +781,41 @@
text
| (s+, help?, answer?)
+# ~~~~~~ blank-m
+blank-m = element blank { blank-m.content }
+blank-m.content =
+ p
+ | math
+ | image
+ | audio
+ | (s-m+, help?, answer?)
+
# ~~~~~~ s
s = element s { s.content }
+s.content = text
-s.content = text
+# ~~~~~~ s-m
+s-m = element s { s-m.content }
+s-m.content =
+ p
+ | math
+ | image
+ | audio
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ point ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
point = element point { point.attributes, point.content }
+pip.point = element point { pip.point.attributes, point.content }
point.attributes =
point.ref.attribute?
+pip.point.attributes =
+ point.ref.attribute?
+ & x.attribute
+ & y.attribute
+ & w.attribute
+ & h.attribute
+
point.ref.attribute = attribute ref {
"right" | "cat1" | "cat2" | "cat3" | "cat4" | "cat5" }