RelaxNG/publiquiz.rnc
changeset 463 4a7e62074e60
parent 462 61f23b379b5d
child 465 4e3338f519f9
--- a/RelaxNG/publiquiz.rnc	mer. sept. 05 17:54:38 2018 +0200
+++ b/RelaxNG/publiquiz.rnc	mar. oct. 16 22:37:01 2018 +0200
@@ -128,6 +128,7 @@
  | flashcard
  | coloring
  | memory
+ | dictation
  | production
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ choices ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -431,6 +432,14 @@
     memory-m.item,
     audio?
 
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dictation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+dictation = element dictation { dictation.content }
+
+dictation.content =
+    audio,
+    dictation.block+
+
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ production ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 production = element production { production.content }
@@ -498,6 +507,7 @@
 pointing.block = (
    pointing.p | pointing.list | pointing.blockquote | pointing.speech
  | pointing.table | media)
+dictation.block = dictation.p
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -506,17 +516,20 @@
 blanks-c.p = element p { blanks-c.p.content }
 correct.p = element p { correct.p.content }
 pointing.p = element p { pointing.p.content }
+dictation.p = element p { dictation.p.content }
 
 blanks.p.content =
-   blanks.inlines
+    blanks.inlines
 blanks-m.p.content =
-   blanks-m.inlines
+    blanks-m.inlines
 blanks-c.p.content =
-   blanks-c.inlines
+    blanks-c.inlines
 correct.p.content =
-   correct.inlines
+    correct.inlines
 pointing.p.content =
-   pointing.inlines
+    pointing.inlines
+dictation.p.content =
+    dictation.inlines
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ list ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -1109,6 +1122,11 @@
  & point*
 }
 
+dictation.inlines = mixed {
+   warning*
+ & dictation.hint*
+}
+
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~ blank, blank-m, blank-c ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 # ~~~~~~ blank
@@ -1174,3 +1192,24 @@
    "right" | "cat1" | "cat2" | "cat3" | "cat4" | "cat5" }
 
 point.content = inlines
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dictation.hint ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# ~~~~~~ dictation.hint
+dictation.hint = element hint { dictation.hint.content }
+
+dictation.hint.content =
+    dictation.hint.w,
+    mistake+
+
+# ~~~~~~ dictation.hint.w
+dictation.hint.w = element w { text }
+
+# ~~~~~~ mistake
+mistake = element mistake { mistake.attributes, mistake.content }
+
+mistake.attributes =
+   mistake.is.attribute
+mistake.is.attribute = attribute is { text }
+
+mistake.content = inlines