RelaxNG/publiquiz.rnc
changeset 414 a90d62ed3016
parent 412 c70e17e21021
child 417 5bb0c5a94bf3
--- 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" }