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?, |
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?, |
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)+, |
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 } |