prefig 0.4.6.dev20250929053415__py3-none-any.whl → 0.4.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,787 +1,2250 @@
1
- start = Diagram
2
- Diagram =
3
- element diagram {
4
- attribute dimensions { text },
5
- attribute margins { text }?,
6
- (Annotations?
7
- & DefinitionElements*
8
- & GraphicalElements*
9
- & GroupElements*
10
- & Caption?)
11
- }
12
- Caption = element caption { text }
13
- # Annotations are constructed with a single #annotations element,
14
- # which contains a single #annotation
15
- Annotations = element annotations { Annotation }
16
- AnnotationAttributes =
17
- attribute ref { text },
18
- AnnotatedElementAttributes
19
- AnnotatedElementAttributes =
20
- attribute text { text }?,
21
- attribute speech { text }?,
22
- attribute circular { "yes" | "no" }?,
23
- attribute sonify { "yes" | "no" }?
24
- # An #annotation can contain any number of #annotation elements
25
- Annotation = element annotation { AnnotationAttributes, Annotation* }
26
- # Most elements can be annotated
27
- CommonAttributes =
28
- attribute annotate { "yes" | "no" }?,
29
- AnnotatedElementAttributes?
30
- # next come some definition elements that can be added anywhere
31
- DefinitionElements =
32
- Definition?, Derivative?, DE-Solution?, Define-Shapes?, Read
33
- Definition =
34
- element definition {
35
- text,
36
- attribute substitution { "yes" | "no" }?,
37
- attribute id-suffix { text }?
38
- }
39
- Derivative =
40
- element derivative {
41
- attribute function { text },
42
- attribute name { text }
43
- }
44
- DE-Solution =
45
- element de-solve {
46
- attribute name { text },
47
- attribute function { text },
48
- attribute t0 { text },
49
- attribute y0 { text },
50
- attribute t1 { text }?,
51
- attribute method { text }?,
52
- attribute N { text }?,
53
- attribute max-step { text }?
54
- }
55
- Define-Shapes = element define-shapes { ShapeElements+ }
56
- Read =
57
- element read {
58
- attribute filename { text },
59
- attribute name { text },
60
- attribute delimiter { text }?,
61
- attribute quotechar { text }?,
62
- attribute string-columns { text }?,
63
- attribute type { text }
64
- }
65
- # the next elements group other elements together
66
- GroupElements = Coordinates? & Group? & Repeat? & Clip? & Transform?
67
- # coordinates are special in that they can contain everything a diagram can
68
- Coordinates =
69
- element coordinates {
70
- attribute bbox { text },
71
- attribute destination { text }?,
72
- attribute aspect-ratio { text }?,
73
- attribute preserve-y-range { "yes" | "no" }?,
74
- (DefinitionElements*
75
- & GraphicalElements*
76
- & GroupElements*
77
- & TransformElements*)
78
- }
79
- Group =
80
- element group {
81
- attribute at { text }?,
82
- attribute outline { text }?,
83
- attribute transform { text }?,
84
- CommonAttributes,
85
- (DefinitionElements*
86
- & GraphicalElements*
87
- & GroupElements*
88
- & TransformElements*)
89
- }
90
- Repeat =
91
- element repeat {
92
- attribute parameter { text },
93
- attribute at { text }?,
94
- CommonAttributes,
95
- (DefinitionElements*
96
- & GraphicalElements*
97
- & GroupElements*
98
- & TransformElements*)
99
- }
100
- Clip =
101
- element clip {
102
- attribute at { text }?,
103
- attribute shape { text },
104
- CommonAttributes,
105
- (DefinitionElements*
106
- & GraphicalElements*
107
- & GroupElements*
108
- & TransformElements)
109
- }
110
- Transform =
111
- element transform {
112
- DefinitionElements*
113
- & GraphicalElements*
114
- & GroupElements*
115
- & TransformElements*
116
- }
117
- TransformElements =
118
- element translate {
119
- attribute by { text }
120
- }*
121
- & element rotate {
122
- attribute by { text },
123
- attribute about { text }?,
124
- attribute degrees { "yes" | "no" }?
125
- }*
126
- & element scale {
127
- attribute by { text }
128
- }*
129
- # attributes and text for labels
130
- LabelAttributes =
131
- attribute alignment { text }?,
132
- attribute offset { text }?,
133
- attribute justify { "right" | "left" | "center" }?,
134
- attribute interline { text }?,
135
- attribute scale { text }?,
136
- attribute rotate { text }?,
137
- attribute clear-background { "yes" | "no" }?,
138
- attribute background-margin { text }?,
139
- attribute color { text }?
140
- Math =
141
- element m {
142
- attribute color { text }?
143
- & text
144
- }
145
- Bold =
146
- element b {
147
- attribute color { text }?
148
- & text
149
- & Italic*
150
- }
151
- Italic =
152
- element it {
153
- attribute color { text }?
154
- & text
155
- & Bold*
156
- }
157
- Plain =
158
- element plain {
159
- attribute color { text }?
160
- & text
161
- }
162
- Newline = element newline { empty }
163
- LabelElements = Math* & Bold* & Italic* & Plain* & Newline*
164
- LabelText = text | LabelElements*
165
- Label =
166
- element label {
167
- attribute at { text }?,
168
- attribute anchor { text },
169
- LabelAttributes,
170
- LabelText+
171
- }
172
- XLabel =
173
- element xlabel {
174
- attribute at { text }?,
175
- LabelAttributes,
176
- LabelText+
177
- }
178
- YLabel =
179
- element ylabel {
180
- attribute at { text }?,
181
- LabelAttributes,
182
- LabelText+
183
- }
184
- # elements that can go inside a path
185
- PathElements =
186
- element moveto {
187
- attribute point { text }?,
188
- attribute distance { text }?,
189
- attribute heading { text }?,
190
- attribute degrees { "yes" | "no" }?
191
- }*
192
- & element rmoveto {
193
- attribute point { text }?,
194
- attribute distance { text }?,
195
- attribute heading { text }?,
196
- attribute degrees { "yes" | "no" }?
197
- }*
198
- & element lineto {
199
- attribute point { text },
200
- attribute decoration { text }?,
201
- attribute distance { text }?,
202
- attribute heading { text }?,
203
- attribute degrees { "yes" | "no" }?
204
- }*
205
- & element rlineto {
206
- attribute point { text },
207
- attribute decoration { text }?,
208
- attribute distance { text }?,
209
- attribute heading { text }?,
210
- attribute degrees { "yes" | "no" }?
211
- }*
212
- & element horizontal {
213
- attribute distance { text },
214
- attribute decoration { text }?
215
- }*
216
- & element vertical {
217
- attribute distance { text },
218
- attribute decoration { text }?
219
- }*
220
- & element cubic-bezier {
221
- attribute controls { text }
222
- }*
223
- & element quadratic-bezier {
224
- attribute controls { text }
225
- }*
226
- & element arc {
227
- attribute center { text },
228
- attribute radius { text },
229
- attribute range { text },
230
- attribute degrees { text }?
231
- }*
232
- & Graph*
233
- & Parametric-Curve*
234
- & Polygon*
235
- & Spline*
236
- & element repeat {
237
- attribute parameter { text },
238
- PathElements
239
- }*
240
- ShapeElements =
241
- Arc*
242
- & Area-Between-Curves*
243
- & Area-Under-Curve*
244
- & Circle*
245
- & Ellipse*
246
- & Graph*
247
- & Parametric-Curve*
248
- & Path*
249
- & Polygon*
250
- & Rectangle*
251
- & Shape*
252
- & Spline*
253
- # graphical elements can be stroked and possibly filled
254
- StrokeAttributes =
255
- attribute stroke { text }?,
256
- attribute stroke-opacity { text }?,
257
- attribute opacity { text }?,
258
- attribute thickness { text }?,
259
- attribute miterlimit { text }?,
260
- attribute linejoin { text }?,
261
- attribute linecap { text }?,
262
- attribute dash { text }?,
263
- attribute cliptobbox { "yes" | "no" }?,
264
- attribute outline { "yes" | "no" }?
265
- FillAttributes =
266
- StrokeAttributes,
267
- attribute fill { text }?,
268
- attribute fill-opacity { text }?,
269
- attribute fill-rule { text }?
270
- # start defining the graphical elements
271
- GraphicalElements =
272
- Angle-Marker*
273
- & Arc*
274
- & Area-Between-Curves*
275
- & Area-Under-Curve*
276
- & Axes*
277
- & Circle*
278
- & Contour*
279
- & Ellipse*
280
- & Graph*
281
- & Grid*
282
- & Grid-Axes*
283
- & Histogram*
284
- & Image*
285
- & Implicit-Curve*
286
- & Label*
287
- & Legend*
288
- & Line*
289
- & Network*
290
- & Parametric-Curve*
291
- & Path*
292
- & Plot-DE-Solution*
293
- & Point*
294
- & Polygon*
295
- & Rectangle*
296
- & Riemann-Sum*
297
- & Scatter*
298
- & Shape*
299
- & Slope-Field*
300
- & Spline*
301
- & Tick-Mark*
302
- & Tangent-line*
303
- & Triangle*
304
- & Vector*
305
- & Vector-Field*
306
- Angle-Marker =
307
- element angle-marker {
308
- attribute at { text }?,
309
- attribute points { text },
310
- attribute radius { text }?,
311
- attribute arrow { "yes" | "no" }?,
312
- attribute arrow-width { text }?,
313
- attribute arrow-angles { text }?,
314
- LabelAttributes,
315
- StrokeAttributes,
316
- CommonAttributes,
317
- LabelText?
318
- }
319
- Arc =
320
- element arc {
321
- attribute at { text }?,
322
- attribute points { text }?,
323
- attribute center { text }?,
324
- attribute range { text }?,
325
- attribute radius { text },
326
- attribute sector { "yes" | "no" }?,
327
- attribute N { text }?,
328
- attribute degrees { "yes" | "no" }?,
329
- attribute arrows { text }?,
330
- attribute reverse { "yes" | "no" }?,
331
- attribute arrow-width { text }?,
332
- attribute arrow-angles { text }?,
333
- FillAttributes,
334
- CommonAttributes
335
- }
336
- Area-Between-Curves =
337
- element area-between-curves {
338
- attribute at { text }?,
339
- attribute function1 { text }?,
340
- attribute function2 { text }?,
341
- attribute functions { text }?,
342
- attribute domain { text }?,
343
- attribute N { text }?,
344
- attribute coordinates { "polar" | "cartesian" }?,
345
- attribute domain-degrees { "yes" | "no" }?,
346
- FillAttributes,
347
- CommonAttributes
348
- }
349
- Area-Under-Curve =
350
- element area-under-curve {
351
- attribute at { text }?,
352
- attribute function { text },
353
- attribute domain { text }?,
354
- attribute N { text }?,
355
- attribute coordinates { "polar" | "cartesian" }?,
356
- attribute domain-degrees { "yes" | "no" }?,
357
- FillAttributes,
358
- CommonAttributes
359
- }
360
- # grids and axes
361
- Axes =
362
- element axes {
363
- attribute at { text }?,
364
- attribute hlabels { text }?,
365
- attribute vlabels { text }?,
366
- attribute xlabel { text }?,
367
- attribute ylabel { text }?,
368
- attribute arrows { text }?,
369
- attribute decorations { "yes" | "no" }?,
370
- attribute h-pi-format { "yes" | "no" }?,
371
- attribute v-pi-format { "yes" | "no" }?,
372
- attribute h-frame { "bottom" | "top" }?,
373
- attribute v-frame { "left" | "right" }?,
374
- attribute stroke { text }?,
375
- attribute thickness { text }?,
376
- attribute tick-size { text }?,
377
- attribute axes { "horizontal" | "vertical" }?,
378
- attribute bounding-box { "yes" | "no" }?,
379
- attribute h-zero-label { "yes" | "no" }?,
380
- attribute v-zero-label { "yes" | "no" }?,
381
- attribute label-commas { "yes" | "no" }?,
382
- CommonAttributes,
383
- XLabel?,
384
- YLabel?
385
- }
386
- Grid =
387
- element grid {
388
- attribute at { text }?,
389
- attribute spacings { text }?,
390
- attribute hspacing { text }?,
391
- attribute vspacing { text }?,
392
- attribute basis { text }?,
393
- attribute h-pi-format { "yes" | "no" }?,
394
- attribute v-pi-format { "yes" | "no" }?,
395
- attribute stroke { text }?,
396
- attribute thickness { text }?,
397
- attribute coordinates { text }?,
398
- attribute spacing-degrees { "yes" | "no" }?,
399
- attribute scales { "linear" | "semilogx" | "semilogy" | "loglog" }?,
400
- Stroke-Attributes,
401
- CommonAttributes
402
- }
403
- Grid-Axes =
404
- element grid-axes {
405
- attribute at { text }?,
406
- attribute spacings { text }?,
407
- attribute hspacing { text }?,
408
- attribute vspacing { text }?,
409
- attribute h-pi-format { "yes" | "no" }?,
410
- attribute v-pi-format { "yes" | "no" }?,
411
- attribute h-frame { "bottom" | "top" }?,
412
- attribute v-frame { "left" | "right" }?,
413
- attribute hlabels { text }?,
414
- attribute vlabels { text }?,
415
- attribute xlabel { text }?,
416
- attribute ylabel { text }?,
417
- attribute arrows { text }?,
418
- attribute decorations { "yes" | "no" }?,
419
- attribute tick-size { text }?,
420
- attribute axes { "horizontal" | "vertical" }?,
421
- attribute bounding-box { "yes" | "no" }?,
422
- attribute h-zero-label { "yes" | "no" }?,
423
- attribute v-zero-label { "yes" | "no" }?,
424
- attribute label-commas { "yes" | "no" }?,
425
- StrokeAttributes,
426
- CommonAttributes,
427
- XLabel?,
428
- YLabel?
429
- }
430
- Tick-Mark =
431
- element tick-mark {
432
- attribute at { text }?,
433
- attribute location { text },
434
- attribute axis { text }?,
435
- attribute stroke { text }?,
436
- attribute size { text }?,
437
- attribute thickness { text }?,
438
- StrokeAttributes,
439
- LabelAttributes,
440
- LabelText?
441
- }
442
- Contour =
443
- element contour {
444
- attribute at { text }?,
445
- attribute function { text },
446
- attribute k { text }?,
447
- attribute depth { text }?,
448
- attribute initial-depth { text }?,
449
- StrokeAttributes,
450
- CommonAttributes
451
- }
452
- Circle =
453
- element circle {
454
- attribute at { text }?,
455
- attribute center { text },
456
- attribute radius { text }?,
457
- FillAttributes,
458
- CommonAttributes
459
- }
460
- Ellipse =
461
- element ellipse {
462
- attribute at { text }?,
463
- attribute center { text },
464
- attribute axes { text }?,
465
- attribute rotate { text }?,
466
- attribute degrees { text }?,
467
- attribute N { text }?,
468
- StrokeAttributes,
469
- CommonAttributes
470
- }
471
- Graph =
472
- element graph {
473
- attribute at { text }?,
474
- attribute function { text },
475
- attribute N { text }?,
476
- attribute domain { text }?,
477
- attribute coordinates { "polar" | "coordinates" }?,
478
- attribute domain-degress { "yes" | "no" }?,
479
- attribute closed { "yes" | "no" }?,
480
- attribute fill { text }?,
481
- StrokeAttributes,
482
- CommonAttributes
483
- }
484
- Image =
485
- element image {
486
- attribute at { text }?,
487
- attribute source { text },
488
- attribute lower-left { text }?,
489
- attribute center { text }?,
490
- attribute dimensions { text }?,
491
- attribute opacity { text }?,
492
- attribute filetype { "svg" | "png" | "gif" | "jpeg" | "jpg" }?,
493
- attribute rotate { text }?,
494
- attribute scale { text }?
495
- }
496
- Histogram =
497
- element histogram {
498
- attribute at { text }?,
499
- attribute data { text },
500
- attribute min { text }?,
501
- attribute max { text }?,
502
- attribute bins { text }?,
503
- attribute bin-text { text }?,
504
- attribute annotate { "yes" | "no" }?,
505
- attribute text { text }?,
506
- FillAttributes,
507
- CommonAttributes
508
- }
509
- Implicit-Curve =
510
- element implicit-curve {
511
- attribute at { text }?,
512
- attribute function { text },
513
- attribute k { text }?,
514
- attribute depth { text }?,
515
- attribute initial-depth { text }?,
516
- StrokeAttributes,
517
- CommonAttributes
518
- }
519
- Legend =
520
- element legend {
521
- attribute at { text }?,
522
- attribute anchor { text },
523
- attribute alignment { text }?,
524
- attribute vertical-skip { text }?,
525
- attribute scale { text }?,
526
- attribute stroke { text }?,
527
- attribute opacity { text }?,
528
- element item {
529
- attribute ref { text },
530
- LabelText+
531
- }+
532
- }
533
- Line =
534
- element line {
535
- attribute at { text }?,
536
- attribute endpoints { text }?,
537
- attribute p1 { text }?,
538
- attribute p2 { text }?,
539
- attribute endpoint-offsets { text }?,
540
- attribute infinite { "yes" | "no" }?,
541
- attribute arrows { text }?,
542
- attribute arrow-width { text }?,
543
- attribute arrow-angles { text }?,
544
- attribute reverse { "yes" | "no" }?,
545
- attribute additional-arrows { "yes" | "no" }?,
546
- StrokeAttributes,
547
- CommonAttributes
548
- }
549
- Network =
550
- element network {
551
- attribute at { text }?,
552
- attribute graph { text }?,
553
- attribute directed { "yes" | "no" }?,
554
- attribute arrows { "end" | "middle" }?,
555
- attribute bipartite-set { text }?,
556
- attribute alignment { "vertical", "horizontal" }?,
557
- attribute loop-scale { text }?,
558
- attribute layout { text }?,
559
- attribute seed { text }?,
560
- attribute start { text }?,
561
- attribute scale { text }?,
562
- attribute rotate { text }?,
563
- attribute edge-stroke { text }?,
564
- attribute edge-thickness { text }?,
565
- attribute edge-dash { text }?,
566
- attribute node-fill { text }?,
567
- attribute node-stroke { text }?,
568
- attribute node-thickness { text }?,
569
- attribute node-style { text }?,
570
- attribute node-size { text }?,
571
- attribute labels { "yes" | "no" }?,
572
- attribute label-dictionary { text }?,
573
- (element node {
574
- attribute at { text }?,
575
- attribute p { text }?,
576
- attribute edges { text }?,
577
- attribute loop-orientation { text }?,
578
- attribute style { text }?,
579
- FillAttributes,
580
- LabelAttributes,
581
- LabelText?
582
- }*
583
- & element edge {
584
- attribute at { text }?,
585
- attribute vertices { text },
586
- attribute weight { text }?,
587
- attribute loop-scale { text }?,
588
- attribute label-location { text }?,
589
- StrokeAttributes,
590
- LabelAttributes,
591
- LabelText?
592
- }*),
593
- CommonAttributes
594
- }
595
- Parametric-Curve =
596
- element parametric-curve {
597
- attribute at { text }?,
598
- attribute function { text },
599
- attribute domain { text },
600
- attribute N { text }?,
601
- attribute closed { "yes" | "no" }?,
602
- attribute arrows { text }?,
603
- attribute arrow-location { text }?,
604
- attribute arrow-width { text }?,
605
- attribute arrow-angles { text }?,
606
- attribute reverse { "yes" | "no" }?,
607
- FillAttributes,
608
- CommonAttributes
609
- }
610
- Path =
611
- element path {
612
- attribute at { text }?,
613
- attribute start { text },
614
- attribute closed { text }?,
615
- attribute arrows { text }?,
616
- attribute arrow-width { text }?,
617
- attribute arrow-angles { text }?,
618
- attribute reverse { "yes" | "no" }?,
619
- attribute mid-arrow { "yes" | "no" }?,
620
- FillAttributes,
621
- CommonAttributes,
622
- PathElements
623
- }
624
- Plot-DE-Solution =
625
- element plot-de-solution {
626
- attribute at { text }?,
627
- attribute solution { text }?,
628
- attribute axes { text }?,
629
- attribute arrow { "yes" | "no" }?,
630
- attribute arrow-width { text }?,
631
- attribute arrow-location { text }?,
632
- attribute function { text }?,
633
- attribute t0 { text }?,
634
- attribute y0 { text }?,
635
- attribute t1 { text }?,
636
- attribute method { text }?,
637
- attribute N { text }?,
638
- attribute max-step { text }?,
639
- StrokeAttributes,
640
- CommonAttributes
641
- }
642
- Point =
643
- element point {
644
- attribute p { text },
645
- attribute at { text }?,
646
- attribute style { text }?,
647
- attribute size { text }?,
648
- attribute coordinates { "cartesian" | "polar" }?,
649
- attribute degrees { "yes" | "no" }?,
650
- LabelAttributes,
651
- FillAttributes,
652
- CommonAttributes,
653
- LabelText?
654
- }
655
- Polygon =
656
- element polygon {
657
- attribute at { text }?,
658
- attribute points { text },
659
- attribute parameter { text }?,
660
- attribute corner-radius { text }?,
661
- attribute arrows { text }?,
662
- attribute closed { "yes" | "no" }?,
663
- attribute arrow-width { text }?,
664
- attribute arrow-angles { text }?,
665
- FillAttributes,
666
- CommonAttributes
667
- }
668
- Rectangle =
669
- element rectangle {
670
- attribute at { text }?,
671
- attribute lower-left { text }?,
672
- attribute center { text }?,
673
- attribute dimensions { text }?,
674
- attribute rotate { text }?,
675
- attribute corner-radius { text }?,
676
- FillAttributes,
677
- CommonAttributes
678
- }
679
- Riemann-Sum =
680
- element riemann-sum {
681
- attribute at { text }?,
682
- attribute function { text },
683
- attribute N { text },
684
- attribute domain { text }?,
685
- attribute rule { text }?,
686
- FillAttributes,
687
- CommonAttributes
688
- }
689
- Scatter =
690
- element scatter {
691
- attribute at { text }?,
692
- attribute points { text }?,
693
- attribute data { text }?,
694
- attribute x { text }?,
695
- attribute y { text }?,
696
- attribute filter { text }?,
697
- attribute point-text { text }?,
698
- attribute annotate { "yes" | "no" }?,
699
- attribute text { text }?,
700
- FillAttributes,
701
- CommonAttributes
702
- }
703
- Shape =
704
- element shape {
705
- attribute at { text }?,
706
- attribute shape { text }?,
707
- attribute shapes { text }?,
708
- attribute operation { text }?,
709
- FillAttributes,
710
- CommonAttributes
711
- }
712
- Slope-Field =
713
- element slope-field {
714
- attribute at { text }?,
715
- attribute function { text },
716
- attribute arrows { "yes" | "no" }?,
717
- attribute arrow-width { text }?,
718
- attribute arrow-angles { text }?,
719
- attribute system { "yes" | "no" }?,
720
- attribute spacings { text }?,
721
- StrokeAttributes,
722
- CommonAttributes
723
- }
724
- Spline =
725
- element spline {
726
- attribute at { text }?,
727
- attribute bc { text }?,
728
- attribute points { text },
729
- attribute parameter { text }?,
730
- attribute N { text }?,
731
- attribute arrows { text }?,
732
- attribute domain { text }?,
733
- attribute arrow-location { text }?,
734
- attribute closed { "yes" | "no" }?,
735
- attribute arrow-width { text }?,
736
- attribute arrow-angles { text }?,
737
- attribute name { text }?,
738
- FillAttributes,
739
- CommonAttributes
740
- }
741
- Tangent-line =
742
- element tangent-line {
743
- attribute at { text }?,
744
- attribute function { text },
745
- attribute point { text },
746
- attribute domain { text }?,
747
- attribute infinite { "yes" | "no" }?,
748
- StrokeAttributes,
749
- CommonAttributes
750
- }
751
- Triangle =
752
- element triangle {
753
- attribute at { text }?,
754
- attribute vertices { text },
755
- attribute angle-markers { "yes" | "no" }?,
756
- attribute labels { text }?,
757
- attribute show-vertices { "yes" | "no" }?,
758
- attribute point-fill { text }?,
759
- FillAttributes,
760
- CommonAttributes
761
- }
762
- Vector =
763
- element vector {
764
- attribute at { text }?,
765
- attribute v { text },
766
- attribute tail { text }?,
767
- attribute scale { text }?,
768
- attribute head-location { text }?,
769
- attribute arrow-width { text }?,
770
- attribute arrow-angles { text }?,
771
- StrokeAttributes,
772
- CommonAttributes
773
- }
774
- Vector-Field =
775
- element vector-field {
776
- attribute at { text }?,
777
- attribute function { text }?,
778
- attribute spacings { text }?,
779
- attribute scale { text }?,
780
- attribute curve { text }?,
781
- attribute domain { text }?,
782
- attribute N { text }?,
783
- attribute arrow-width { text }?,
784
- attribute arrow-angles { text? }?,
785
- StrokeAttributes,
786
- CommonAttributes
787
- }
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0">
3
+ <start>
4
+ <ref name="Diagram"/>
5
+ </start>
6
+ <define name="Diagram">
7
+ <element name="diagram">
8
+ <attribute name="dimensions"/>
9
+ <optional>
10
+ <attribute name="margins"/>
11
+ </optional>
12
+ <interleave>
13
+ <optional>
14
+ <ref name="Annotations"/>
15
+ </optional>
16
+ <zeroOrMore>
17
+ <ref name="DefinitionElements"/>
18
+ </zeroOrMore>
19
+ <zeroOrMore>
20
+ <ref name="GraphicalElements"/>
21
+ </zeroOrMore>
22
+ <zeroOrMore>
23
+ <ref name="GroupElements"/>
24
+ </zeroOrMore>
25
+ <optional>
26
+ <ref name="Caption"/>
27
+ </optional>
28
+ </interleave>
29
+ </element>
30
+ </define>
31
+ <define name="Caption">
32
+ <element name="caption">
33
+ <text/>
34
+ </element>
35
+ </define>
36
+ <!--
37
+ Annotations are constructed with a single #annotations element,
38
+ which contains a single #annotation
39
+ -->
40
+ <define name="Annotations">
41
+ <element name="annotations">
42
+ <ref name="Annotation"/>
43
+ </element>
44
+ </define>
45
+ <define name="AnnotationAttributes">
46
+ <attribute name="ref"/>
47
+ <ref name="AnnotatedElementAttributes"/>
48
+ </define>
49
+ <define name="AnnotatedElementAttributes">
50
+ <optional>
51
+ <attribute name="text"/>
52
+ </optional>
53
+ <optional>
54
+ <attribute name="speech"/>
55
+ </optional>
56
+ <optional>
57
+ <attribute name="circular">
58
+ <choice>
59
+ <value>yes</value>
60
+ <value>no</value>
61
+ </choice>
62
+ </attribute>
63
+ </optional>
64
+ <optional>
65
+ <attribute name="sonify">
66
+ <choice>
67
+ <value>yes</value>
68
+ <value>no</value>
69
+ </choice>
70
+ </attribute>
71
+ </optional>
72
+ </define>
73
+ <!-- An #annotation can contain any number of #annotation elements -->
74
+ <define name="Annotation">
75
+ <element name="annotation">
76
+ <ref name="AnnotationAttributes"/>
77
+ <zeroOrMore>
78
+ <ref name="Annotation"/>
79
+ </zeroOrMore>
80
+ </element>
81
+ </define>
82
+ <!-- Most elements can be annotated -->
83
+ <define name="CommonAttributes">
84
+ <optional>
85
+ <attribute name="annotate">
86
+ <choice>
87
+ <value>yes</value>
88
+ <value>no</value>
89
+ </choice>
90
+ </attribute>
91
+ </optional>
92
+ <optional>
93
+ <ref name="AnnotatedElementAttributes"/>
94
+ </optional>
95
+ </define>
96
+ <!-- next come some definition elements that can be added anywhere -->
97
+ <define name="DefinitionElements">
98
+ <optional>
99
+ <ref name="Definition"/>
100
+ </optional>
101
+ <optional>
102
+ <ref name="Derivative"/>
103
+ </optional>
104
+ <optional>
105
+ <ref name="DE-Solution"/>
106
+ </optional>
107
+ <optional>
108
+ <ref name="Define-Shapes"/>
109
+ </optional>
110
+ <optional>
111
+ <ref name="Read"/>
112
+ </optional>
113
+ </define>
114
+ <define name="Definition">
115
+ <element name="definition">
116
+ <text/>
117
+ <optional>
118
+ <attribute name="substitution">
119
+ <choice>
120
+ <value>yes</value>
121
+ <value>no</value>
122
+ </choice>
123
+ </attribute>
124
+ </optional>
125
+ <optional>
126
+ <attribute name="id-suffix"/>
127
+ </optional>
128
+ </element>
129
+ </define>
130
+ <define name="Derivative">
131
+ <element name="derivative">
132
+ <attribute name="function"/>
133
+ <attribute name="name"/>
134
+ </element>
135
+ </define>
136
+ <define name="DE-Solution">
137
+ <element name="de-solve">
138
+ <attribute name="name"/>
139
+ <attribute name="function"/>
140
+ <attribute name="t0"/>
141
+ <attribute name="y0"/>
142
+ <optional>
143
+ <attribute name="t1"/>
144
+ </optional>
145
+ <optional>
146
+ <attribute name="method"/>
147
+ </optional>
148
+ <optional>
149
+ <attribute name="N"/>
150
+ </optional>
151
+ <optional>
152
+ <attribute name="max-step"/>
153
+ </optional>
154
+ </element>
155
+ </define>
156
+ <define name="Define-Shapes">
157
+ <element name="define-shapes">
158
+ <oneOrMore>
159
+ <ref name="ShapeElements"/>
160
+ </oneOrMore>
161
+ </element>
162
+ </define>
163
+ <define name="Read">
164
+ <element name="read">
165
+ <attribute name="filename"/>
166
+ <attribute name="name"/>
167
+ <optional>
168
+ <attribute name="delimiter"/>
169
+ </optional>
170
+ <optional>
171
+ <attribute name="quotechar"/>
172
+ </optional>
173
+ <optional>
174
+ <attribute name="string-columns"/>
175
+ </optional>
176
+ <attribute name="type"/>
177
+ </element>
178
+ </define>
179
+ <!-- the next elements group other elements together -->
180
+ <define name="GroupElements">
181
+ <interleave>
182
+ <optional>
183
+ <ref name="Coordinates"/>
184
+ </optional>
185
+ <optional>
186
+ <ref name="Group"/>
187
+ </optional>
188
+ <optional>
189
+ <ref name="Repeat"/>
190
+ </optional>
191
+ <optional>
192
+ <ref name="Clip"/>
193
+ </optional>
194
+ <optional>
195
+ <ref name="Transform"/>
196
+ </optional>
197
+ </interleave>
198
+ </define>
199
+ <!-- coordinates are special in that they can contain everything a diagram can -->
200
+ <define name="Coordinates">
201
+ <element name="coordinates">
202
+ <attribute name="bbox"/>
203
+ <optional>
204
+ <attribute name="destination"/>
205
+ </optional>
206
+ <optional>
207
+ <attribute name="aspect-ratio"/>
208
+ </optional>
209
+ <optional>
210
+ <attribute name="preserve-y-range">
211
+ <choice>
212
+ <value>yes</value>
213
+ <value>no</value>
214
+ </choice>
215
+ </attribute>
216
+ </optional>
217
+ <interleave>
218
+ <zeroOrMore>
219
+ <ref name="DefinitionElements"/>
220
+ </zeroOrMore>
221
+ <zeroOrMore>
222
+ <ref name="GraphicalElements"/>
223
+ </zeroOrMore>
224
+ <zeroOrMore>
225
+ <ref name="GroupElements"/>
226
+ </zeroOrMore>
227
+ <zeroOrMore>
228
+ <ref name="TransformElements"/>
229
+ </zeroOrMore>
230
+ </interleave>
231
+ </element>
232
+ </define>
233
+ <define name="Group">
234
+ <element name="group">
235
+ <optional>
236
+ <attribute name="at"/>
237
+ </optional>
238
+ <optional>
239
+ <attribute name="outline"/>
240
+ </optional>
241
+ <optional>
242
+ <attribute name="transform"/>
243
+ </optional>
244
+ <ref name="CommonAttributes"/>
245
+ <interleave>
246
+ <zeroOrMore>
247
+ <ref name="DefinitionElements"/>
248
+ </zeroOrMore>
249
+ <zeroOrMore>
250
+ <ref name="GraphicalElements"/>
251
+ </zeroOrMore>
252
+ <zeroOrMore>
253
+ <ref name="GroupElements"/>
254
+ </zeroOrMore>
255
+ <zeroOrMore>
256
+ <ref name="TransformElements"/>
257
+ </zeroOrMore>
258
+ </interleave>
259
+ </element>
260
+ </define>
261
+ <define name="Repeat">
262
+ <element name="repeat">
263
+ <attribute name="parameter"/>
264
+ <optional>
265
+ <attribute name="at"/>
266
+ </optional>
267
+ <ref name="CommonAttributes"/>
268
+ <interleave>
269
+ <zeroOrMore>
270
+ <ref name="DefinitionElements"/>
271
+ </zeroOrMore>
272
+ <zeroOrMore>
273
+ <ref name="GraphicalElements"/>
274
+ </zeroOrMore>
275
+ <zeroOrMore>
276
+ <ref name="GroupElements"/>
277
+ </zeroOrMore>
278
+ <zeroOrMore>
279
+ <ref name="TransformElements"/>
280
+ </zeroOrMore>
281
+ </interleave>
282
+ </element>
283
+ </define>
284
+ <define name="Clip">
285
+ <element name="clip">
286
+ <optional>
287
+ <attribute name="at"/>
288
+ </optional>
289
+ <attribute name="shape"/>
290
+ <ref name="CommonAttributes"/>
291
+ <interleave>
292
+ <zeroOrMore>
293
+ <ref name="DefinitionElements"/>
294
+ </zeroOrMore>
295
+ <zeroOrMore>
296
+ <ref name="GraphicalElements"/>
297
+ </zeroOrMore>
298
+ <zeroOrMore>
299
+ <ref name="GroupElements"/>
300
+ </zeroOrMore>
301
+ <ref name="TransformElements"/>
302
+ </interleave>
303
+ </element>
304
+ </define>
305
+ <define name="Transform">
306
+ <element name="transform">
307
+ <interleave>
308
+ <zeroOrMore>
309
+ <ref name="DefinitionElements"/>
310
+ </zeroOrMore>
311
+ <zeroOrMore>
312
+ <ref name="GraphicalElements"/>
313
+ </zeroOrMore>
314
+ <zeroOrMore>
315
+ <ref name="GroupElements"/>
316
+ </zeroOrMore>
317
+ <zeroOrMore>
318
+ <ref name="TransformElements"/>
319
+ </zeroOrMore>
320
+ </interleave>
321
+ </element>
322
+ </define>
323
+ <define name="TransformElements">
324
+ <interleave>
325
+ <zeroOrMore>
326
+ <element name="translate">
327
+ <attribute name="by"/>
328
+ </element>
329
+ </zeroOrMore>
330
+ <zeroOrMore>
331
+ <element name="rotate">
332
+ <attribute name="by"/>
333
+ <optional>
334
+ <attribute name="about"/>
335
+ </optional>
336
+ <optional>
337
+ <attribute name="degrees">
338
+ <choice>
339
+ <value>yes</value>
340
+ <value>no</value>
341
+ </choice>
342
+ </attribute>
343
+ </optional>
344
+ </element>
345
+ </zeroOrMore>
346
+ <zeroOrMore>
347
+ <element name="scale">
348
+ <attribute name="by"/>
349
+ </element>
350
+ </zeroOrMore>
351
+ </interleave>
352
+ </define>
353
+ <!-- attributes and text for labels -->
354
+ <define name="LabelAttributes">
355
+ <optional>
356
+ <attribute name="alignment"/>
357
+ </optional>
358
+ <optional>
359
+ <attribute name="offset"/>
360
+ </optional>
361
+ <optional>
362
+ <attribute name="justify">
363
+ <choice>
364
+ <value>right</value>
365
+ <value>left</value>
366
+ <value>center</value>
367
+ </choice>
368
+ </attribute>
369
+ </optional>
370
+ <optional>
371
+ <attribute name="interline"/>
372
+ </optional>
373
+ <optional>
374
+ <attribute name="scale"/>
375
+ </optional>
376
+ <optional>
377
+ <attribute name="rotate"/>
378
+ </optional>
379
+ <optional>
380
+ <attribute name="clear-background">
381
+ <choice>
382
+ <value>yes</value>
383
+ <value>no</value>
384
+ </choice>
385
+ </attribute>
386
+ </optional>
387
+ <optional>
388
+ <attribute name="background-margin"/>
389
+ </optional>
390
+ <optional>
391
+ <attribute name="color"/>
392
+ </optional>
393
+ <optional>
394
+ <attribute name="font"/>
395
+ </optional>
396
+ <optional>
397
+ <attribute name="font-size"/>
398
+ </optional>
399
+ </define>
400
+ <define name="Math">
401
+ <element name="m">
402
+ <interleave>
403
+ <optional>
404
+ <attribute name="color"/>
405
+ </optional>
406
+ <text/>
407
+ </interleave>
408
+ </element>
409
+ </define>
410
+ <define name="Bold">
411
+ <element name="b">
412
+ <interleave>
413
+ <optional>
414
+ <attribute name="color"/>
415
+ </optional>
416
+ <text/>
417
+ <zeroOrMore>
418
+ <ref name="Italic"/>
419
+ </zeroOrMore>
420
+ </interleave>
421
+ </element>
422
+ </define>
423
+ <define name="Italic">
424
+ <element name="it">
425
+ <interleave>
426
+ <optional>
427
+ <attribute name="color"/>
428
+ </optional>
429
+ <text/>
430
+ <zeroOrMore>
431
+ <ref name="Bold"/>
432
+ </zeroOrMore>
433
+ </interleave>
434
+ </element>
435
+ </define>
436
+ <define name="Plain">
437
+ <element name="plain">
438
+ <interleave>
439
+ <optional>
440
+ <attribute name="color"/>
441
+ </optional>
442
+ <text/>
443
+ </interleave>
444
+ </element>
445
+ </define>
446
+ <define name="Newline">
447
+ <element name="newline">
448
+ <empty/>
449
+ </element>
450
+ </define>
451
+ <define name="LabelElements">
452
+ <interleave>
453
+ <zeroOrMore>
454
+ <ref name="Math"/>
455
+ </zeroOrMore>
456
+ <zeroOrMore>
457
+ <ref name="Bold"/>
458
+ </zeroOrMore>
459
+ <zeroOrMore>
460
+ <ref name="Italic"/>
461
+ </zeroOrMore>
462
+ <zeroOrMore>
463
+ <ref name="Plain"/>
464
+ </zeroOrMore>
465
+ <zeroOrMore>
466
+ <ref name="Newline"/>
467
+ </zeroOrMore>
468
+ </interleave>
469
+ </define>
470
+ <define name="LabelText">
471
+ <choice>
472
+ <text/>
473
+ <zeroOrMore>
474
+ <ref name="LabelElements"/>
475
+ </zeroOrMore>
476
+ </choice>
477
+ </define>
478
+ <define name="Label">
479
+ <element name="label">
480
+ <optional>
481
+ <attribute name="at"/>
482
+ </optional>
483
+ <attribute name="anchor"/>
484
+ <ref name="LabelAttributes"/>
485
+ <oneOrMore>
486
+ <ref name="LabelText"/>
487
+ </oneOrMore>
488
+ </element>
489
+ </define>
490
+ <define name="XLabel">
491
+ <element name="xlabel">
492
+ <optional>
493
+ <attribute name="at"/>
494
+ </optional>
495
+ <ref name="LabelAttributes"/>
496
+ <oneOrMore>
497
+ <ref name="LabelText"/>
498
+ </oneOrMore>
499
+ </element>
500
+ </define>
501
+ <define name="YLabel">
502
+ <element name="ylabel">
503
+ <optional>
504
+ <attribute name="at"/>
505
+ </optional>
506
+ <ref name="LabelAttributes"/>
507
+ <oneOrMore>
508
+ <ref name="LabelText"/>
509
+ </oneOrMore>
510
+ </element>
511
+ </define>
512
+ <!-- elements that can go inside a path -->
513
+ <define name="PathElements">
514
+ <interleave>
515
+ <zeroOrMore>
516
+ <element name="moveto">
517
+ <optional>
518
+ <attribute name="point"/>
519
+ </optional>
520
+ <optional>
521
+ <attribute name="distance"/>
522
+ </optional>
523
+ <optional>
524
+ <attribute name="heading"/>
525
+ </optional>
526
+ <optional>
527
+ <attribute name="degrees">
528
+ <choice>
529
+ <value>yes</value>
530
+ <value>no</value>
531
+ </choice>
532
+ </attribute>
533
+ </optional>
534
+ </element>
535
+ </zeroOrMore>
536
+ <zeroOrMore>
537
+ <element name="rmoveto">
538
+ <optional>
539
+ <attribute name="point"/>
540
+ </optional>
541
+ <optional>
542
+ <attribute name="distance"/>
543
+ </optional>
544
+ <optional>
545
+ <attribute name="heading"/>
546
+ </optional>
547
+ <optional>
548
+ <attribute name="degrees">
549
+ <choice>
550
+ <value>yes</value>
551
+ <value>no</value>
552
+ </choice>
553
+ </attribute>
554
+ </optional>
555
+ </element>
556
+ </zeroOrMore>
557
+ <zeroOrMore>
558
+ <element name="lineto">
559
+ <attribute name="point"/>
560
+ <optional>
561
+ <attribute name="decoration"/>
562
+ </optional>
563
+ <optional>
564
+ <attribute name="distance"/>
565
+ </optional>
566
+ <optional>
567
+ <attribute name="heading"/>
568
+ </optional>
569
+ <optional>
570
+ <attribute name="degrees">
571
+ <choice>
572
+ <value>yes</value>
573
+ <value>no</value>
574
+ </choice>
575
+ </attribute>
576
+ </optional>
577
+ </element>
578
+ </zeroOrMore>
579
+ <zeroOrMore>
580
+ <element name="rlineto">
581
+ <attribute name="point"/>
582
+ <optional>
583
+ <attribute name="decoration"/>
584
+ </optional>
585
+ <optional>
586
+ <attribute name="distance"/>
587
+ </optional>
588
+ <optional>
589
+ <attribute name="heading"/>
590
+ </optional>
591
+ <optional>
592
+ <attribute name="degrees">
593
+ <choice>
594
+ <value>yes</value>
595
+ <value>no</value>
596
+ </choice>
597
+ </attribute>
598
+ </optional>
599
+ </element>
600
+ </zeroOrMore>
601
+ <zeroOrMore>
602
+ <element name="horizontal">
603
+ <attribute name="distance"/>
604
+ <optional>
605
+ <attribute name="decoration"/>
606
+ </optional>
607
+ </element>
608
+ </zeroOrMore>
609
+ <zeroOrMore>
610
+ <element name="vertical">
611
+ <attribute name="distance"/>
612
+ <optional>
613
+ <attribute name="decoration"/>
614
+ </optional>
615
+ </element>
616
+ </zeroOrMore>
617
+ <zeroOrMore>
618
+ <element name="cubic-bezier">
619
+ <attribute name="controls"/>
620
+ </element>
621
+ </zeroOrMore>
622
+ <zeroOrMore>
623
+ <element name="quadratic-bezier">
624
+ <attribute name="controls"/>
625
+ </element>
626
+ </zeroOrMore>
627
+ <zeroOrMore>
628
+ <element name="arc">
629
+ <attribute name="center"/>
630
+ <attribute name="radius"/>
631
+ <attribute name="range"/>
632
+ <optional>
633
+ <attribute name="degrees"/>
634
+ </optional>
635
+ </element>
636
+ </zeroOrMore>
637
+ <zeroOrMore>
638
+ <ref name="Graph"/>
639
+ </zeroOrMore>
640
+ <zeroOrMore>
641
+ <ref name="Parametric-Curve"/>
642
+ </zeroOrMore>
643
+ <zeroOrMore>
644
+ <ref name="Polygon"/>
645
+ </zeroOrMore>
646
+ <zeroOrMore>
647
+ <ref name="Spline"/>
648
+ </zeroOrMore>
649
+ <zeroOrMore>
650
+ <element name="repeat">
651
+ <attribute name="parameter"/>
652
+ <ref name="PathElements"/>
653
+ </element>
654
+ </zeroOrMore>
655
+ </interleave>
656
+ </define>
657
+ <define name="ShapeElements">
658
+ <interleave>
659
+ <zeroOrMore>
660
+ <ref name="Arc"/>
661
+ </zeroOrMore>
662
+ <zeroOrMore>
663
+ <ref name="Area-Between-Curves"/>
664
+ </zeroOrMore>
665
+ <zeroOrMore>
666
+ <ref name="Area-Under-Curve"/>
667
+ </zeroOrMore>
668
+ <zeroOrMore>
669
+ <ref name="Circle"/>
670
+ </zeroOrMore>
671
+ <zeroOrMore>
672
+ <ref name="Ellipse"/>
673
+ </zeroOrMore>
674
+ <zeroOrMore>
675
+ <ref name="Graph"/>
676
+ </zeroOrMore>
677
+ <zeroOrMore>
678
+ <ref name="Parametric-Curve"/>
679
+ </zeroOrMore>
680
+ <zeroOrMore>
681
+ <ref name="Path"/>
682
+ </zeroOrMore>
683
+ <zeroOrMore>
684
+ <ref name="Polygon"/>
685
+ </zeroOrMore>
686
+ <zeroOrMore>
687
+ <ref name="Rectangle"/>
688
+ </zeroOrMore>
689
+ <zeroOrMore>
690
+ <ref name="Shape"/>
691
+ </zeroOrMore>
692
+ <zeroOrMore>
693
+ <ref name="Spline"/>
694
+ </zeroOrMore>
695
+ </interleave>
696
+ </define>
697
+ <!-- graphical elements can be stroked and possibly filled -->
698
+ <define name="StrokeAttributes">
699
+ <optional>
700
+ <attribute name="stroke"/>
701
+ </optional>
702
+ <optional>
703
+ <attribute name="stroke-opacity"/>
704
+ </optional>
705
+ <optional>
706
+ <attribute name="opacity"/>
707
+ </optional>
708
+ <optional>
709
+ <attribute name="thickness"/>
710
+ </optional>
711
+ <optional>
712
+ <attribute name="miterlimit"/>
713
+ </optional>
714
+ <optional>
715
+ <attribute name="linejoin"/>
716
+ </optional>
717
+ <optional>
718
+ <attribute name="linecap"/>
719
+ </optional>
720
+ <optional>
721
+ <attribute name="dash"/>
722
+ </optional>
723
+ <optional>
724
+ <attribute name="cliptobbox">
725
+ <choice>
726
+ <value>yes</value>
727
+ <value>no</value>
728
+ </choice>
729
+ </attribute>
730
+ </optional>
731
+ <optional>
732
+ <attribute name="outline">
733
+ <choice>
734
+ <value>yes</value>
735
+ <value>no</value>
736
+ </choice>
737
+ </attribute>
738
+ </optional>
739
+ </define>
740
+ <define name="FillAttributes">
741
+ <ref name="StrokeAttributes"/>
742
+ <optional>
743
+ <attribute name="fill"/>
744
+ </optional>
745
+ <optional>
746
+ <attribute name="fill-opacity"/>
747
+ </optional>
748
+ <optional>
749
+ <attribute name="fill-rule"/>
750
+ </optional>
751
+ </define>
752
+ <!-- start defining the graphical elements -->
753
+ <define name="GraphicalElements">
754
+ <interleave>
755
+ <zeroOrMore>
756
+ <ref name="Angle-Marker"/>
757
+ </zeroOrMore>
758
+ <zeroOrMore>
759
+ <ref name="Arc"/>
760
+ </zeroOrMore>
761
+ <zeroOrMore>
762
+ <ref name="Area-Between-Curves"/>
763
+ </zeroOrMore>
764
+ <zeroOrMore>
765
+ <ref name="Area-Under-Curve"/>
766
+ </zeroOrMore>
767
+ <zeroOrMore>
768
+ <ref name="Axes"/>
769
+ </zeroOrMore>
770
+ <zeroOrMore>
771
+ <ref name="Circle"/>
772
+ </zeroOrMore>
773
+ <zeroOrMore>
774
+ <ref name="Contour"/>
775
+ </zeroOrMore>
776
+ <zeroOrMore>
777
+ <ref name="Ellipse"/>
778
+ </zeroOrMore>
779
+ <zeroOrMore>
780
+ <ref name="Graph"/>
781
+ </zeroOrMore>
782
+ <zeroOrMore>
783
+ <ref name="Grid"/>
784
+ </zeroOrMore>
785
+ <zeroOrMore>
786
+ <ref name="Grid-Axes"/>
787
+ </zeroOrMore>
788
+ <zeroOrMore>
789
+ <ref name="Histogram"/>
790
+ </zeroOrMore>
791
+ <zeroOrMore>
792
+ <ref name="Image"/>
793
+ </zeroOrMore>
794
+ <zeroOrMore>
795
+ <ref name="Implicit-Curve"/>
796
+ </zeroOrMore>
797
+ <zeroOrMore>
798
+ <ref name="Label"/>
799
+ </zeroOrMore>
800
+ <zeroOrMore>
801
+ <ref name="Legend"/>
802
+ </zeroOrMore>
803
+ <zeroOrMore>
804
+ <ref name="Line"/>
805
+ </zeroOrMore>
806
+ <zeroOrMore>
807
+ <ref name="Network"/>
808
+ </zeroOrMore>
809
+ <zeroOrMore>
810
+ <ref name="Parametric-Curve"/>
811
+ </zeroOrMore>
812
+ <zeroOrMore>
813
+ <ref name="Path"/>
814
+ </zeroOrMore>
815
+ <zeroOrMore>
816
+ <ref name="Plot-DE-Solution"/>
817
+ </zeroOrMore>
818
+ <zeroOrMore>
819
+ <ref name="Point"/>
820
+ </zeroOrMore>
821
+ <zeroOrMore>
822
+ <ref name="Polygon"/>
823
+ </zeroOrMore>
824
+ <zeroOrMore>
825
+ <ref name="Rectangle"/>
826
+ </zeroOrMore>
827
+ <zeroOrMore>
828
+ <ref name="Riemann-Sum"/>
829
+ </zeroOrMore>
830
+ <zeroOrMore>
831
+ <ref name="Scatter"/>
832
+ </zeroOrMore>
833
+ <zeroOrMore>
834
+ <ref name="Shape"/>
835
+ </zeroOrMore>
836
+ <zeroOrMore>
837
+ <ref name="Slope-Field"/>
838
+ </zeroOrMore>
839
+ <zeroOrMore>
840
+ <ref name="Spline"/>
841
+ </zeroOrMore>
842
+ <zeroOrMore>
843
+ <ref name="Tick-Mark"/>
844
+ </zeroOrMore>
845
+ <zeroOrMore>
846
+ <ref name="Tangent-line"/>
847
+ </zeroOrMore>
848
+ <zeroOrMore>
849
+ <ref name="Triangle"/>
850
+ </zeroOrMore>
851
+ <zeroOrMore>
852
+ <ref name="Vector"/>
853
+ </zeroOrMore>
854
+ <zeroOrMore>
855
+ <ref name="Vector-Field"/>
856
+ </zeroOrMore>
857
+ </interleave>
858
+ </define>
859
+ <define name="Angle-Marker">
860
+ <element name="angle-marker">
861
+ <optional>
862
+ <attribute name="at"/>
863
+ </optional>
864
+ <attribute name="points"/>
865
+ <optional>
866
+ <attribute name="radius"/>
867
+ </optional>
868
+ <optional>
869
+ <attribute name="arrow">
870
+ <choice>
871
+ <value>yes</value>
872
+ <value>no</value>
873
+ </choice>
874
+ </attribute>
875
+ </optional>
876
+ <optional>
877
+ <attribute name="arrow-width"/>
878
+ </optional>
879
+ <optional>
880
+ <attribute name="arrow-angles"/>
881
+ </optional>
882
+ <ref name="LabelAttributes"/>
883
+ <ref name="StrokeAttributes"/>
884
+ <ref name="CommonAttributes"/>
885
+ <optional>
886
+ <ref name="LabelText"/>
887
+ </optional>
888
+ </element>
889
+ </define>
890
+ <define name="Arc">
891
+ <element name="arc">
892
+ <optional>
893
+ <attribute name="at"/>
894
+ </optional>
895
+ <optional>
896
+ <attribute name="points"/>
897
+ </optional>
898
+ <optional>
899
+ <attribute name="center"/>
900
+ </optional>
901
+ <optional>
902
+ <attribute name="range"/>
903
+ </optional>
904
+ <attribute name="radius"/>
905
+ <optional>
906
+ <attribute name="sector">
907
+ <choice>
908
+ <value>yes</value>
909
+ <value>no</value>
910
+ </choice>
911
+ </attribute>
912
+ </optional>
913
+ <optional>
914
+ <attribute name="N"/>
915
+ </optional>
916
+ <optional>
917
+ <attribute name="degrees">
918
+ <choice>
919
+ <value>yes</value>
920
+ <value>no</value>
921
+ </choice>
922
+ </attribute>
923
+ </optional>
924
+ <optional>
925
+ <attribute name="arrows"/>
926
+ </optional>
927
+ <optional>
928
+ <attribute name="reverse">
929
+ <choice>
930
+ <value>yes</value>
931
+ <value>no</value>
932
+ </choice>
933
+ </attribute>
934
+ </optional>
935
+ <optional>
936
+ <attribute name="arrow-width"/>
937
+ </optional>
938
+ <optional>
939
+ <attribute name="arrow-angles"/>
940
+ </optional>
941
+ <ref name="FillAttributes"/>
942
+ <ref name="CommonAttributes"/>
943
+ </element>
944
+ </define>
945
+ <define name="Area-Between-Curves">
946
+ <element name="area-between-curves">
947
+ <optional>
948
+ <attribute name="at"/>
949
+ </optional>
950
+ <optional>
951
+ <attribute name="function1"/>
952
+ </optional>
953
+ <optional>
954
+ <attribute name="function2"/>
955
+ </optional>
956
+ <optional>
957
+ <attribute name="functions"/>
958
+ </optional>
959
+ <optional>
960
+ <attribute name="domain"/>
961
+ </optional>
962
+ <optional>
963
+ <attribute name="N"/>
964
+ </optional>
965
+ <optional>
966
+ <attribute name="coordinates">
967
+ <choice>
968
+ <value>polar</value>
969
+ <value>cartesian</value>
970
+ </choice>
971
+ </attribute>
972
+ </optional>
973
+ <optional>
974
+ <attribute name="domain-degrees">
975
+ <choice>
976
+ <value>yes</value>
977
+ <value>no</value>
978
+ </choice>
979
+ </attribute>
980
+ </optional>
981
+ <ref name="FillAttributes"/>
982
+ <ref name="CommonAttributes"/>
983
+ </element>
984
+ </define>
985
+ <define name="Area-Under-Curve">
986
+ <element name="area-under-curve">
987
+ <optional>
988
+ <attribute name="at"/>
989
+ </optional>
990
+ <attribute name="function"/>
991
+ <optional>
992
+ <attribute name="domain"/>
993
+ </optional>
994
+ <optional>
995
+ <attribute name="N"/>
996
+ </optional>
997
+ <optional>
998
+ <attribute name="coordinates">
999
+ <choice>
1000
+ <value>polar</value>
1001
+ <value>cartesian</value>
1002
+ </choice>
1003
+ </attribute>
1004
+ </optional>
1005
+ <optional>
1006
+ <attribute name="domain-degrees">
1007
+ <choice>
1008
+ <value>yes</value>
1009
+ <value>no</value>
1010
+ </choice>
1011
+ </attribute>
1012
+ </optional>
1013
+ <ref name="FillAttributes"/>
1014
+ <ref name="CommonAttributes"/>
1015
+ </element>
1016
+ </define>
1017
+ <!-- grids and axes -->
1018
+ <define name="Axes">
1019
+ <element name="axes">
1020
+ <optional>
1021
+ <attribute name="at"/>
1022
+ </optional>
1023
+ <optional>
1024
+ <attribute name="hlabels"/>
1025
+ </optional>
1026
+ <optional>
1027
+ <attribute name="vlabels"/>
1028
+ </optional>
1029
+ <optional>
1030
+ <attribute name="xlabel"/>
1031
+ </optional>
1032
+ <optional>
1033
+ <attribute name="ylabel"/>
1034
+ </optional>
1035
+ <optional>
1036
+ <attribute name="arrows"/>
1037
+ </optional>
1038
+ <optional>
1039
+ <attribute name="decorations">
1040
+ <choice>
1041
+ <value>yes</value>
1042
+ <value>no</value>
1043
+ </choice>
1044
+ </attribute>
1045
+ </optional>
1046
+ <optional>
1047
+ <attribute name="h-pi-format">
1048
+ <choice>
1049
+ <value>yes</value>
1050
+ <value>no</value>
1051
+ </choice>
1052
+ </attribute>
1053
+ </optional>
1054
+ <optional>
1055
+ <attribute name="v-pi-format">
1056
+ <choice>
1057
+ <value>yes</value>
1058
+ <value>no</value>
1059
+ </choice>
1060
+ </attribute>
1061
+ </optional>
1062
+ <optional>
1063
+ <attribute name="h-frame">
1064
+ <choice>
1065
+ <value>bottom</value>
1066
+ <value>top</value>
1067
+ </choice>
1068
+ </attribute>
1069
+ </optional>
1070
+ <optional>
1071
+ <attribute name="v-frame">
1072
+ <choice>
1073
+ <value>left</value>
1074
+ <value>right</value>
1075
+ </choice>
1076
+ </attribute>
1077
+ </optional>
1078
+ <optional>
1079
+ <attribute name="stroke"/>
1080
+ </optional>
1081
+ <optional>
1082
+ <attribute name="thickness"/>
1083
+ </optional>
1084
+ <optional>
1085
+ <attribute name="tick-size"/>
1086
+ </optional>
1087
+ <optional>
1088
+ <attribute name="axes">
1089
+ <choice>
1090
+ <value>horizontal</value>
1091
+ <value>vertical</value>
1092
+ </choice>
1093
+ </attribute>
1094
+ </optional>
1095
+ <optional>
1096
+ <attribute name="bounding-box">
1097
+ <choice>
1098
+ <value>yes</value>
1099
+ <value>no</value>
1100
+ </choice>
1101
+ </attribute>
1102
+ </optional>
1103
+ <optional>
1104
+ <attribute name="h-zero-label">
1105
+ <choice>
1106
+ <value>yes</value>
1107
+ <value>no</value>
1108
+ </choice>
1109
+ </attribute>
1110
+ </optional>
1111
+ <optional>
1112
+ <attribute name="v-zero-label">
1113
+ <choice>
1114
+ <value>yes</value>
1115
+ <value>no</value>
1116
+ </choice>
1117
+ </attribute>
1118
+ </optional>
1119
+ <optional>
1120
+ <attribute name="label-commas">
1121
+ <choice>
1122
+ <value>yes</value>
1123
+ <value>no</value>
1124
+ </choice>
1125
+ </attribute>
1126
+ </optional>
1127
+ <ref name="CommonAttributes"/>
1128
+ <optional>
1129
+ <ref name="XLabel"/>
1130
+ </optional>
1131
+ <optional>
1132
+ <ref name="YLabel"/>
1133
+ </optional>
1134
+ </element>
1135
+ </define>
1136
+ <define name="Grid">
1137
+ <element name="grid">
1138
+ <optional>
1139
+ <attribute name="at"/>
1140
+ </optional>
1141
+ <optional>
1142
+ <attribute name="spacings"/>
1143
+ </optional>
1144
+ <optional>
1145
+ <attribute name="hspacing"/>
1146
+ </optional>
1147
+ <optional>
1148
+ <attribute name="vspacing"/>
1149
+ </optional>
1150
+ <optional>
1151
+ <attribute name="basis"/>
1152
+ </optional>
1153
+ <optional>
1154
+ <attribute name="h-pi-format">
1155
+ <choice>
1156
+ <value>yes</value>
1157
+ <value>no</value>
1158
+ </choice>
1159
+ </attribute>
1160
+ </optional>
1161
+ <optional>
1162
+ <attribute name="v-pi-format">
1163
+ <choice>
1164
+ <value>yes</value>
1165
+ <value>no</value>
1166
+ </choice>
1167
+ </attribute>
1168
+ </optional>
1169
+ <optional>
1170
+ <attribute name="stroke"/>
1171
+ </optional>
1172
+ <optional>
1173
+ <attribute name="thickness"/>
1174
+ </optional>
1175
+ <optional>
1176
+ <attribute name="coordinates"/>
1177
+ </optional>
1178
+ <optional>
1179
+ <attribute name="spacing-degrees">
1180
+ <choice>
1181
+ <value>yes</value>
1182
+ <value>no</value>
1183
+ </choice>
1184
+ </attribute>
1185
+ </optional>
1186
+ <optional>
1187
+ <attribute name="scales">
1188
+ <choice>
1189
+ <value>linear</value>
1190
+ <value>semilogx</value>
1191
+ <value>semilogy</value>
1192
+ <value>loglog</value>
1193
+ </choice>
1194
+ </attribute>
1195
+ </optional>
1196
+ <ref name="Stroke-Attributes"/>
1197
+ <ref name="CommonAttributes"/>
1198
+ </element>
1199
+ </define>
1200
+ <define name="Grid-Axes">
1201
+ <element name="grid-axes">
1202
+ <optional>
1203
+ <attribute name="at"/>
1204
+ </optional>
1205
+ <optional>
1206
+ <attribute name="spacings"/>
1207
+ </optional>
1208
+ <optional>
1209
+ <attribute name="hspacing"/>
1210
+ </optional>
1211
+ <optional>
1212
+ <attribute name="vspacing"/>
1213
+ </optional>
1214
+ <optional>
1215
+ <attribute name="h-pi-format">
1216
+ <choice>
1217
+ <value>yes</value>
1218
+ <value>no</value>
1219
+ </choice>
1220
+ </attribute>
1221
+ </optional>
1222
+ <optional>
1223
+ <attribute name="v-pi-format">
1224
+ <choice>
1225
+ <value>yes</value>
1226
+ <value>no</value>
1227
+ </choice>
1228
+ </attribute>
1229
+ </optional>
1230
+ <optional>
1231
+ <attribute name="h-frame">
1232
+ <choice>
1233
+ <value>bottom</value>
1234
+ <value>top</value>
1235
+ </choice>
1236
+ </attribute>
1237
+ </optional>
1238
+ <optional>
1239
+ <attribute name="v-frame">
1240
+ <choice>
1241
+ <value>left</value>
1242
+ <value>right</value>
1243
+ </choice>
1244
+ </attribute>
1245
+ </optional>
1246
+ <optional>
1247
+ <attribute name="hlabels"/>
1248
+ </optional>
1249
+ <optional>
1250
+ <attribute name="vlabels"/>
1251
+ </optional>
1252
+ <optional>
1253
+ <attribute name="xlabel"/>
1254
+ </optional>
1255
+ <optional>
1256
+ <attribute name="ylabel"/>
1257
+ </optional>
1258
+ <optional>
1259
+ <attribute name="arrows"/>
1260
+ </optional>
1261
+ <optional>
1262
+ <attribute name="decorations">
1263
+ <choice>
1264
+ <value>yes</value>
1265
+ <value>no</value>
1266
+ </choice>
1267
+ </attribute>
1268
+ </optional>
1269
+ <optional>
1270
+ <attribute name="tick-size"/>
1271
+ </optional>
1272
+ <optional>
1273
+ <attribute name="axes">
1274
+ <choice>
1275
+ <value>horizontal</value>
1276
+ <value>vertical</value>
1277
+ </choice>
1278
+ </attribute>
1279
+ </optional>
1280
+ <optional>
1281
+ <attribute name="bounding-box">
1282
+ <choice>
1283
+ <value>yes</value>
1284
+ <value>no</value>
1285
+ </choice>
1286
+ </attribute>
1287
+ </optional>
1288
+ <optional>
1289
+ <attribute name="h-zero-label">
1290
+ <choice>
1291
+ <value>yes</value>
1292
+ <value>no</value>
1293
+ </choice>
1294
+ </attribute>
1295
+ </optional>
1296
+ <optional>
1297
+ <attribute name="v-zero-label">
1298
+ <choice>
1299
+ <value>yes</value>
1300
+ <value>no</value>
1301
+ </choice>
1302
+ </attribute>
1303
+ </optional>
1304
+ <optional>
1305
+ <attribute name="label-commas">
1306
+ <choice>
1307
+ <value>yes</value>
1308
+ <value>no</value>
1309
+ </choice>
1310
+ </attribute>
1311
+ </optional>
1312
+ <ref name="StrokeAttributes"/>
1313
+ <ref name="CommonAttributes"/>
1314
+ <optional>
1315
+ <ref name="XLabel"/>
1316
+ </optional>
1317
+ <optional>
1318
+ <ref name="YLabel"/>
1319
+ </optional>
1320
+ </element>
1321
+ </define>
1322
+ <define name="Tick-Mark">
1323
+ <element name="tick-mark">
1324
+ <optional>
1325
+ <attribute name="at"/>
1326
+ </optional>
1327
+ <attribute name="location"/>
1328
+ <optional>
1329
+ <attribute name="axis"/>
1330
+ </optional>
1331
+ <optional>
1332
+ <attribute name="stroke"/>
1333
+ </optional>
1334
+ <optional>
1335
+ <attribute name="size"/>
1336
+ </optional>
1337
+ <optional>
1338
+ <attribute name="thickness"/>
1339
+ </optional>
1340
+ <ref name="StrokeAttributes"/>
1341
+ <ref name="LabelAttributes"/>
1342
+ <optional>
1343
+ <ref name="LabelText"/>
1344
+ </optional>
1345
+ </element>
1346
+ </define>
1347
+ <define name="Contour">
1348
+ <element name="contour">
1349
+ <optional>
1350
+ <attribute name="at"/>
1351
+ </optional>
1352
+ <attribute name="function"/>
1353
+ <optional>
1354
+ <attribute name="k"/>
1355
+ </optional>
1356
+ <optional>
1357
+ <attribute name="depth"/>
1358
+ </optional>
1359
+ <optional>
1360
+ <attribute name="initial-depth"/>
1361
+ </optional>
1362
+ <ref name="StrokeAttributes"/>
1363
+ <ref name="CommonAttributes"/>
1364
+ </element>
1365
+ </define>
1366
+ <define name="Circle">
1367
+ <element name="circle">
1368
+ <optional>
1369
+ <attribute name="at"/>
1370
+ </optional>
1371
+ <attribute name="center"/>
1372
+ <optional>
1373
+ <attribute name="radius"/>
1374
+ </optional>
1375
+ <ref name="FillAttributes"/>
1376
+ <ref name="CommonAttributes"/>
1377
+ </element>
1378
+ </define>
1379
+ <define name="Ellipse">
1380
+ <element name="ellipse">
1381
+ <optional>
1382
+ <attribute name="at"/>
1383
+ </optional>
1384
+ <attribute name="center"/>
1385
+ <optional>
1386
+ <attribute name="axes"/>
1387
+ </optional>
1388
+ <optional>
1389
+ <attribute name="rotate"/>
1390
+ </optional>
1391
+ <optional>
1392
+ <attribute name="degrees"/>
1393
+ </optional>
1394
+ <optional>
1395
+ <attribute name="N"/>
1396
+ </optional>
1397
+ <ref name="StrokeAttributes"/>
1398
+ <ref name="CommonAttributes"/>
1399
+ </element>
1400
+ </define>
1401
+ <define name="Graph">
1402
+ <element name="graph">
1403
+ <optional>
1404
+ <attribute name="at"/>
1405
+ </optional>
1406
+ <attribute name="function"/>
1407
+ <optional>
1408
+ <attribute name="N"/>
1409
+ </optional>
1410
+ <optional>
1411
+ <attribute name="domain"/>
1412
+ </optional>
1413
+ <optional>
1414
+ <attribute name="coordinates">
1415
+ <choice>
1416
+ <value>polar</value>
1417
+ <value>coordinates</value>
1418
+ </choice>
1419
+ </attribute>
1420
+ </optional>
1421
+ <optional>
1422
+ <attribute name="domain-degress">
1423
+ <choice>
1424
+ <value>yes</value>
1425
+ <value>no</value>
1426
+ </choice>
1427
+ </attribute>
1428
+ </optional>
1429
+ <optional>
1430
+ <attribute name="closed">
1431
+ <choice>
1432
+ <value>yes</value>
1433
+ <value>no</value>
1434
+ </choice>
1435
+ </attribute>
1436
+ </optional>
1437
+ <optional>
1438
+ <attribute name="fill"/>
1439
+ </optional>
1440
+ <ref name="StrokeAttributes"/>
1441
+ <ref name="CommonAttributes"/>
1442
+ </element>
1443
+ </define>
1444
+ <define name="Image">
1445
+ <element name="image">
1446
+ <optional>
1447
+ <attribute name="at"/>
1448
+ </optional>
1449
+ <attribute name="source"/>
1450
+ <optional>
1451
+ <attribute name="lower-left"/>
1452
+ </optional>
1453
+ <optional>
1454
+ <attribute name="center"/>
1455
+ </optional>
1456
+ <optional>
1457
+ <attribute name="dimensions"/>
1458
+ </optional>
1459
+ <optional>
1460
+ <attribute name="opacity"/>
1461
+ </optional>
1462
+ <optional>
1463
+ <attribute name="filetype">
1464
+ <choice>
1465
+ <value>svg</value>
1466
+ <value>png</value>
1467
+ <value>gif</value>
1468
+ <value>jpeg</value>
1469
+ <value>jpg</value>
1470
+ </choice>
1471
+ </attribute>
1472
+ </optional>
1473
+ <optional>
1474
+ <attribute name="rotate"/>
1475
+ </optional>
1476
+ <optional>
1477
+ <attribute name="scale"/>
1478
+ </optional>
1479
+ </element>
1480
+ </define>
1481
+ <define name="Histogram">
1482
+ <element name="histogram">
1483
+ <optional>
1484
+ <attribute name="at"/>
1485
+ </optional>
1486
+ <attribute name="data"/>
1487
+ <optional>
1488
+ <attribute name="min"/>
1489
+ </optional>
1490
+ <optional>
1491
+ <attribute name="max"/>
1492
+ </optional>
1493
+ <optional>
1494
+ <attribute name="bins"/>
1495
+ </optional>
1496
+ <optional>
1497
+ <attribute name="bin-text"/>
1498
+ </optional>
1499
+ <optional>
1500
+ <attribute name="annotate">
1501
+ <choice>
1502
+ <value>yes</value>
1503
+ <value>no</value>
1504
+ </choice>
1505
+ </attribute>
1506
+ </optional>
1507
+ <optional>
1508
+ <attribute name="text"/>
1509
+ </optional>
1510
+ <ref name="FillAttributes"/>
1511
+ <ref name="CommonAttributes"/>
1512
+ </element>
1513
+ </define>
1514
+ <define name="Implicit-Curve">
1515
+ <element name="implicit-curve">
1516
+ <optional>
1517
+ <attribute name="at"/>
1518
+ </optional>
1519
+ <attribute name="function"/>
1520
+ <optional>
1521
+ <attribute name="k"/>
1522
+ </optional>
1523
+ <optional>
1524
+ <attribute name="depth"/>
1525
+ </optional>
1526
+ <optional>
1527
+ <attribute name="initial-depth"/>
1528
+ </optional>
1529
+ <ref name="StrokeAttributes"/>
1530
+ <ref name="CommonAttributes"/>
1531
+ </element>
1532
+ </define>
1533
+ <define name="Legend">
1534
+ <element name="legend">
1535
+ <optional>
1536
+ <attribute name="at"/>
1537
+ </optional>
1538
+ <attribute name="anchor"/>
1539
+ <optional>
1540
+ <attribute name="alignment"/>
1541
+ </optional>
1542
+ <optional>
1543
+ <attribute name="vertical-skip"/>
1544
+ </optional>
1545
+ <optional>
1546
+ <attribute name="scale"/>
1547
+ </optional>
1548
+ <optional>
1549
+ <attribute name="stroke"/>
1550
+ </optional>
1551
+ <optional>
1552
+ <attribute name="opacity"/>
1553
+ </optional>
1554
+ <oneOrMore>
1555
+ <element name="item">
1556
+ <attribute name="ref"/>
1557
+ <oneOrMore>
1558
+ <ref name="LabelText"/>
1559
+ </oneOrMore>
1560
+ </element>
1561
+ </oneOrMore>
1562
+ </element>
1563
+ </define>
1564
+ <define name="Line">
1565
+ <element name="line">
1566
+ <optional>
1567
+ <attribute name="at"/>
1568
+ </optional>
1569
+ <optional>
1570
+ <attribute name="endpoints"/>
1571
+ </optional>
1572
+ <optional>
1573
+ <attribute name="p1"/>
1574
+ </optional>
1575
+ <optional>
1576
+ <attribute name="p2"/>
1577
+ </optional>
1578
+ <optional>
1579
+ <attribute name="endpoint-offsets"/>
1580
+ </optional>
1581
+ <optional>
1582
+ <attribute name="infinite">
1583
+ <choice>
1584
+ <value>yes</value>
1585
+ <value>no</value>
1586
+ </choice>
1587
+ </attribute>
1588
+ </optional>
1589
+ <optional>
1590
+ <attribute name="arrows"/>
1591
+ </optional>
1592
+ <optional>
1593
+ <attribute name="arrow-width"/>
1594
+ </optional>
1595
+ <optional>
1596
+ <attribute name="arrow-angles"/>
1597
+ </optional>
1598
+ <optional>
1599
+ <attribute name="reverse">
1600
+ <choice>
1601
+ <value>yes</value>
1602
+ <value>no</value>
1603
+ </choice>
1604
+ </attribute>
1605
+ </optional>
1606
+ <optional>
1607
+ <attribute name="additional-arrows">
1608
+ <choice>
1609
+ <value>yes</value>
1610
+ <value>no</value>
1611
+ </choice>
1612
+ </attribute>
1613
+ </optional>
1614
+ <ref name="StrokeAttributes"/>
1615
+ <ref name="CommonAttributes"/>
1616
+ </element>
1617
+ </define>
1618
+ <define name="Network">
1619
+ <element name="network">
1620
+ <optional>
1621
+ <attribute name="at"/>
1622
+ </optional>
1623
+ <optional>
1624
+ <attribute name="graph"/>
1625
+ </optional>
1626
+ <optional>
1627
+ <attribute name="directed">
1628
+ <choice>
1629
+ <value>yes</value>
1630
+ <value>no</value>
1631
+ </choice>
1632
+ </attribute>
1633
+ </optional>
1634
+ <optional>
1635
+ <attribute name="arrows">
1636
+ <choice>
1637
+ <value>end</value>
1638
+ <value>middle</value>
1639
+ </choice>
1640
+ </attribute>
1641
+ </optional>
1642
+ <optional>
1643
+ <attribute name="bipartite-set"/>
1644
+ </optional>
1645
+ <optional>
1646
+ <attribute name="alignment">
1647
+ <group>
1648
+ <value>vertical</value>
1649
+ <value>horizontal</value>
1650
+ </group>
1651
+ </attribute>
1652
+ </optional>
1653
+ <optional>
1654
+ <attribute name="loop-scale"/>
1655
+ </optional>
1656
+ <optional>
1657
+ <attribute name="layout"/>
1658
+ </optional>
1659
+ <optional>
1660
+ <attribute name="seed"/>
1661
+ </optional>
1662
+ <optional>
1663
+ <attribute name="start"/>
1664
+ </optional>
1665
+ <optional>
1666
+ <attribute name="scale"/>
1667
+ </optional>
1668
+ <optional>
1669
+ <attribute name="rotate"/>
1670
+ </optional>
1671
+ <optional>
1672
+ <attribute name="edge-stroke"/>
1673
+ </optional>
1674
+ <optional>
1675
+ <attribute name="edge-thickness"/>
1676
+ </optional>
1677
+ <optional>
1678
+ <attribute name="edge-dash"/>
1679
+ </optional>
1680
+ <optional>
1681
+ <attribute name="node-fill"/>
1682
+ </optional>
1683
+ <optional>
1684
+ <attribute name="node-stroke"/>
1685
+ </optional>
1686
+ <optional>
1687
+ <attribute name="node-thickness"/>
1688
+ </optional>
1689
+ <optional>
1690
+ <attribute name="node-style"/>
1691
+ </optional>
1692
+ <optional>
1693
+ <attribute name="node-size"/>
1694
+ </optional>
1695
+ <optional>
1696
+ <attribute name="labels">
1697
+ <choice>
1698
+ <value>yes</value>
1699
+ <value>no</value>
1700
+ </choice>
1701
+ </attribute>
1702
+ </optional>
1703
+ <optional>
1704
+ <attribute name="label-dictionary"/>
1705
+ </optional>
1706
+ <interleave>
1707
+ <zeroOrMore>
1708
+ <element name="node">
1709
+ <optional>
1710
+ <attribute name="at"/>
1711
+ </optional>
1712
+ <optional>
1713
+ <attribute name="p"/>
1714
+ </optional>
1715
+ <optional>
1716
+ <attribute name="edges"/>
1717
+ </optional>
1718
+ <optional>
1719
+ <attribute name="loop-orientation"/>
1720
+ </optional>
1721
+ <optional>
1722
+ <attribute name="style"/>
1723
+ </optional>
1724
+ <ref name="FillAttributes"/>
1725
+ <ref name="LabelAttributes"/>
1726
+ <optional>
1727
+ <ref name="LabelText"/>
1728
+ </optional>
1729
+ </element>
1730
+ </zeroOrMore>
1731
+ <zeroOrMore>
1732
+ <element name="edge">
1733
+ <optional>
1734
+ <attribute name="at"/>
1735
+ </optional>
1736
+ <attribute name="vertices"/>
1737
+ <optional>
1738
+ <attribute name="weight"/>
1739
+ </optional>
1740
+ <optional>
1741
+ <attribute name="loop-scale"/>
1742
+ </optional>
1743
+ <optional>
1744
+ <attribute name="label-location"/>
1745
+ </optional>
1746
+ <ref name="StrokeAttributes"/>
1747
+ <ref name="LabelAttributes"/>
1748
+ <optional>
1749
+ <ref name="LabelText"/>
1750
+ </optional>
1751
+ </element>
1752
+ </zeroOrMore>
1753
+ </interleave>
1754
+ <ref name="CommonAttributes"/>
1755
+ </element>
1756
+ </define>
1757
+ <define name="Parametric-Curve">
1758
+ <element name="parametric-curve">
1759
+ <optional>
1760
+ <attribute name="at"/>
1761
+ </optional>
1762
+ <attribute name="function"/>
1763
+ <attribute name="domain"/>
1764
+ <optional>
1765
+ <attribute name="N"/>
1766
+ </optional>
1767
+ <optional>
1768
+ <attribute name="closed">
1769
+ <choice>
1770
+ <value>yes</value>
1771
+ <value>no</value>
1772
+ </choice>
1773
+ </attribute>
1774
+ </optional>
1775
+ <optional>
1776
+ <attribute name="arrows"/>
1777
+ </optional>
1778
+ <optional>
1779
+ <attribute name="arrow-location"/>
1780
+ </optional>
1781
+ <optional>
1782
+ <attribute name="arrow-width"/>
1783
+ </optional>
1784
+ <optional>
1785
+ <attribute name="arrow-angles"/>
1786
+ </optional>
1787
+ <optional>
1788
+ <attribute name="reverse">
1789
+ <choice>
1790
+ <value>yes</value>
1791
+ <value>no</value>
1792
+ </choice>
1793
+ </attribute>
1794
+ </optional>
1795
+ <ref name="FillAttributes"/>
1796
+ <ref name="CommonAttributes"/>
1797
+ </element>
1798
+ </define>
1799
+ <define name="Path">
1800
+ <element name="path">
1801
+ <optional>
1802
+ <attribute name="at"/>
1803
+ </optional>
1804
+ <attribute name="start"/>
1805
+ <optional>
1806
+ <attribute name="closed"/>
1807
+ </optional>
1808
+ <optional>
1809
+ <attribute name="arrows"/>
1810
+ </optional>
1811
+ <optional>
1812
+ <attribute name="arrow-width"/>
1813
+ </optional>
1814
+ <optional>
1815
+ <attribute name="arrow-angles"/>
1816
+ </optional>
1817
+ <optional>
1818
+ <attribute name="reverse">
1819
+ <choice>
1820
+ <value>yes</value>
1821
+ <value>no</value>
1822
+ </choice>
1823
+ </attribute>
1824
+ </optional>
1825
+ <optional>
1826
+ <attribute name="mid-arrow">
1827
+ <choice>
1828
+ <value>yes</value>
1829
+ <value>no</value>
1830
+ </choice>
1831
+ </attribute>
1832
+ </optional>
1833
+ <ref name="FillAttributes"/>
1834
+ <ref name="CommonAttributes"/>
1835
+ <ref name="PathElements"/>
1836
+ </element>
1837
+ </define>
1838
+ <define name="Plot-DE-Solution">
1839
+ <element name="plot-de-solution">
1840
+ <optional>
1841
+ <attribute name="at"/>
1842
+ </optional>
1843
+ <optional>
1844
+ <attribute name="solution"/>
1845
+ </optional>
1846
+ <optional>
1847
+ <attribute name="axes"/>
1848
+ </optional>
1849
+ <optional>
1850
+ <attribute name="arrow">
1851
+ <choice>
1852
+ <value>yes</value>
1853
+ <value>no</value>
1854
+ </choice>
1855
+ </attribute>
1856
+ </optional>
1857
+ <optional>
1858
+ <attribute name="arrow-width"/>
1859
+ </optional>
1860
+ <optional>
1861
+ <attribute name="arrow-location"/>
1862
+ </optional>
1863
+ <optional>
1864
+ <attribute name="function"/>
1865
+ </optional>
1866
+ <optional>
1867
+ <attribute name="t0"/>
1868
+ </optional>
1869
+ <optional>
1870
+ <attribute name="y0"/>
1871
+ </optional>
1872
+ <optional>
1873
+ <attribute name="t1"/>
1874
+ </optional>
1875
+ <optional>
1876
+ <attribute name="method"/>
1877
+ </optional>
1878
+ <optional>
1879
+ <attribute name="N"/>
1880
+ </optional>
1881
+ <optional>
1882
+ <attribute name="max-step"/>
1883
+ </optional>
1884
+ <ref name="StrokeAttributes"/>
1885
+ <ref name="CommonAttributes"/>
1886
+ </element>
1887
+ </define>
1888
+ <define name="Point">
1889
+ <element name="point">
1890
+ <attribute name="p"/>
1891
+ <optional>
1892
+ <attribute name="at"/>
1893
+ </optional>
1894
+ <optional>
1895
+ <attribute name="style"/>
1896
+ </optional>
1897
+ <optional>
1898
+ <attribute name="size"/>
1899
+ </optional>
1900
+ <optional>
1901
+ <attribute name="coordinates">
1902
+ <choice>
1903
+ <value>cartesian</value>
1904
+ <value>polar</value>
1905
+ </choice>
1906
+ </attribute>
1907
+ </optional>
1908
+ <optional>
1909
+ <attribute name="degrees">
1910
+ <choice>
1911
+ <value>yes</value>
1912
+ <value>no</value>
1913
+ </choice>
1914
+ </attribute>
1915
+ </optional>
1916
+ <ref name="LabelAttributes"/>
1917
+ <ref name="FillAttributes"/>
1918
+ <ref name="CommonAttributes"/>
1919
+ <optional>
1920
+ <ref name="LabelText"/>
1921
+ </optional>
1922
+ </element>
1923
+ </define>
1924
+ <define name="Polygon">
1925
+ <element name="polygon">
1926
+ <optional>
1927
+ <attribute name="at"/>
1928
+ </optional>
1929
+ <attribute name="points"/>
1930
+ <optional>
1931
+ <attribute name="parameter"/>
1932
+ </optional>
1933
+ <optional>
1934
+ <attribute name="corner-radius"/>
1935
+ </optional>
1936
+ <optional>
1937
+ <attribute name="arrows"/>
1938
+ </optional>
1939
+ <optional>
1940
+ <attribute name="closed">
1941
+ <choice>
1942
+ <value>yes</value>
1943
+ <value>no</value>
1944
+ </choice>
1945
+ </attribute>
1946
+ </optional>
1947
+ <optional>
1948
+ <attribute name="arrow-width"/>
1949
+ </optional>
1950
+ <optional>
1951
+ <attribute name="arrow-angles"/>
1952
+ </optional>
1953
+ <ref name="FillAttributes"/>
1954
+ <ref name="CommonAttributes"/>
1955
+ </element>
1956
+ </define>
1957
+ <define name="Rectangle">
1958
+ <element name="rectangle">
1959
+ <optional>
1960
+ <attribute name="at"/>
1961
+ </optional>
1962
+ <optional>
1963
+ <attribute name="lower-left"/>
1964
+ </optional>
1965
+ <optional>
1966
+ <attribute name="center"/>
1967
+ </optional>
1968
+ <optional>
1969
+ <attribute name="dimensions"/>
1970
+ </optional>
1971
+ <optional>
1972
+ <attribute name="rotate"/>
1973
+ </optional>
1974
+ <optional>
1975
+ <attribute name="corner-radius"/>
1976
+ </optional>
1977
+ <ref name="FillAttributes"/>
1978
+ <ref name="CommonAttributes"/>
1979
+ </element>
1980
+ </define>
1981
+ <define name="Riemann-Sum">
1982
+ <element name="riemann-sum">
1983
+ <optional>
1984
+ <attribute name="at"/>
1985
+ </optional>
1986
+ <attribute name="function"/>
1987
+ <attribute name="N"/>
1988
+ <optional>
1989
+ <attribute name="domain"/>
1990
+ </optional>
1991
+ <optional>
1992
+ <attribute name="rule"/>
1993
+ </optional>
1994
+ <ref name="FillAttributes"/>
1995
+ <ref name="CommonAttributes"/>
1996
+ </element>
1997
+ </define>
1998
+ <define name="Scatter">
1999
+ <element name="scatter">
2000
+ <optional>
2001
+ <attribute name="at"/>
2002
+ </optional>
2003
+ <optional>
2004
+ <attribute name="points"/>
2005
+ </optional>
2006
+ <optional>
2007
+ <attribute name="data"/>
2008
+ </optional>
2009
+ <optional>
2010
+ <attribute name="x"/>
2011
+ </optional>
2012
+ <optional>
2013
+ <attribute name="y"/>
2014
+ </optional>
2015
+ <optional>
2016
+ <attribute name="filter"/>
2017
+ </optional>
2018
+ <optional>
2019
+ <attribute name="point-text"/>
2020
+ </optional>
2021
+ <optional>
2022
+ <attribute name="annotate">
2023
+ <choice>
2024
+ <value>yes</value>
2025
+ <value>no</value>
2026
+ </choice>
2027
+ </attribute>
2028
+ </optional>
2029
+ <optional>
2030
+ <attribute name="text"/>
2031
+ </optional>
2032
+ <ref name="FillAttributes"/>
2033
+ <ref name="CommonAttributes"/>
2034
+ </element>
2035
+ </define>
2036
+ <define name="Shape">
2037
+ <element name="shape">
2038
+ <optional>
2039
+ <attribute name="at"/>
2040
+ </optional>
2041
+ <optional>
2042
+ <attribute name="shape"/>
2043
+ </optional>
2044
+ <optional>
2045
+ <attribute name="shapes"/>
2046
+ </optional>
2047
+ <optional>
2048
+ <attribute name="operation"/>
2049
+ </optional>
2050
+ <ref name="FillAttributes"/>
2051
+ <ref name="CommonAttributes"/>
2052
+ </element>
2053
+ </define>
2054
+ <define name="Slope-Field">
2055
+ <element name="slope-field">
2056
+ <optional>
2057
+ <attribute name="at"/>
2058
+ </optional>
2059
+ <attribute name="function"/>
2060
+ <optional>
2061
+ <attribute name="arrows">
2062
+ <choice>
2063
+ <value>yes</value>
2064
+ <value>no</value>
2065
+ </choice>
2066
+ </attribute>
2067
+ </optional>
2068
+ <optional>
2069
+ <attribute name="arrow-width"/>
2070
+ </optional>
2071
+ <optional>
2072
+ <attribute name="arrow-angles"/>
2073
+ </optional>
2074
+ <optional>
2075
+ <attribute name="system">
2076
+ <choice>
2077
+ <value>yes</value>
2078
+ <value>no</value>
2079
+ </choice>
2080
+ </attribute>
2081
+ </optional>
2082
+ <optional>
2083
+ <attribute name="spacings"/>
2084
+ </optional>
2085
+ <ref name="StrokeAttributes"/>
2086
+ <ref name="CommonAttributes"/>
2087
+ </element>
2088
+ </define>
2089
+ <define name="Spline">
2090
+ <element name="spline">
2091
+ <optional>
2092
+ <attribute name="at"/>
2093
+ </optional>
2094
+ <optional>
2095
+ <attribute name="bc"/>
2096
+ </optional>
2097
+ <attribute name="points"/>
2098
+ <optional>
2099
+ <attribute name="parameter"/>
2100
+ </optional>
2101
+ <optional>
2102
+ <attribute name="N"/>
2103
+ </optional>
2104
+ <optional>
2105
+ <attribute name="arrows"/>
2106
+ </optional>
2107
+ <optional>
2108
+ <attribute name="domain"/>
2109
+ </optional>
2110
+ <optional>
2111
+ <attribute name="arrow-location"/>
2112
+ </optional>
2113
+ <optional>
2114
+ <attribute name="closed">
2115
+ <choice>
2116
+ <value>yes</value>
2117
+ <value>no</value>
2118
+ </choice>
2119
+ </attribute>
2120
+ </optional>
2121
+ <optional>
2122
+ <attribute name="arrow-width"/>
2123
+ </optional>
2124
+ <optional>
2125
+ <attribute name="arrow-angles"/>
2126
+ </optional>
2127
+ <optional>
2128
+ <attribute name="name"/>
2129
+ </optional>
2130
+ <ref name="FillAttributes"/>
2131
+ <ref name="CommonAttributes"/>
2132
+ </element>
2133
+ </define>
2134
+ <define name="Tangent-line">
2135
+ <element name="tangent-line">
2136
+ <optional>
2137
+ <attribute name="at"/>
2138
+ </optional>
2139
+ <attribute name="function"/>
2140
+ <attribute name="point"/>
2141
+ <optional>
2142
+ <attribute name="domain"/>
2143
+ </optional>
2144
+ <optional>
2145
+ <attribute name="infinite">
2146
+ <choice>
2147
+ <value>yes</value>
2148
+ <value>no</value>
2149
+ </choice>
2150
+ </attribute>
2151
+ </optional>
2152
+ <ref name="StrokeAttributes"/>
2153
+ <ref name="CommonAttributes"/>
2154
+ </element>
2155
+ </define>
2156
+ <define name="Triangle">
2157
+ <element name="triangle">
2158
+ <optional>
2159
+ <attribute name="at"/>
2160
+ </optional>
2161
+ <attribute name="vertices"/>
2162
+ <optional>
2163
+ <attribute name="angle-markers">
2164
+ <choice>
2165
+ <value>yes</value>
2166
+ <value>no</value>
2167
+ </choice>
2168
+ </attribute>
2169
+ </optional>
2170
+ <optional>
2171
+ <attribute name="labels"/>
2172
+ </optional>
2173
+ <optional>
2174
+ <attribute name="show-vertices">
2175
+ <choice>
2176
+ <value>yes</value>
2177
+ <value>no</value>
2178
+ </choice>
2179
+ </attribute>
2180
+ </optional>
2181
+ <optional>
2182
+ <attribute name="point-fill"/>
2183
+ </optional>
2184
+ <ref name="FillAttributes"/>
2185
+ <ref name="CommonAttributes"/>
2186
+ </element>
2187
+ </define>
2188
+ <define name="Vector">
2189
+ <element name="vector">
2190
+ <optional>
2191
+ <attribute name="at"/>
2192
+ </optional>
2193
+ <attribute name="v"/>
2194
+ <optional>
2195
+ <attribute name="tail"/>
2196
+ </optional>
2197
+ <optional>
2198
+ <attribute name="scale"/>
2199
+ </optional>
2200
+ <optional>
2201
+ <attribute name="head-location"/>
2202
+ </optional>
2203
+ <optional>
2204
+ <attribute name="arrow-width"/>
2205
+ </optional>
2206
+ <optional>
2207
+ <attribute name="arrow-angles"/>
2208
+ </optional>
2209
+ <ref name="StrokeAttributes"/>
2210
+ <ref name="CommonAttributes"/>
2211
+ </element>
2212
+ </define>
2213
+ <define name="Vector-Field">
2214
+ <element name="vector-field">
2215
+ <optional>
2216
+ <attribute name="at"/>
2217
+ </optional>
2218
+ <optional>
2219
+ <attribute name="function"/>
2220
+ </optional>
2221
+ <optional>
2222
+ <attribute name="spacings"/>
2223
+ </optional>
2224
+ <optional>
2225
+ <attribute name="scale"/>
2226
+ </optional>
2227
+ <optional>
2228
+ <attribute name="curve"/>
2229
+ </optional>
2230
+ <optional>
2231
+ <attribute name="domain"/>
2232
+ </optional>
2233
+ <optional>
2234
+ <attribute name="N"/>
2235
+ </optional>
2236
+ <optional>
2237
+ <attribute name="arrow-width"/>
2238
+ </optional>
2239
+ <optional>
2240
+ <attribute name="arrow-angles">
2241
+ <optional>
2242
+ <text/>
2243
+ </optional>
2244
+ </attribute>
2245
+ </optional>
2246
+ <ref name="StrokeAttributes"/>
2247
+ <ref name="CommonAttributes"/>
2248
+ </element>
2249
+ </define>
2250
+ </grammar>