RelaxNG/publiquiz.rnc
changeset 442 e3341312dff7
parent 441 2b94d6c7fe0c
child 448 9bc794bf36b0
equal deleted inserted replaced
441:2b94d6c7fe0c 442:e3341312dff7
    85 blanks.section = element section { section.attributes, blanks.section.content }
    85 blanks.section = element section { section.attributes, blanks.section.content }
    86 blanks-m.section = element section {
    86 blanks-m.section = element section {
    87    section.attributes, blanks-m.section.content }
    87    section.attributes, blanks-m.section.content }
    88 blanks-c.section = element section {
    88 blanks-c.section = element section {
    89    section.attributes, blanks-c.section.content }
    89    section.attributes, blanks-c.section.content }
       
    90 correct.section = element section {
       
    91    section.attributes, correct.section.content }
    90 pointing.section = element section {
    92 pointing.section = element section {
    91    section.attributes, pointing.section.content }
    93    section.attributes, pointing.section.content }
    92 
    94 
    93 blanks.section.content =
    95 blanks.section.content =
    94    section.head?,
    96    section.head?,
    97    section.head?,
    99    section.head?,
    98    (blanks-m.section+ | blanks-m.block+)
   100    (blanks-m.section+ | blanks-m.block+)
    99 blanks-c.section.content =
   101 blanks-c.section.content =
   100    section.head?,
   102    section.head?,
   101    (blanks-c.section+ | blanks-c.block+)
   103    (blanks-c.section+ | blanks-c.block+)
       
   104 correct.section.content =
       
   105    section.head?,
       
   106    (correct.section+ | correct.block+)
   102 pointing.section.content =
   107 pointing.section.content =
   103    section.head?,
   108    section.head?,
   104    (pointing.section+ | pointing.block+)
   109    (pointing.section+ | pointing.block+)
   105 
   110 
   106 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ instructions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   111 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ instructions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   114  | choices-check
   119  | choices-check
   115  | blanks-fill
   120  | blanks-fill
   116  | blanks-select
   121  | blanks-select
   117  | blanks-media
   122  | blanks-media
   118  | blanks-choices
   123  | blanks-choices
   119  | blanks-char
   124  | correct-line
   120  | pointing
   125  | pointing
   121  | pointing-categories
   126  | pointing-categories
   122  | matching
   127  | matching
   123  | sort
   128  | sort
   124  | categories
   129  | categories
   154    blanks-select.attributes, blanks-select.content }
   159    blanks-select.attributes, blanks-select.content }
   155 blanks-media = element blanks-media {
   160 blanks-media = element blanks-media {
   156    blanks-select.attributes, blanks-media.content }
   161    blanks-select.attributes, blanks-media.content }
   157 blanks-choices = element blanks-choices {
   162 blanks-choices = element blanks-choices {
   158    blanks-choices.content }
   163    blanks-choices.content }
   159 blanks-char = element blanks-char {
       
   160    blanks-char.attributes, blanks-select.content }
       
   161 
   164 
   162 blanks-fill.attributes =
   165 blanks-fill.attributes =
   163    success.attribute?
   166    success.attribute?
   164  & strict.attribute?
   167  & strict.attribute?
   165  & long.attribute?
   168  & long.attribute?
   183    blanks-m.intruders?,
   186    blanks-m.intruders?,
   184    (blanks-m.block+ | blanks-m.section+)
   187    (blanks-m.block+ | blanks-m.section+)
   185 blanks-choices.content =
   188 blanks-choices.content =
   186    (blanks-c.block+ | blanks-c.section+)
   189    (blanks-c.block+ | blanks-c.section+)
   187 
   190 
   188 blanks-char.attributes =
   191 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ correct-line ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       
   192 correct-line = element correct-line {
       
   193    correct.attributes, correct.content }
       
   194 
       
   195 correct.attributes = 
   189    remove-space.attribute?
   196    remove-space.attribute?
   190 remove-space.attribute = attribute remove-space { xsd:boolean }
   197 remove-space.attribute = attribute remove-space { xsd:boolean }
       
   198 
       
   199 correct.content =
       
   200    correct.intruders?,
       
   201    (correct.block+ | correct.section+)
   191 
   202 
   192 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ pointing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   203 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ pointing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   193 
   204 
   194 pointing = element pointing { pointing.attributes, pointing.content }
   205 pointing = element pointing { pointing.attributes, pointing.content }
   195 
   206 
   391    blanks-m.p | blanks-m.list | blanks-m.blockquote | blanks-m.speech
   402    blanks-m.p | blanks-m.list | blanks-m.blockquote | blanks-m.speech
   392  | blanks-m.table | blanks-m.media)
   403  | blanks-m.table | blanks-m.media)
   393 blanks-c.block = (
   404 blanks-c.block = (
   394    blanks-c.p | blanks-c.list | blanks-c.blockquote | blanks-c.speech
   405    blanks-c.p | blanks-c.list | blanks-c.blockquote | blanks-c.speech
   395  | blanks-c.table | blanks-c.media)
   406  | blanks-c.table | blanks-c.media)
       
   407 correct.block = (
       
   408    correct.p | correct.list | correct.blockquote | correct.speech
       
   409  | correct.table | media)
   396 pointing.block = (
   410 pointing.block = (
   397    pointing.p | pointing.list | pointing.blockquote | pointing.speech
   411    pointing.p | pointing.list | pointing.blockquote | pointing.speech
   398  | pointing.table | media)
   412  | pointing.table | media)
   399 
   413 
   400 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   414 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   401 
   415 
   402 blanks.p = element p { blanks.p.content }
   416 blanks.p = element p { blanks.p.content }
   403 blanks-m.p = element p { blanks-m.p.content }
   417 blanks-m.p = element p { blanks-m.p.content }
   404 blanks-c.p = element p { blanks-c.p.content }
   418 blanks-c.p = element p { blanks-c.p.content }
       
   419 correct.p = element p { correct.p.content }
   405 pointing.p = element p { pointing.p.content }
   420 pointing.p = element p { pointing.p.content }
   406 
   421 
   407 blanks.p.content =
   422 blanks.p.content =
   408    blanks.inlines
   423    blanks.inlines
   409 blanks-m.p.content =
   424 blanks-m.p.content =
   410    blanks-m.inlines
   425    blanks-m.inlines
   411 blanks-c.p.content =
   426 blanks-c.p.content =
   412    blanks-c.inlines
   427    blanks-c.inlines
       
   428 correct.p.content =
       
   429    correct.inlines
   413 pointing.p.content =
   430 pointing.p.content =
   414    pointing.inlines
   431    pointing.inlines
   415 
   432 
   416 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ list ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   433 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ list ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   417 
   434 
   427     | (attribute type {"glossary"}, item.glossary+) )
   444     | (attribute type {"glossary"}, item.glossary+) )
   428 }
   445 }
   429 blanks-c.list = element list {
   446 blanks-c.list = element list {
   430    block.head?,
   447    block.head?,
   431    (  (attribute type {"ordered"}?, blanks.item, blanks.item+)
   448    (  (attribute type {"ordered"}?, blanks.item, blanks.item+)
       
   449     | (attribute type {"glossary"}, item.glossary+) )
       
   450 }
       
   451 correct.list = element list {
       
   452    block.head?,
       
   453    (  (attribute type {"ordered"}?, correct.item, correct.item+)
   432     | (attribute type {"glossary"}, item.glossary+) )
   454     | (attribute type {"glossary"}, item.glossary+) )
   433 }
   455 }
   434 pointing.list = element list {
   456 pointing.list = element list {
   435    block.head?,
   457    block.head?,
   436    (  (attribute type {"ordered"}?, pointing.item, pointing.item+)
   458    (  (attribute type {"ordered"}?, pointing.item, pointing.item+)
   439 
   461 
   440 # ~~~~~~ item
   462 # ~~~~~~ item
   441 blanks.item = element item { blanks.item.content }
   463 blanks.item = element item { blanks.item.content }
   442 blanks-m.item = element item { blanks-m.item.content }
   464 blanks-m.item = element item { blanks-m.item.content }
   443 blanks-c.item = element item { blanks-c.item.content }
   465 blanks-c.item = element item { blanks-c.item.content }
       
   466 correct.item = element item { correct.item.content }
   444 pointing.item = element item { pointing.item.content }
   467 pointing.item = element item { pointing.item.content }
   445 
   468                         
   446 blanks.item.content =
   469 
   447    blanks.inlines
   470 blanks.item.content = blanks.inlines | blanks.block+
   448  | blanks.block+
   471 blanks-m.item.content = blanks-m.inlines | blanks-m.block+
   449 blanks-m.item.content =
   472 blanks-c.item.content = blanks-c.inlines | blanks-c.block+
   450    blanks-m.inlines
   473 correct.item.content = correct.inlines | correct.block+
   451  | blanks-m.block+
   474 pointing.item.content = pointing.inlines | pointing.block+
   452 blanks-c.item.content =
       
   453    blanks-c.inlines
       
   454  | blanks-c.block+
       
   455 pointing.item.content =
       
   456    pointing.inlines
       
   457  | pointing.block+
       
   458 
   475 
   459 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blockquote ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   476 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ blockquote ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   460 
   477 
   461 blanks.blockquote = element blockquote {
   478 blanks.blockquote = element blockquote {
   462    blockquote.attributes, blanks.blockquote.content }
   479    blockquote.attributes, blanks.blockquote.content }
   463 blanks-m.blockquote = element blockquote {
   480 blanks-m.blockquote = element blockquote {
   464    blockquote.attributes, blanks-m.blockquote.content }
   481    blockquote.attributes, blanks-m.blockquote.content }
   465 blanks-c.blockquote = element blockquote {
   482 blanks-c.blockquote = element blockquote {
   466    blockquote.attributes, blanks-c.blockquote.content }
   483    blockquote.attributes, blanks-c.blockquote.content }
       
   484 correct.blockquote = element blockquote {
       
   485    blockquote.attributes, correct.blockquote.content }
   467 pointing.blockquote = element blockquote {
   486 pointing.blockquote = element blockquote {
   468    blockquote.attributes, pointing.blockquote.content }
   487    blockquote.attributes, pointing.blockquote.content }
   469 
   488 
   470 blanks.blockquote.content =
   489 blanks.blockquote.content =
   471    block.head?,
   490    block.head?,
   476    (blanks-m.p | speech | blanks-m.list)+,
   495    (blanks-m.p | speech | blanks-m.list)+,
   477    attribution?
   496    attribution?
   478 blanks-c.blockquote.content =
   497 blanks-c.blockquote.content =
   479    block.head?,
   498    block.head?,
   480    (blanks-c.p | speech | blanks-c.list)+,
   499    (blanks-c.p | speech | blanks-c.list)+,
       
   500    attribution?
       
   501 correct.blockquote.content =
       
   502    block.head?,
       
   503    (correct.p | speech | correct.list)+,
   481    attribution?
   504    attribution?
   482 pointing.blockquote.content =
   505 pointing.blockquote.content =
   483    block.head?,
   506    block.head?,
   484    (pointing.p | speech | pointing.list)+,
   507    (pointing.p | speech | pointing.list)+,
   485    attribution?
   508    attribution?
   488 
   511 
   489 # ~~~~~~ speech
   512 # ~~~~~~ speech
   490 blanks.speech = element speech { blanks.speech.content }
   513 blanks.speech = element speech { blanks.speech.content }
   491 blanks-m.speech = element speech { blanks-m.speech.content }
   514 blanks-m.speech = element speech { blanks-m.speech.content }
   492 blanks-c.speech = element speech { blanks-c.speech.content }
   515 blanks-c.speech = element speech { blanks-c.speech.content }
       
   516 correct.speech = element speech { correct.speech.content }
   493 pointing.speech = element speech { pointing.speech.content }
   517 pointing.speech = element speech { pointing.speech.content }
   494 
   518 
   495 blanks.speech.content =
   519 blanks.speech.content =
   496    blanks.speaker?,
   520    blanks.speaker?,
   497    stage?,
   521    stage?,
   502    (blanks-m.p | blanks-m.blockquote)+
   526    (blanks-m.p | blanks-m.blockquote)+
   503 blanks-c.speech.content =
   527 blanks-c.speech.content =
   504    blanks-c.speaker?,
   528    blanks-c.speaker?,
   505    stage?,
   529    stage?,
   506    (blanks-c.p | blanks-c.blockquote)+
   530    (blanks-c.p | blanks-c.blockquote)+
       
   531 correct.speech.content =
       
   532    correct.speaker?,
       
   533    stage?,
       
   534    (correct.p | correct.blockquote)+
   507 pointing.speech.content =
   535 pointing.speech.content =
   508    pointing.speaker?,
   536    pointing.speaker?,
   509    stage?,
   537    stage?,
   510    (pointing.p | pointing.blockquote)+
   538    (pointing.p | pointing.blockquote)+
   511 
   539 
   512 # ~~~~~~ speaker
   540 # ~~~~~~ speaker
   513 blanks.speaker = element speaker { blanks.speaker.content }
   541 blanks.speaker = element speaker { blanks.speaker.content }
   514 blanks-m.speaker = element speaker { blanks-m.speaker.content }
   542 blanks-m.speaker = element speaker { blanks-m.speaker.content }
   515 blanks-c.speaker = element speaker { blanks-c.speaker.content }
   543 blanks-c.speaker = element speaker { blanks-c.speaker.content }
       
   544 correct.speaker = element speaker { correct.speaker.content }
   516 pointing.speaker = element speaker { pointing.speaker.content }
   545 pointing.speaker = element speaker { pointing.speaker.content }
   517 
   546 
   518 blanks.speaker.content = blanks.inlines
   547 blanks.speaker.content = blanks.inlines
   519 blanks-m.speaker.content = blanks-m.inlines
   548 blanks-m.speaker.content = blanks-m.inlines
   520 blanks-c.speaker.content = blanks-c.inlines
   549 blanks-c.speaker.content = blanks-c.inlines
       
   550 correct.speaker.content = correct.inlines
   521 pointing.speaker.content = pointing.inlines
   551 pointing.speaker.content = pointing.inlines
   522 
   552 
   523 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   553 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   524 
   554 
   525 # ~~~~~~ table
   555 # ~~~~~~ table
   526 blanks.table = element table { table.attributes, blanks.table.content }
   556 blanks.table = element table { table.attributes, blanks.table.content }
   527 blanks-m.table = element table { table.attributes, blanks-m.table.content }
   557 blanks-m.table = element table { table.attributes, blanks-m.table.content }
   528 blanks-c.table = element table { table.attributes, blanks-m.table.content }
   558 blanks-c.table = element table { table.attributes, blanks-m.table.content }
       
   559 correct.table = element table { table.attributes, correct.table.content }
   529 pointing.table = element table { table.attributes, pointing.table.content }
   560 pointing.table = element table { table.attributes, pointing.table.content }
   530 
   561 
   531 blanks.table.content =
   562 blanks.table.content =
   532    block.head?,
   563    block.head?,
   533    ((thead?, blanks.tbody+) | blanks.tr+),
   564    ((thead?, blanks.tbody+) | blanks.tr+),
   538    blanks-m.table.caption?
   569    blanks-m.table.caption?
   539 blanks-c.table.content =
   570 blanks-c.table.content =
   540    block.head?,
   571    block.head?,
   541    ((thead?, blanks-c.tbody+) | blanks-c.tr+),
   572    ((thead?, blanks-c.tbody+) | blanks-c.tr+),
   542    blanks-c.table.caption?
   573    blanks-c.table.caption?
       
   574 correct.table.content =
       
   575    block.head?,
       
   576    ((thead?, correct.tbody+) | correct.tr+),
       
   577    correct.table.caption?
   543 pointing.table.content =
   578 pointing.table.content =
   544    block.head?,
   579    block.head?,
   545    ((thead?, pointing.tbody+) | pointing.tr+),
   580    ((thead?, pointing.tbody+) | pointing.tr+),
   546    pointing.table.caption?
   581    pointing.table.caption?
   547 
   582 
   548 # ~~~~~~ tbody
   583 # ~~~~~~ tbody
   549 blanks.tbody = element tbody { blanks.tbody.content }
   584 blanks.tbody = element tbody { blanks.tbody.content }
   550 blanks-m.tbody = element tbody { blanks-m.tbody.content }
   585 blanks-m.tbody = element tbody { blanks-m.tbody.content }
   551 blanks-c.tbody = element tbody { blanks-m.tbody.content }
   586 blanks-c.tbody = element tbody { blanks-m.tbody.content }
       
   587 correct.tbody = element tbody { correct.tbody.content }
   552 pointing.tbody = element tbody { pointing.tbody.content }
   588 pointing.tbody = element tbody { pointing.tbody.content }
   553 
   589 
   554 blanks.tbody.content =
   590 blanks.tbody.content =
   555    blanks.tr+
   591    blanks.tr+
   556 blanks-m.tbody.content =
   592 blanks-m.tbody.content =
   557    blanks-m.tr+
   593    blanks-m.tr+
   558 blanks-c.tbody.content =
   594 blanks-c.tbody.content =
   559    blanks-c.tr+
   595    blanks-c.tr+
       
   596 correct.tbody.content =
       
   597    correct.tr+
   560 pointing.tbody.content =
   598 pointing.tbody.content =
   561    pointing.tr+
   599    pointing.tr+
   562 
   600 
   563 # ~~~~~~ tr
   601 # ~~~~~~ tr
   564 blanks.tr = element tr { tr.attributes, blanks.tr.content }
   602 blanks.tr = element tr { tr.attributes, blanks.tr.content }
   565 blanks-m.tr = element tr { tr.attributes, blanks-m.tr.content }
   603 blanks-m.tr = element tr { tr.attributes, blanks-m.tr.content }
   566 blanks-c.tr = element tr { tr.attributes, blanks-c.tr.content }
   604 blanks-c.tr = element tr { tr.attributes, blanks-c.tr.content }
       
   605 correct.tr = element tr { tr.attributes, correct.tr.content }
   567 pointing.tr = element tr { tr.attributes, pointing.tr.content }
   606 pointing.tr = element tr { tr.attributes, pointing.tr.content }
   568 
   607 
   569 blanks.tr.content =
   608 blanks.tr.content =
   570   (blanks.td | blanks.th)+
   609   (blanks.td | blanks.th)+
   571 blanks-m.tr.content =
   610 blanks-m.tr.content =
   572   (blanks-m.td | blanks-m.th)+
   611   (blanks-m.td | blanks-m.th)+
   573 blanks-c.tr.content =
   612 blanks-c.tr.content =
   574   (blanks-c.td | blanks-c.th)+
   613   (blanks-c.td | blanks-c.th)+
       
   614 correct.tr.content =
       
   615   (correct.td | correct.th)+
   575 pointing.tr.content =
   616 pointing.tr.content =
   576   (pointing.td | pointing.th)+
   617   (pointing.td | pointing.th)+
   577 
   618 
   578 # ~~~~~~ td, th
   619 # ~~~~~~ td, th
   579 blanks.td = element td { td.attributes, blanks.td.content }
   620 blanks.td = element td { td.attributes, blanks.td.content }
   580 blanks.th = element th { td.attributes, blanks.td.content }
   621 blanks.th = element th { td.attributes, blanks.td.content }
   581 blanks-m.td = element td { td.attributes, blanks-m.td.content }
   622 blanks-m.td = element td { td.attributes, blanks-m.td.content }
   582 blanks-m.th = element th { td.attributes, blanks-m.td.content }
   623 blanks-m.th = element th { td.attributes, blanks-m.td.content }
   583 blanks-c.td = element td { td.attributes, blanks-c.td.content }
   624 blanks-c.td = element td { td.attributes, blanks-c.td.content }
   584 blanks-c.th = element th { td.attributes, blanks-c.td.content }
   625 blanks-c.th = element th { td.attributes, blanks-c.td.content }
       
   626 correct.td = element td { td.attributes, correct.td.content }
       
   627 correct.th = element th { td.attributes, correct.td.content }
   585 pointing.td = element td { td.attributes, pointing.td.content }
   628 pointing.td = element td { td.attributes, pointing.td.content }
   586 pointing.th = element th { td.attributes, pointing.td.content }
   629 pointing.th = element th { td.attributes, pointing.td.content }
   587 
   630 
   588 blanks.td.content =
   631 blanks.td.content =
   589    blanks.inlines
   632    blanks.inlines
   592    blanks-m.inlines
   635    blanks-m.inlines
   593  | (blanks-m.p | blanks-m.media)+
   636  | (blanks-m.p | blanks-m.media)+
   594 blanks-c.td.content =
   637 blanks-c.td.content =
   595    blanks-c.inlines
   638    blanks-c.inlines
   596  | (blanks-c.p | blanks-c.media)+
   639  | (blanks-c.p | blanks-c.media)+
       
   640 correct.td.content =
       
   641    correct.inlines
       
   642  | (correct.p | media)+
   597 pointing.td.content =
   643 pointing.td.content =
   598    pointing.inlines
   644    pointing.inlines
   599  | (pointing.p | media)+
   645  | (pointing.p | media)+
   600 
   646 
   601 # ~~~~~~ table.caption
   647 # ~~~~~~ table.caption
   602 blanks.table.caption = element caption { blanks.caption.content }
   648 blanks.table.caption = element caption { blanks.caption.content }
   603 blanks-m.table.caption = element caption { blanks-m.caption.content }
   649 blanks-m.table.caption = element caption { blanks-m.caption.content }
   604 blanks-c.table.caption = element caption { blanks-c.caption.content }
   650 blanks-c.table.caption = element caption { blanks-c.caption.content }
       
   651 correct.table.caption = element caption { correct.caption.content }
   605 pointing.table.caption = element caption { pointing.caption.content }
   652 pointing.table.caption = element caption { pointing.caption.content }
   606 
   653 
   607 blanks.caption.content =
   654 blanks.caption.content =
   608    blanks.inlines
   655    blanks.inlines
   609  | (blanks.p | speech | blanks.list | blockquote)+
   656  | (blanks.p | speech | blanks.list | blockquote)+
   611    blanks-m.inlines
   658    blanks-m.inlines
   612  | (blanks-m.p | speech | blanks-m.list | blockquote)+
   659  | (blanks-m.p | speech | blanks-m.list | blockquote)+
   613 blanks-c.caption.content =
   660 blanks-c.caption.content =
   614    blanks-c.inlines
   661    blanks-c.inlines
   615  | (blanks-c.p | speech | blanks-c.list | blockquote)+
   662  | (blanks-c.p | speech | blanks-c.list | blockquote)+
       
   663 correct.caption.content =
       
   664    correct.inlines
       
   665  | (correct.p | speech | correct.list | blockquote)+
   616 pointing.caption.content =
   666 pointing.caption.content =
   617    pointing.inlines
   667    pointing.inlines
   618  | (pointing.p | speech | pointing.list | blockquote)+
   668  | (pointing.p | speech | pointing.list | blockquote)+
   619 
   669 
   620 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ media ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   670 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ media ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   621 
   671 
   622 # ~~~~~~ media
   672 # ~~~~~~ media
   623 blanks.media = element media { media.attributes, blanks.media.content }
   673 blanks.media = element media { media.attributes, blanks.media.content }
   624 blanks-m.media = element media { media.attributes, blanks-m.media.content }
   674 blanks-m.media = element media { media.attributes, blanks-m.media.content }
   625 blanks-c.media = element media { media.attributes, blanks-c.media.content }
   675 blanks-c.media = element media { media.attributes, blanks-c.media.content }
       
   676 correct.media = element media { media.attributes, correct.media.content }
   626 pointing.media = element media { media.attributes, pointing.media.content }
   677 pointing.media = element media { media.attributes, pointing.media.content }
   627 
   678 
   628 blanks.media.content =
   679 blanks.media.content =
   629    block.head?,
   680    block.head?,
   630    (blanks.image | audio | video)+,
   681    (blanks.image | audio | video)+,
   637    link?
   688    link?
   638 blanks-c.media.content =
   689 blanks-c.media.content =
   639    block.head?,
   690    block.head?,
   640    (image | audio | video)+,
   691    (image | audio | video)+,
   641    blanks-c.media.caption?,
   692    blanks-c.media.caption?,
       
   693    link?
       
   694 correct.media.content =
       
   695    block.head?,
       
   696    (image | audio | video)+,
       
   697    correct.media.caption?,
   642    link?
   698    link?
   643 pointing.media.content =
   699 pointing.media.content =
   644    block.head?,
   700    block.head?,
   645    (image | audio | video)+,
   701    (image | audio | video)+,
   646    pointing.media.caption?,
   702    pointing.media.caption?,
   682    caption.attributes, blanks.caption.content }
   738    caption.attributes, blanks.caption.content }
   683 blanks-m.media.caption = element caption {
   739 blanks-m.media.caption = element caption {
   684    caption.attributes, blanks-m.caption.content }
   740    caption.attributes, blanks-m.caption.content }
   685 blanks-c.media.caption = element caption {
   741 blanks-c.media.caption = element caption {
   686    caption.attributes, blanks-c.caption.content }
   742    caption.attributes, blanks-c.caption.content }
       
   743 correct.media.caption = element caption {
       
   744    caption.attributes, correct.caption.content }
   687 pointing.media.caption = element caption {
   745 pointing.media.caption = element caption {
   688    caption.attributes, pointing.caption.content }
   746    caption.attributes, pointing.caption.content }
   689 
   747 
   690 # ~~~~~~~~~~~~~~~~~~~~~~~~ choices.right, choices.wrong ~~~~~~~~~~~~~~~~~~~~~~~
   748 # ~~~~~~~~~~~~~~~~~~~~~~~~ choices.right, choices.wrong ~~~~~~~~~~~~~~~~~~~~~~~
   691 
   749 
   701 blanks.intruders = element intruders { blanks.intruders.content }
   759 blanks.intruders = element intruders { blanks.intruders.content }
   702 blanks-m.intruders = element intruders { blanks-m.intruders.content }
   760 blanks-m.intruders = element intruders { blanks-m.intruders.content }
   703 
   761 
   704 blanks.intruders.content = blank+
   762 blanks.intruders.content = blank+
   705 blanks-m.intruders.content = blank-m+
   763 blanks-m.intruders.content = blank-m+
       
   764 
       
   765 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ correct.intruders ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       
   766 
       
   767 correct.intruders = element intruders { correct.intruders.content }
       
   768 
       
   769 correct.intruders.content = char+
   706 
   770 
   707 # ~~~~~~~~~~~~~~~~~~~~~~~ matching.intruders, match.item ~~~~~~~~~~~~~~~~~~~~~~
   771 # ~~~~~~~~~~~~~~~~~~~~~~~ matching.intruders, match.item ~~~~~~~~~~~~~~~~~~~~~~
   708 
   772 
   709 # ~~~~~~~ matching.intruders
   773 # ~~~~~~~ matching.intruders
   710 matching.intruders = element intruders { matching.intruders.content }
   774 matching.intruders = element intruders { matching.intruders.content }
   869  & nowrap*
   933  & nowrap*
   870 
   934 
   871  & blank-c*
   935  & blank-c*
   872 }
   936 }
   873 
   937 
   874 pointing.inlines = mixed {
   938 correct.inlines = mixed {
   875    sup*
   939    sup*
   876  & sub*
   940  & sub*
   877  & var*
   941  & var*
   878  & number*
   942  & number*
   879  & acronym*
   943  & acronym*
   898  & image*
   962  & image*
   899  & audio*
   963  & audio*
   900  & smil*
   964  & smil*
   901  & nowrap*
   965  & nowrap*
   902 
   966 
       
   967  & char*
       
   968 }
       
   969 
       
   970 pointing.inlines = mixed {
       
   971    sup*
       
   972  & sub*
       
   973  & var*
       
   974  & number*
       
   975  & acronym*
       
   976  & warning*
       
   977 
       
   978  & highlight*
       
   979  & emphasis*
       
   980  & mentioned*
       
   981  & literal*
       
   982  & term*
       
   983  & stage*
       
   984  & name*
       
   985  & foreign*
       
   986  & date*
       
   987  & math*
       
   988  & quote*
       
   989  & initial*
       
   990  & note*
       
   991  & link*
       
   992  & anchor*
       
   993  & index*
       
   994  & image*
       
   995  & audio*
       
   996  & smil*
       
   997  & nowrap*
       
   998 
   903  & point*
   999  & point*
   904 }
  1000 }
   905 
  1001 
   906 # ~~~~~~~~~~~~~~~~~~~~~~~~~~ blank, blank-m, blank-c ~~~~~~~~~~~~~~~~~~~~~~~~~~
  1002 # ~~~~~~~~~~~~~~~~~~~~~~~~~~ blank, blank-m, blank-c ~~~~~~~~~~~~~~~~~~~~~~~~~~
   907 
  1003 
   909 blank = element blank { blank.attributes, blank.content }
  1005 blank = element blank { blank.attributes, blank.content }
   910 
  1006 
   911 blank.attributes =
  1007 blank.attributes =
   912    area.attribute?
  1008    area.attribute?
   913  & long.attribute?
  1009  & long.attribute?
   914  & function.attribute?
       
   915 area.attribute = attribute area { xsd:boolean }
  1010 area.attribute = attribute area { xsd:boolean }
   916 function.attribute = attribute function { 'accent' | 'uppercase' }
       
   917 
  1011 
   918 blank.content =
  1012 blank.content =
   919    text
  1013    text
   920  | (s+, help?, answer?)
  1014  | (s+, help?, answer?)
   921 
  1015 
   947 s-m.content =
  1041 s-m.content =
   948    p
  1042    p
   949  | math
  1043  | math
   950  | image
  1044  | image
   951  | audio
  1045  | audio
       
  1046       
       
  1047 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ char ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       
  1048 
       
  1049 char = element char { char.attributes, char.content }
       
  1050 
       
  1051 char.attributes = function.attribute?
       
  1052 function.attribute = attribute function { "accent" | "uppercase" }
       
  1053 
       
  1054 char.content = text
   952 
  1055 
   953 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ point ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1056 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ point ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   954 
  1057 
   955 point = element point { point.attributes, point.content }
  1058 point = element point { point.attributes, point.content }
   956 
  1059