-
Notifications
You must be signed in to change notification settings - Fork 21
/
tyxml_lwd.ml
1911 lines (1826 loc) · 90.5 KB
/
tyxml_lwd.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
open Js_of_ocaml
type raw_node = Dom.node Js.t
type 'a live = 'a Lwd_seq.t Lwd.t
type 'a attr = 'a option Lwd.t
let some x = Some x
let empty = Lwd.pure Lwd_seq.empty
module W : Xml_wrap.T
with type 'a t = 'a Lwd.t
with type ('a, 'b) ft = 'a -> 'b
with type 'a tlist = 'a Lwd.t list
=
struct
type 'a t = 'a Lwd.t
type (-'a, 'b) ft = 'a -> 'b
type 'a tlist = 'a Lwd.t list
let return = Lwd.pure
let fmap f x = Lwd.map ~f x
let nil () = []
let singleton x = [x]
let append = (@)
let cons x xs = x :: xs
let map f xs = List.map (fun x -> Lwd.map ~f x) xs
end
type child_tree =
| Leaf of raw_node
| Inner of { mutable bound: raw_node Js.opt;
left: child_tree; right: child_tree; }
let child_node node = Leaf node
let child_join left right = Inner { bound = Js.null; left; right }
let js_lwd_to_remove =
Js.string "lwd-to-remove" (* HACK Could be turned into a Javascript symbol *)
let contains_focus node =
Js.to_bool (Js.Unsafe.meth_call (node : raw_node) "contains"
[|Js.Unsafe.inject Dom_html.document##.activeElement|])
let update_children (self : raw_node) (children : raw_node live) : unit Lwd.t =
let reducer =
ref (Lwd_seq.Reducer.make ~map:child_node ~reduce:child_join)
in
Lwd.map children ~f:begin fun children ->
let dropped, reducer' =
Lwd_seq.Reducer.update_and_get_dropped !reducer children in
reducer := reducer';
let schedule_for_removal child () = match child with
| Leaf node -> Js.Unsafe.set node js_lwd_to_remove Js._true
| Inner _ -> ()
in
Lwd_seq.Reducer.fold_dropped `Map schedule_for_removal dropped ();
let preserve_focus = contains_focus self in
begin match Lwd_seq.Reducer.reduce reducer' with
| None -> ()
| Some tree ->
let rec update acc = function
| Leaf x ->
Js.Unsafe.delete x js_lwd_to_remove;
if x##.parentNode != Js.some self then
ignore (self##insertBefore x acc)
else if x##.nextSibling != acc then begin
(* Parent is correct but sibling is not: swap nodes, but be
cautious with focus *)
if preserve_focus && contains_focus x then (
let rec shift_siblings () =
let sibling = x##.nextSibling in
if sibling == acc then
true
else match Js.Opt.to_option sibling with
| None -> false
| Some sibling ->
ignore (self##insertBefore sibling (Js.some x));
shift_siblings ()
in
if not (shift_siblings ()) then
ignore (self##insertBefore x acc)
)
else
ignore (self##insertBefore x acc)
end;
Js.some x
| Inner t ->
if Js.Opt.test t.bound then t.bound else (
let acc = update acc t.right in
let acc = update acc t.left in
t.bound <- acc;
acc
)
in
ignore (update Js.null tree)
end;
let remove_child child () = match child with
| Leaf node ->
if Js.Opt.test (Js.Unsafe.get node js_lwd_to_remove) then
ignore (self##removeChild node)
| Inner _ -> ()
in
Lwd_seq.Reducer.fold_dropped `Map remove_child dropped ();
end
let update_children_list self children =
update_children self (Lwd.join (Lwd_utils.pack Lwd_seq.lwd_monoid children))
module Attrib = struct
type t =
| Event of
{ name: string; value: (Dom_html.event Js.t -> bool) attr }
| Event_mouse of
{ name: string; value: (Dom_html.mouseEvent Js.t -> bool) attr }
| Event_keyboard of
{ name: string; value: (Dom_html.keyboardEvent Js.t -> bool) attr }
| Event_touch of
{ name: string; value: (Dom_html.touchEvent Js.t -> bool) attr }
| Attrib of
{ name: string; value: Js.js_string Js.t attr }
end
module Xml :
sig
include Xml_sigs.T
with module W = W
and type uri = string
and type elt = raw_node live
and type attrib = Attrib.t
and type event_handler = (Dom_html.event Js.t -> bool) attr
and type mouse_event_handler = (Dom_html.mouseEvent Js.t -> bool) attr
and type keyboard_event_handler = (Dom_html.keyboardEvent Js.t -> bool) attr
and type touch_event_handler = (Dom_html.touchEvent Js.t -> bool) attr
end
= struct
module W = W
type elt = raw_node live
type 'a wrap = 'a W.t
type 'a list_wrap = 'a W.tlist
type uri = string
let uri_of_string s = s
let string_of_uri s = s
type aname = string
type event_handler = (Dom_html.event Js.t -> bool) attr
type mouse_event_handler = (Dom_html.mouseEvent Js.t -> bool) attr
type keyboard_event_handler = (Dom_html.keyboardEvent Js.t -> bool) attr
type touch_event_handler = (Dom_html.touchEvent Js.t -> bool) attr
type attrib = Attrib.t
let attrib name value f = Attrib.Attrib {name; value = Lwd.map ~f value}
let js_string_of_float f = (Js.number_of_float f)##toString
let js_string_of_int i = (Js.number_of_float (float_of_int i))##toString
let float_attrib n v = attrib n v
(fun v -> Some (js_string_of_float v))
let int_attrib n v = attrib n v
(fun v -> Some (js_string_of_int v))
let string_attrib n v = attrib n v
(fun v -> Some (Js.string v))
let space_sep_attrib n v = attrib n v
(fun v -> Some (Js.string (String.concat " " v)))
let comma_sep_attrib n v = attrib n v
(fun v -> Some (Js.string (String.concat "," v)))
let event_handler_attrib n v =
Attrib.Event {name = n; value = v}
let mouse_event_handler_attrib n v =
Attrib.Event_mouse {name = n; value = v}
let keyboard_event_handler_attrib n v =
Attrib.Event_keyboard {name = n; value = v}
let touch_event_handler_attrib n v =
Attrib.Event_touch {name = n; value = v}
let uri_attrib n v = attrib n v
(fun v -> Some (Js.string v))
let uris_attrib n v = attrib n v
(fun v -> Some (Js.string (String.concat " " v)))
let attach_attrib (node: #Dom.element Js.t) name value =
let f = match name with
| "style" -> (function
| None -> node##.style##.cssText := Js.string ""
| Some v -> node##.style##.cssText := v
)
| "value" -> (function
| None -> (Obj.magic node : _ Js.t)##.value := Js.string ""
| Some v -> (Obj.magic node : _ Js.t)##.value := v
)
| name -> let name = Js.string name in (function
| None -> node##removeAttribute name
| Some v -> node##setAttribute name v
)
in
Lwd.map ~f value
let attach_event (node: #Dom.element Js.t) name value =
let name = Js.string name in
Lwd.map ~f:(function
| None -> Js.Unsafe.set node name Js.null
| Some v -> Js.Unsafe.set node name (fun ev -> Js.bool (v ev))
) value
(** Element *)
type data = raw_node
type ename = string
let pure x = Lwd.pure (Lwd_seq.element x)
let as_node (x : #Dom.node Js.t) = (x :> Dom.node Js.t)
let pure_node x = pure (as_node x)
let empty () = empty
let comment c = pure_node (Dom_html.document##createComment (Js.string c))
let pcdata (text : string Lwd.t) : elt =
let node =
Lwd_seq.element (Dom_html.document##createTextNode (Js.string ""))
in
Lwd.map text ~f:(fun text ->
begin match Lwd_seq.view node with
| Lwd_seq.Element elt -> elt##.data := Js.string text;
| _ -> assert false
end;
(node : Dom.text Js.t Lwd_seq.t :> raw_node Lwd_seq.t)
)
let encodedpcdata = pcdata
let entity =
let string_fold s ~pos ~init ~f =
let r = ref init in
for i = pos to String.length s - 1 do
let c = s.[i] in
r := f !r c
done;
!r
in
let invalid_entity e = failwith (Printf.sprintf "Invalid entity %S" e) in
let int_of_char = function
| '0' .. '9' as x -> Some (Char.code x - Char.code '0')
| 'a' .. 'f' as x -> Some (Char.code x - Char.code 'a' + 10)
| 'A' .. 'F' as x -> Some (Char.code x - Char.code 'A' + 10)
| _ -> None
in
let parse_int ~pos ~base e =
string_fold e ~pos ~init:0 ~f:(fun acc x ->
match int_of_char x with
| Some d when d < base -> (acc * base) + d
| Some _ | None -> invalid_entity e)
in
let is_alpha_num = function
| '0' .. '9' | 'a' .. 'z' | 'A' .. 'Z' -> true
| _ -> false
in
fun e ->
let len = String.length e in
let str =
if len >= 1 && Char.equal e.[0] '#'
then
let i =
if len >= 2 && (Char.equal e.[1] 'x' || Char.equal e.[1] 'X')
then parse_int ~pos:2 ~base:16 e
else parse_int ~pos:1 ~base:10 e
in
Js.string_constr##fromCharCode i
else if string_fold e ~pos:0 ~init:true ~f:(fun acc x ->
(* This is not quite right according to
https://www.xml.com/axml/target.html#NT-Name.
but it seems to cover all html5 entities
https://dev.w3.org/html5/html-author/charref *)
acc && is_alpha_num x)
then
match e with
| "quot" -> Js.string "\""
| "amp" -> Js.string "&"
| "apos" -> Js.string "'"
| "lt" -> Js.string "<"
| "gt" -> Js.string ">"
| "" -> invalid_entity e
| _ -> Dom_html.decode_html_entities (Js.string ("&" ^ e ^ ";"))
else invalid_entity e
in
pure_node (Dom_html.document##createTextNode str)
let attach_attribs node l =
Lwd_utils.pack ((), fun () () -> ())
(List.map (function
| Attrib.Attrib {name; value} -> attach_attrib node name value
| Event {name; value} -> attach_event node name value
| Event_mouse {name; value} -> attach_event node name value
| Event_keyboard {name; value} -> attach_event node name value
| Event_touch {name; value} -> attach_event node name value
) l)
let rec find_ns : attrib list -> Js.js_string Js.t option = function
| [] -> None
| Attrib {name = "xmlns"; value} :: _ ->
begin
(* The semantics should not differ whether an Lwd value is pure or not,
but let's do an exception for xml namespaces (those are managed
differently from other and can't be changed at runtime). *)
match Lwd.is_pure value with
| None ->
prerr_endline "xmlns attribute should be static";
None
| Some x -> x
end
| _ :: rest -> find_ns rest
let createElement ~ns name =
let name = Js.string name in
match ns with
| None -> Dom_html.document##createElement name
| Some ns -> Dom_html.document##createElementNS ns name
let leaf ?(a = []) name : elt =
let e = createElement ~ns:(find_ns a) name in
let e' = Lwd_seq.element (e : Dom_html.element Js.t :> data) in
Lwd.map (attach_attribs e a) ~f:(fun () -> e')
let node ?(a = []) name (children : elt list_wrap) : elt =
let e = createElement ~ns:(find_ns a) name in
let e' = Lwd_seq.element e in
Lwd.map2
(update_children_list (e :> data) children)
(attach_attribs e a)
~f:(fun () () -> (e' :> data Lwd_seq.t))
let cdata s = pure_node (Dom_html.document##createTextNode (Js.string s))
let cdata_script s = cdata s
let cdata_style s = cdata s
end
type +'a node = raw_node
type +'a attrib = Xml.attrib
module Raw_svg = Svg_f.Make(struct
include Xml
let svg_xmlns = Attrib.Attrib {
name = "xmlns";
value = Lwd.pure (Some (Js.string "http://www.w3.org/2000/svg"));
}
let leaf ?(a = []) name =
leaf ~a:(svg_xmlns :: a) name
let node ?(a = []) name (children : elt list_wrap) =
node ~a:(svg_xmlns :: a) name children
end)
open Svg_types
module Svg : sig
type +'a elt = 'a node live
type doc = [`Svg] elt
type nonrec +'a attrib = 'a attrib
module Xml = Xml
type ('a, 'b) nullary = ?a:'a attrib list -> unit -> 'b elt
type ('a, 'b, 'c) unary = ?a:'a attrib list -> 'b elt -> 'c elt
type ('a, 'b, 'c) star = ?a:'a attrib list -> 'b elt list -> 'c elt
module Info : Xml_sigs.Info
type uri = string
val string_of_uri : uri -> string
val uri_of_string : string -> uri
val a_x : Unit.length Lwd.t -> [>`X] attrib
val a_y : Unit.length Lwd.t -> [>`Y] attrib
val a_width : Unit.length Lwd.t -> [>`Width] attrib
val a_height : Unit.length Lwd.t -> [>`Height] attrib
val a_preserveAspectRatio : uri Lwd.t -> [>`PreserveAspectRatio] attrib
val a_zoomAndPan : [<`Disable|`Magnify] Lwd.t -> [>`ZoomAndSpan] attrib
val a_href : uri Lwd.t -> [>`Xlink_href] attrib
val a_requiredExtensions : spacestrings Lwd.t -> [>`RequiredExtension] attrib
val a_systemLanguage :
commastrings Lwd.t -> [>`SystemLanguage] attrib
val a_externalRessourcesRequired :
bool Lwd.t -> [>`ExternalRessourcesRequired] attrib
val a_id : uri Lwd.t -> [>`Id] attrib
val a_user_data : uri -> uri Lwd.t -> [>`User_data] attrib
val a_xml_lang : uri Lwd.t -> [>`Xml_Lang] attrib
val a_type : uri Lwd.t -> [>`Type] attrib
val a_media : commastrings Lwd.t -> [>`Media] attrib
val a_class : spacestrings Lwd.t -> [>`Class] attrib
val a_style : uri Lwd.t -> [>`Style] attrib
val a_transform : transforms Lwd.t -> [>`Transform] attrib
val a_viewBox : fourfloats Lwd.t -> [>`ViewBox] attrib
val a_d : uri Lwd.t -> [>`D] attrib
val a_pathLength : float Lwd.t -> [>`PathLength] attrib
val a_rx : Unit.length Lwd.t -> [>`Rx] attrib
val a_ry : Unit.length Lwd.t -> [>`Ry] attrib
val a_cx : Unit.length Lwd.t -> [>`Cx] attrib
val a_cy : Unit.length Lwd.t -> [>`Cy] attrib
val a_r : Unit.length Lwd.t -> [>`R] attrib
val a_x1 : Unit.length Lwd.t -> [>`X1] attrib
val a_y1 : Unit.length Lwd.t -> [>`Y1] attrib
val a_x2 : Unit.length Lwd.t -> [>`X2] attrib
val a_y2 : Unit.length Lwd.t -> [>`Y2] attrib
val a_points : coords Lwd.t -> [>`Points] attrib
val a_x_list : lengths Lwd.t -> [>`X_list] attrib
val a_y_list : lengths Lwd.t -> [>`Y_list] attrib
val a_dx : float Lwd.t -> [>`Dx] attrib
val a_dy : float Lwd.t -> [>`Dy] attrib
val a_dx_list : lengths Lwd.t -> [>`Dx_list] attrib
val a_dy_list : lengths Lwd.t -> [>`Dy_list] attrib
val a_lengthAdjust :
[<`Spacing|`SpacingAndGlyphs] Lwd.t -> [>`LengthAdjust] attrib
val a_textLength : Unit.length Lwd.t -> [>`TextLength] attrib
val a_text_anchor :
[<`End|`Inherit|`Middle|`Start] Lwd.t -> [>`Text_Anchor] attrib
val a_text_decoration :
[<`Blink|`Inherit|`Line_through|`None|`Overline|`Underline] Lwd.t ->
[>`Text_Decoration] attrib
val a_text_rendering :
[<`Auto|`GeometricPrecision|`Inherit
|`OptimizeLegibility|`OptimizeSpeed] Lwd.t ->
[>`Text_Rendering] attrib
val a_rotate : numbers Lwd.t -> [>`Rotate] attrib
val a_startOffset : Unit.length Lwd.t -> [>`StartOffset] attrib
val a_method : [<`Align | `Stretch] Lwd.t -> [>`Method] attrib
val a_spacing : [<`Auto | `Exact] Lwd.t -> [>`Spacing] attrib
val a_glyphRef : uri Lwd.t -> [>`GlyphRef] attrib
val a_format : uri Lwd.t -> [>`Format] attrib
val a_markerUnits :
[<`StrokeWidth | `UserSpaceOnUse] Lwd.t -> [>`MarkerUnits] attrib
val a_refX : Unit.length Lwd.t -> [>`RefX] attrib
val a_refY : Unit.length Lwd.t -> [>`RefY] attrib
val a_markerWidth : Unit.length Lwd.t -> [>`MarkerWidth] attrib
val a_markerHeight :
Unit.length Lwd.t -> [>`MarkerHeight] attrib
val a_orient : Unit.angle option Lwd.t -> [>`Orient] attrib
val a_local : uri Lwd.t -> [>`Local] attrib
val a_rendering_intent :
[<`Absolute_colorimetric|`Auto|`Perceptual
|`Relative_colorimetric|`Saturation] Lwd.t ->
[>`Rendering_Indent] attrib
val a_gradientUnits :
[<`ObjectBoundingBox|`UserSpaceOnUse] Lwd.t -> [`GradientUnits] attrib
val a_gradientTransform : transforms Lwd.t -> [>`Gradient_Transform] attrib
val a_spreadMethod : [<`Pad|`Reflect|`Repeat] Lwd.t -> [>`SpreadMethod] attrib
val a_fx : Unit.length Lwd.t -> [>`Fx] attrib
val a_fy : Unit.length Lwd.t -> [>`Fy] attrib
val a_offset : [<`Number of float | `Percentage of float] Lwd.t ->
[>`Offset] attrib
val a_patternUnits : [<`ObjectBoundingBox|`UserSpaceOnUse] Lwd.t ->
[>`PatternUnits] attrib
val a_patternContentUnits : [<`ObjectBoundingBox|`UserSpaceOnUse] Lwd.t ->
[>`PatternContentUnits] attrib
val a_patternTransform : transforms Lwd.t -> [>`PatternTransform] attrib
val a_clipPathUnits : [<`ObjectBoundingBox|`UserSpaceOnUse] Lwd.t ->
[>`ClipPathUnits] attrib
val a_maskUnits : [<`ObjectBoundingBox|`UserSpaceOnUse] Lwd.t ->
[>`MaskUnits] attrib
val a_maskContentUnits : [<`ObjectBoundingBox|`UserSpaceOnUse] Lwd.t ->
[>`MaskContentUnits] attrib
val a_primitiveUnits : [<`ObjectBoundingBox|`UserSpaceOnUse] Lwd.t ->
[>`PrimitiveUnits] attrib
val a_filterRes : number_optional_number Lwd.t -> [>`FilterResUnits] attrib
val a_result : uri Lwd.t -> [>`Result] attrib
val a_in :
[<`BackgroundAlpha|`BackgroundImage|`FillPaint|`Ref of uri
|`SourceAlpha|`SourceGraphic|`StrokePaint] Lwd.t -> [>`In] attrib
val a_in2 :
[<`BackgroundAlpha|`BackgroundImage|`FillPaint|`Ref of uri
|`SourceAlpha|`SourceGraphic|`StrokePaint] Lwd.t -> [>`In2] attrib
val a_azimuth : float Lwd.t -> [>`Azimuth] attrib
val a_elevation : float Lwd.t -> [>`Elevation] attrib
val a_pointsAtX : float Lwd.t -> [>`PointsAtX] attrib
val a_pointsAtY : float Lwd.t -> [>`PointsAtY] attrib
val a_pointsAtZ : float Lwd.t -> [>`PointsAtZ] attrib
val a_specularExponent : float Lwd.t -> [>`SpecularExponent] attrib
val a_specularConstant : float Lwd.t -> [>`SpecularConstant] attrib
val a_limitingConeAngle : float Lwd.t -> [>`LimitingConeAngle] attrib
val a_mode :
[<`Darken|`Lighten|`Multiply|`Normal|`Screen] Lwd.t -> [>`Mode] attrib
val a_feColorMatrix_type :
[<`HueRotate|`LuminanceToAlpha|`Matrix|`Saturate] Lwd.t ->
[>`Typefecolor] attrib
val a_values : numbers Lwd.t -> [>`Values] attrib
val a_transfer_type : [<`Discrete|`Gamma|`Identity|`Linear|`Table] Lwd.t ->
[>`Type_transfert] attrib
val a_tableValues : numbers Lwd.t -> [>`TableValues] attrib
val a_intercept : float Lwd.t -> [>`Intercept] attrib
val a_amplitude : float Lwd.t -> [>`Amplitude] attrib
val a_exponent : float Lwd.t -> [>`Exponent] attrib
val a_transfer_offset : float Lwd.t -> [>`Offset_transfer] attrib
val a_feComposite_operator : [<`Arithmetic|`Atop|`In|`Out|`Over|`Xor] Lwd.t ->
[>`OperatorComposite] attrib
val a_k1 : float Lwd.t -> [>`K1] attrib
val a_k2 : float Lwd.t -> [>`K2] attrib
val a_k3 : float Lwd.t -> [>`K3] attrib
val a_k4 : float Lwd.t -> [>`K4] attrib
val a_order : number_optional_number Lwd.t -> [>`Order] attrib
val a_kernelMatrix : numbers Lwd.t -> [>`KernelMatrix] attrib
val a_divisor : float Lwd.t -> [>`Divisor] attrib
val a_bias : float Lwd.t -> [>`Bias] attrib
val a_kernelUnitLength :
number_optional_number Lwd.t -> [>`KernelUnitLength] attrib
val a_targetX : int Lwd.t -> [>`TargetX] attrib
val a_targetY : int Lwd.t -> [>`TargetY] attrib
val a_edgeMode : [<`Duplicate|`None|`Wrap] Lwd.t -> [>`TargetY] attrib
val a_preserveAlpha : bool Lwd.t -> [>`TargetY] attrib
val a_surfaceScale : float Lwd.t -> [>`SurfaceScale] attrib
val a_diffuseConstant : float Lwd.t -> [>`DiffuseConstant] attrib
val a_scale : float Lwd.t -> [>`Scale] attrib
val a_xChannelSelector : [<`A|`B|`G|`R] Lwd.t -> [>`XChannelSelector] attrib
val a_yChannelSelector : [<`A|`B|`G|`R] Lwd.t -> [>`YChannelSelector] attrib
val a_stdDeviation : number_optional_number Lwd.t -> [>`StdDeviation] attrib
val a_feMorphology_operator : [<`Dilate|`Erode] Lwd.t -> [>`OperatorMorphology] attrib
val a_radius : number_optional_number Lwd.t -> [>`Radius] attrib
val a_baseFrenquency : number_optional_number Lwd.t -> [>`BaseFrequency] attrib
val a_numOctaves : int Lwd.t -> [>`NumOctaves] attrib
val a_seed : float Lwd.t -> [>`Seed] attrib
val a_stitchTiles : [<`NoStitch|`Stitch] Lwd.t -> [>`StitchTiles] attrib
val a_feTurbulence_type : [<`FractalNoise|`Turbulence] Lwd.t -> [>`TypeStitch] attrib
val a_target : uri Lwd.t -> [>`Xlink_target] attrib
val a_attributeName : uri Lwd.t -> [>`AttributeName] attrib
val a_attributeType : [<`Auto|`CSS|`XML] Lwd.t -> [>`AttributeType] attrib
val a_begin : uri Lwd.t -> [>`Begin] attrib
val a_dur : uri Lwd.t -> [>`Dur] attrib
val a_min : uri Lwd.t -> [>`Min] attrib
val a_max : uri Lwd.t -> [>`Max] attrib
val a_restart : [<`Always|`Never|`WhenNotActive] Lwd.t -> [>`Restart] attrib
val a_repeatCount : uri Lwd.t -> [>`RepeatCount] attrib
val a_repeatDur : uri Lwd.t -> [>`RepeatDur] attrib
val a_fill : paint Lwd.t -> [>`Fill] attrib
val a_animation_fill : [<`Freeze|`Remove] Lwd.t -> [>`Fill_Animation] attrib
val a_calcMode : [<`Discrete|`Linear|`Paced|`Spline] Lwd.t -> [>`CalcMode] attrib
val a_animation_values : strings Lwd.t -> [>`Valuesanim] attrib
val a_keyTimes : strings Lwd.t -> [>`KeyTimes] attrib
val a_keySplines : strings Lwd.t -> [>`KeySplines] attrib
val a_from : uri Lwd.t -> [>`From] attrib
val a_to : uri Lwd.t -> [>`To] attrib
val a_by : uri Lwd.t -> [>`By] attrib
val a_additive : [<`Replace|`Sum] Lwd.t -> [>`Additive] attrib
val a_accumulate : [<`None|`Sum] Lwd.t -> [>`Accumulate] attrib
val a_keyPoints : numbers_semicolon Lwd.t -> [>`KeyPoints] attrib
val a_path : uri Lwd.t -> [>`Path] attrib
val a_animateTransform_type :
[`Rotate|`Scale|`SkewX|`SkewY|`Translate] Lwd.t ->
[`Typeanimatetransform] attrib
val a_horiz_origin_x : float Lwd.t -> [>`HorizOriginX] attrib
val a_horiz_origin_y : float Lwd.t -> [>`HorizOriginY] attrib
val a_horiz_adv_x : float Lwd.t -> [>`HorizAdvX] attrib
val a_vert_origin_x : float Lwd.t -> [>`VertOriginX] attrib
val a_vert_origin_y : float Lwd.t -> [>`VertOriginY] attrib
val a_vert_adv_y : float Lwd.t -> [>`VertAdvY] attrib
val a_unicode : uri Lwd.t -> [>`Unicode] attrib
val a_glyph_name : uri Lwd.t -> [>`glyphname] attrib
val a_orientation : [<`H | `V] Lwd.t -> [>`Orientation] attrib
val a_arabic_form : [<`Initial|`Isolated|`Medial|`Terminal] Lwd.t ->
[>`Arabicform] attrib
val a_lang : uri Lwd.t -> [>`Lang] attrib
val a_u1 : uri Lwd.t -> [>`U1] attrib
val a_u2 : uri Lwd.t -> [>`U2] attrib
val a_g1 : uri Lwd.t -> [>`G1] attrib
val a_g2 : uri Lwd.t -> [>`G2] attrib
val a_k : uri Lwd.t -> [>`K] attrib
val a_font_family : uri Lwd.t -> [>`Font_Family] attrib
val a_font_style : uri Lwd.t -> [>`Font_Style] attrib
val a_font_variant : uri Lwd.t -> [>`Font_Variant] attrib
val a_font_weight : uri Lwd.t -> [>`Font_Weight] attrib
val a_font_stretch : uri Lwd.t -> [>`Font_Stretch] attrib
val a_font_size : uri Lwd.t -> [>`Font_Size] attrib
val a_unicode_range : uri Lwd.t -> [>`UnicodeRange] attrib
val a_units_per_em : uri Lwd.t -> [>`UnitsPerEm] attrib
val a_stemv : float Lwd.t -> [>`Stemv] attrib
val a_stemh : float Lwd.t -> [>`Stemh] attrib
val a_slope : float Lwd.t -> [>`Slope] attrib
val a_cap_height : float Lwd.t -> [>`CapHeight] attrib
val a_x_height : float Lwd.t -> [>`XHeight] attrib
val a_accent_height : float Lwd.t -> [>`AccentHeight] attrib
val a_ascent : float Lwd.t -> [>`Ascent] attrib
val a_widths : uri Lwd.t -> [>`Widths] attrib
val a_bbox : uri Lwd.t -> [>`Bbox] attrib
val a_ideographic : float Lwd.t -> [>`Ideographic] attrib
val a_alphabetic : float Lwd.t -> [>`Alphabetic] attrib
val a_mathematical : float Lwd.t -> [>`Mathematical] attrib
val a_hanging : float Lwd.t -> [>`Hanging] attrib
val a_videographic : float Lwd.t -> [>`VIdeographic] attrib
val a_v_alphabetic : float Lwd.t -> [>`VAlphabetic] attrib
val a_v_mathematical : float Lwd.t -> [>`VMathematical] attrib
val a_v_hanging : float Lwd.t -> [>`VHanging] attrib
val a_underline_position : float Lwd.t -> [>`UnderlinePosition] attrib
val a_underline_thickness : float Lwd.t -> [>`UnderlineThickness] attrib
val a_strikethrough_position : float Lwd.t -> [>`StrikethroughPosition] attrib
val a_strikethrough_thickness : float Lwd.t -> [>`StrikethroughThickness] attrib
val a_overline_position : float Lwd.t -> [>`OverlinePosition] attrib
val a_overline_thickness : float Lwd.t -> [>`OverlineThickness] attrib
val a_string : uri Lwd.t -> [>`String] attrib
val a_name : uri Lwd.t -> [>`Name] attrib
val a_alignment_baseline :
[<`After_edge|`Alphabetic|`Auto|`Baseline|`Before_edge|`Central|`Hanging
|`Ideographic|`Inherit|`Mathematical|`Middle
|`Text_after_edge|`Text_before_edge] Lwd.t -> [>`Alignment_Baseline] attrib
val a_dominant_baseline :
[<`Alphabetic|`Auto|`Central|`Hanging|`Ideographic|`Inherit
|`Mathematical|`Middle|`No_change|`Reset_size|`Text_after_edge
|`Text_before_edge|`Use_script] Lwd.t -> [>`Dominant_Baseline] attrib
val a_stop_color : uri Lwd.t -> [>`Stop_Color] attrib
val a_stop_opacity : float Lwd.t -> [>`Stop_Opacity] attrib
val a_stroke : paint Lwd.t -> [>`Stroke] attrib
val a_stroke_width : Unit.length Lwd.t -> [>`Stroke_Width] attrib
val a_stroke_linecap : [<`Butt|`Round|`Square] Lwd.t -> [>`Stroke_Linecap] attrib
val a_stroke_linejoin : [<`Bever|`Miter|`Round] Lwd.t -> [>`Stroke_Linejoin] attrib
val a_stroke_miterlimit : float Lwd.t -> [>`Stroke_Miterlimit] attrib
val a_stroke_dasharray : Unit.length list Lwd.t -> [>`Stroke_Dasharray] attrib
val a_stroke_dashoffset : Unit.length Lwd.t -> [>`Stroke_Dashoffset] attrib
val a_stroke_opacity : float Lwd.t -> [>`Stroke_Opacity] attrib
val a_onabort : Xml.event_handler -> [>`OnAbort] attrib
val a_onactivate : Xml.event_handler -> [>`OnActivate] attrib
val a_onbegin : Xml.event_handler -> [>`OnBegin] attrib
val a_onend : Xml.event_handler -> [>`OnEnd] attrib
val a_onerror : Xml.event_handler -> [>`OnError] attrib
val a_onfocusin : Xml.event_handler -> [>`OnFocusIn] attrib
val a_onfocusout : Xml.event_handler -> [>`OnFocusOut] attrib
val a_onrepeat : Xml.event_handler -> [>`OnRepeat] attrib
val a_onresize : Xml.event_handler -> [>`OnResize] attrib
val a_onscroll : Xml.event_handler -> [>`OnScroll] attrib
val a_onunload : Xml.event_handler -> [>`OnUnload] attrib
val a_onzoom : Xml.event_handler -> [>`OnZoom] attrib
val a_onclick : Xml.mouse_event_handler -> [>`OnClick] attrib
val a_onmousedown : Xml.mouse_event_handler -> [>`OnMouseDown] attrib
val a_onmouseup : Xml.mouse_event_handler -> [>`OnMouseUp] attrib
val a_onmouseover : Xml.mouse_event_handler -> [>`OnMouseOver] attrib
val a_onmouseout : Xml.mouse_event_handler -> [>`OnMouseOut] attrib
val a_onmousemove : Xml.mouse_event_handler -> [>`OnMouseMove] attrib
val a_ontouchstart : Xml.touch_event_handler -> [>`OnTouchStart] attrib
val a_ontouchend : Xml.touch_event_handler -> [>`OnTouchEnd] attrib
val a_ontouchmove : Xml.touch_event_handler -> [>`OnTouchMove] attrib
val a_ontouchcancel : Xml.touch_event_handler -> [>`OnTouchCancel] attrib
val txt : uri Lwd.t -> [>txt] elt
val svg : ([<svg_attr], [<svg_content], [>svg]) star
val g : ([<g_attr], [<g_content], [>g]) star
val defs : ([<defs_attr], [<defs_content], [>defs]) star
val desc : ([<desc_attr], [<desc_content], [>desc]) unary
val title : ([<desc_attr], [<title_content], [>title]) unary
val symbol : ([<symbol_attr], [<symbol_content], [>symbol]) star
val use : ([<use_attr], [<use_content], [>use]) star
val image : ([<image_attr], [<image_content], [>image]) star
val switch : ([<switch_attr], [<switch_content], [>switch]) star
val style : ([<style_attr], [<style_content], [>style]) unary
val path : ([<path_attr], [<path_content], [>path]) star
val rect : ([<rect_attr], [<rect_content], [>rect]) star
val circle : ([<circle_attr], [<circle_content], [>circle]) star
val ellipse : ([<ellipse_attr], [<ellipse_content], [>ellipse]) star
val line : ([<line_attr], [<line_content], [>line]) star
val polyline : ([<polyline_attr], [<polyline_content], [>polyline]) star
val polygon : ([<polygon_attr], [<polygon_content], [>polygon]) star
val text : ([<text_attr], [<text_content], [>text]) star
val tspan : ([<tspan_attr], [<tspan_content], [>tspan]) star
val textPath : ([<textpath_attr], [<textpath_content], [>textpath]) star
val marker : ([<marker_attr], [<marker_content], [>marker]) star
val linearGradient :
([<lineargradient_attr], [<lineargradient_content], [>lineargradient]) star
val radialGradient :
([<radialgradient_attr], [<radialgradient_content], [>radialgradient]) star
val stop : ([<stop_attr], [<stop_content], [>stop]) star
val pattern : ([<pattern_attr], [<pattern_content], [>pattern]) star
val clipPath : ([<clippath_attr], [<clippath_content], [>clippath]) star
val filter : ([<filter_attr], [<filter_content], [>filter]) star
val feDistantLight :
([<fedistantlight_attr], [<fedistantlight_content], [>fedistantlight]) star
val fePointLight :
([<fepointlight_attr], [<fepointlight_content], [>fepointlight]) star
val feSpotLight :
([<fespotlight_attr], [<fespotlight_content], [>fespotlight]) star
val feBlend : ([<feblend_attr], [<feblend_content], [>feblend]) star
val feColorMatrix :
([<fecolormatrix_attr], [<fecolormatrix_content], [>fecolormatrix]) star
val feComponentTransfer :
([<fecomponenttransfer_attr], [<fecomponenttransfer_content],
[>fecomponenttransfer]) star
val feFuncA : ([<fefunca_attr], [<fefunca_content], [>fefunca]) star
val feFuncG : ([<fefuncg_attr], [<fefuncg_content], [>fefuncg]) star
val feFuncB : ([<fefuncb_attr], [<fefuncb_content], [>fefuncb]) star
val feFuncR : ([<fefuncr_attr], [<fefuncr_content], [>fefuncr]) star
val feComposite :
([<fecomposite_attr], [<fecomposite_content], [>fecomposite]) star
val feConvolveMatrix :
([<feconvolvematrix_attr], [<feconvolvematrix_content],
[>feconvolvematrix]) star
val feDiffuseLighting :
([<fediffuselighting_attr], [<fediffuselighting_content],
[>fediffuselighting]) star
val feDisplacementMap :
([<fedisplacementmap_attr], [<fedisplacementmap_content],
[>fedisplacementmap]) star
val feFlood : ([<feflood_attr], [<feflood_content], [>feflood]) star
val feGaussianBlur :
([<fegaussianblur_attr], [<fegaussianblur_content], [>fegaussianblur]) star
val feImage : ([<feimage_attr], [<feimage_content], [>feimage]) star
val feMerge : ([<femerge_attr], [<femerge_content], [>femerge]) star
val feMorphology :
([<femorphology_attr], [<femorphology_content], [>femorphology]) star
val feOffset :
([<feoffset_attr], [<feoffset_content], [>feoffset]) star
val feSpecularLighting :
([<fespecularlighting_attr], [<fespecularlighting_content],
[>fespecularlighting]) star
val feTile : ([<fetile_attr], [<fetile_content], [>fetile]) star
val feTurbulence :
([<feturbulence_attr], [<feturbulence_content], [>feturbulence]) star
val cursor :
([<cursor_attr], [<descriptive_element], [>cursor]) star
val a : ([<a_attr], [<a_content], [>a]) star
val view : ([<view_attr], [<descriptive_element], [>view]) star
val script : ([<script_attr], [<script_content], [>script]) unary
val animate : ([<animate_attr], [<descriptive_element], [>animate]) star
val animation : ([<animation_attr], [<descriptive_element], [>animation]) star
[@@ocaml.warning "-3"]
val set : ([<set_attr], [<descriptive_element], [>set]) star
val animateMotion :
([<animatemotion_attr], [<animatemotion_content], [>animatemotion]) star
val mpath :
([<mpath_attr], [<descriptive_element], [>mpath]) star
val animateColor :
([<animatecolor_attr], [<descriptive_element], [>animatecolor]) star
val animateTransform :
([<animatetransform_attr], [<descriptive_element],
[>animatetransform]) star
val metadata : ?a:metadata_attr attrib list -> Xml.elt list -> [>metadata] elt
val foreignObject : ?a:foreignobject_attr attrib list -> Xml.elt list -> [>foreignobject] elt
(* val pcdata : string Lwd.t -> [>txt] elt *)
(* val of_seq : Xml_stream.signal Seq.t -> 'a elt list *)
val tot : Xml.elt -> 'a elt
(* val totl : Xml.elt list -> 'a elt list *)
val toelt : 'a elt -> Xml.elt
(* val toeltl : 'a elt list -> Xml.elt list *)
val doc_toelt : doc -> Xml.elt
val to_xmlattribs : 'a attrib list -> Xml.attrib list
val to_attrib : Xml.attrib -> 'a attrib
(*module Unsafe : sig
val data : string Lwd.t -> 'a elt
val node : string -> ?a:'a attrib list -> 'b elt list -> 'c elt
val leaf : string -> ?a:'a attrib list -> unit -> 'b elt
val coerce_elt : 'a elt -> 'b elt
val string_attrib : string -> string Lwd.t -> 'a attrib
val float_attrib : string -> float Lwd.t -> 'a attrib
val int_attrib : string -> int Lwd.t -> 'a attrib
val uri_attrib : string -> Xml.uri Lwd.t -> 'a attrib
val space_sep_attrib : string -> string list Lwd.t -> 'a attrib
val comma_sep_attrib : string -> string list Lwd.t -> 'a attrib
end*)
end = struct
type +'a elt = 'a node live
type doc = [`Svg] elt
type nonrec +'a attrib = 'a attrib
module Xml = Xml
type ('a, 'b) nullary = ?a:'a attrib list -> unit -> 'b elt
type ('a, 'b, 'c) unary = ?a:'a attrib list -> 'b elt -> 'c elt
type ('a, 'b, 'c) star = ?a:'a attrib list -> 'b elt list -> 'c elt
module Info = Raw_svg.Info
type uri = string
let string_of_uri = Raw_svg.string_of_uri
let uri_of_string = Raw_svg.uri_of_string
let a_x = Raw_svg.a_x
let a_y = Raw_svg.a_y
let a_width = Raw_svg.a_width
let a_height = Raw_svg.a_height
let a_preserveAspectRatio = Raw_svg.a_preserveAspectRatio
let a_zoomAndPan = Raw_svg.a_zoomAndPan
let a_href = Raw_svg.a_href
let a_requiredExtensions = Raw_svg.a_requiredExtensions
let a_systemLanguage = Raw_svg.a_systemLanguage
let a_externalRessourcesRequired = Raw_svg.a_externalRessourcesRequired
let a_id = Raw_svg.a_id
let a_user_data = Raw_svg.a_user_data
let a_xml_lang = Raw_svg.a_xml_lang
let a_type = Raw_svg.a_type
let a_media = Raw_svg.a_media
let a_class = Raw_svg.a_class
let a_style = Raw_svg.a_style
let a_transform = Raw_svg.a_transform
let a_viewBox = Raw_svg.a_viewBox
let a_d = Raw_svg.a_d
let a_pathLength = Raw_svg.a_pathLength
let a_rx = Raw_svg.a_rx
let a_ry = Raw_svg.a_ry
let a_cx = Raw_svg.a_cx
let a_cy = Raw_svg.a_cy
let a_r = Raw_svg.a_r
let a_x1 = Raw_svg.a_x1
let a_y1 = Raw_svg.a_y1
let a_x2 = Raw_svg.a_x2
let a_y2 = Raw_svg.a_y2
let a_points = Raw_svg.a_points
let a_x_list = Raw_svg.a_x_list
let a_y_list = Raw_svg.a_y_list
let a_dx = Raw_svg.a_dx
let a_dy = Raw_svg.a_dy
let a_dx_list = Raw_svg.a_dx_list
let a_dy_list = Raw_svg.a_dy_list
let a_lengthAdjust = Raw_svg.a_lengthAdjust
let a_textLength = Raw_svg.a_textLength
let a_text_anchor = Raw_svg.a_text_anchor
let a_text_decoration = Raw_svg.a_text_decoration
let a_text_rendering = Raw_svg.a_text_rendering
let a_rotate = Raw_svg.a_rotate
let a_startOffset = Raw_svg.a_startOffset
let a_method = Raw_svg.a_method
let a_spacing = Raw_svg.a_spacing
let a_glyphRef = Raw_svg.a_glyphRef
let a_format = Raw_svg.a_format
let a_markerUnits = Raw_svg.a_markerUnits
let a_refX = Raw_svg.a_refX
let a_refY = Raw_svg.a_refY
let a_markerWidth = Raw_svg.a_markerWidth
let a_markerHeight = Raw_svg.a_markerHeight
let a_orient = Raw_svg.a_orient
let a_local = Raw_svg.a_local
let a_rendering_intent = Raw_svg.a_rendering_intent
let a_gradientUnits = Raw_svg.a_gradientUnits
let a_gradientTransform = Raw_svg.a_gradientTransform
let a_spreadMethod = Raw_svg.a_spreadMethod
let a_fx = Raw_svg.a_fx
let a_fy = Raw_svg.a_fy
let a_offset = Raw_svg.a_offset
let a_patternUnits = Raw_svg.a_patternUnits
let a_patternContentUnits = Raw_svg.a_patternContentUnits
let a_patternTransform = Raw_svg.a_patternTransform
let a_clipPathUnits = Raw_svg.a_clipPathUnits
let a_maskUnits = Raw_svg.a_maskUnits
let a_maskContentUnits = Raw_svg.a_maskContentUnits
let a_primitiveUnits = Raw_svg.a_primitiveUnits
let a_filterRes = Raw_svg.a_filterRes
let a_result = Raw_svg.a_result
let a_in = Raw_svg.a_in
let a_in2 = Raw_svg.a_in2
let a_azimuth = Raw_svg.a_azimuth
let a_elevation = Raw_svg.a_elevation
let a_pointsAtX = Raw_svg.a_pointsAtX
let a_pointsAtY = Raw_svg.a_pointsAtY
let a_pointsAtZ = Raw_svg.a_pointsAtZ
let a_specularExponent = Raw_svg.a_specularExponent
let a_specularConstant = Raw_svg.a_specularConstant
let a_limitingConeAngle = Raw_svg.a_limitingConeAngle
let a_mode = Raw_svg.a_mode
let a_feColorMatrix_type = Raw_svg.a_feColorMatrix_type
let a_values = Raw_svg.a_values
let a_transfer_type = Raw_svg.a_transfer_type
let a_tableValues = Raw_svg.a_tableValues
let a_intercept = Raw_svg.a_intercept
let a_amplitude = Raw_svg.a_amplitude
let a_exponent = Raw_svg.a_exponent
let a_transfer_offset = Raw_svg.a_transfer_offset
let a_feComposite_operator = Raw_svg.a_feComposite_operator
let a_k1 = Raw_svg.a_k1
let a_k2 = Raw_svg.a_k2
let a_k3 = Raw_svg.a_k3
let a_k4 = Raw_svg.a_k4
let a_order = Raw_svg.a_order
let a_kernelMatrix = Raw_svg.a_kernelMatrix
let a_divisor = Raw_svg.a_divisor
let a_bias = Raw_svg.a_bias
let a_kernelUnitLength = Raw_svg.a_kernelUnitLength
let a_targetX = Raw_svg.a_targetX
let a_targetY = Raw_svg.a_targetY
let a_edgeMode = Raw_svg.a_edgeMode
let a_preserveAlpha = Raw_svg.a_preserveAlpha
let a_surfaceScale = Raw_svg.a_surfaceScale
let a_diffuseConstant = Raw_svg.a_diffuseConstant
let a_scale = Raw_svg.a_scale
let a_xChannelSelector = Raw_svg.a_xChannelSelector
let a_yChannelSelector = Raw_svg.a_yChannelSelector
let a_stdDeviation = Raw_svg.a_stdDeviation
let a_feMorphology_operator = Raw_svg.a_feMorphology_operator
let a_radius = Raw_svg.a_radius
let a_baseFrenquency = Raw_svg.a_baseFrenquency
let a_numOctaves = Raw_svg.a_numOctaves
let a_seed = Raw_svg.a_seed
let a_stitchTiles = Raw_svg.a_stitchTiles
let a_feTurbulence_type = Raw_svg.a_feTurbulence_type
let a_target = Raw_svg.a_target
let a_attributeName = Raw_svg.a_attributeName
let a_attributeType = Raw_svg.a_attributeType
let a_begin = Raw_svg.a_begin
let a_dur = Raw_svg.a_dur
let a_min = Raw_svg.a_min
let a_max = Raw_svg.a_max
let a_restart = Raw_svg.a_restart
let a_repeatCount = Raw_svg.a_repeatCount
let a_repeatDur = Raw_svg.a_repeatDur
let a_fill = Raw_svg.a_fill
let a_animation_fill = Raw_svg.a_animation_fill
let a_calcMode = Raw_svg.a_calcMode
let a_animation_values = Raw_svg.a_animation_values
let a_keyTimes = Raw_svg.a_keyTimes
let a_keySplines = Raw_svg.a_keySplines
let a_from = Raw_svg.a_from
let a_to = Raw_svg.a_to
let a_by = Raw_svg.a_by
let a_additive = Raw_svg.a_additive
let a_accumulate = Raw_svg.a_accumulate
let a_keyPoints = Raw_svg.a_keyPoints
let a_path = Raw_svg.a_path
let a_animateTransform_type = Raw_svg.a_animateTransform_type
let a_horiz_origin_x = Raw_svg.a_horiz_origin_x
let a_horiz_origin_y = Raw_svg.a_horiz_origin_y
let a_horiz_adv_x = Raw_svg.a_horiz_adv_x
let a_vert_origin_x = Raw_svg.a_vert_origin_x
let a_vert_origin_y = Raw_svg.a_vert_origin_y
let a_vert_adv_y = Raw_svg.a_vert_adv_y
let a_unicode = Raw_svg.a_unicode
let a_glyph_name = Raw_svg.a_glyph_name
let a_orientation = Raw_svg.a_orientation
let a_arabic_form = Raw_svg.a_arabic_form
let a_lang = Raw_svg.a_lang
let a_u1 = Raw_svg.a_u1
let a_u2 = Raw_svg.a_u2
let a_g1 = Raw_svg.a_g1
let a_g2 = Raw_svg.a_g2
let a_k = Raw_svg.a_k
let a_font_family = Raw_svg.a_font_family
let a_font_style = Raw_svg.a_font_style
let a_font_variant = Raw_svg.a_font_variant
let a_font_weight = Raw_svg.a_font_weight
let a_font_stretch = Raw_svg.a_font_stretch
let a_font_size = Raw_svg.a_font_size
let a_unicode_range = Raw_svg.a_unicode_range
let a_units_per_em = Raw_svg.a_units_per_em
let a_stemv = Raw_svg.a_stemv
let a_stemh = Raw_svg.a_stemh
let a_slope = Raw_svg.a_slope
let a_cap_height = Raw_svg.a_cap_height
let a_x_height = Raw_svg.a_x_height
let a_accent_height = Raw_svg.a_accent_height
let a_ascent = Raw_svg.a_ascent
let a_widths = Raw_svg.a_widths
let a_bbox = Raw_svg.a_bbox
let a_ideographic = Raw_svg.a_ideographic
let a_alphabetic = Raw_svg.a_alphabetic
let a_mathematical = Raw_svg.a_mathematical
let a_hanging = Raw_svg.a_hanging
let a_videographic = Raw_svg.a_videographic
let a_v_alphabetic = Raw_svg.a_v_alphabetic
let a_v_mathematical = Raw_svg.a_v_mathematical
let a_v_hanging = Raw_svg.a_v_hanging
let a_underline_position = Raw_svg.a_underline_position
let a_underline_thickness = Raw_svg.a_underline_thickness
let a_strikethrough_position = Raw_svg.a_strikethrough_position
let a_strikethrough_thickness = Raw_svg.a_strikethrough_thickness
let a_overline_position = Raw_svg.a_overline_position
let a_overline_thickness = Raw_svg.a_overline_thickness
let a_string = Raw_svg.a_string
let a_name = Raw_svg.a_name
let a_alignment_baseline = Raw_svg.a_alignment_baseline
let a_dominant_baseline = Raw_svg.a_dominant_baseline
let a_stop_color = Raw_svg.a_stop_color
let a_stop_opacity = Raw_svg.a_stop_opacity
let a_stroke = Raw_svg.a_stroke
let a_stroke_width = Raw_svg.a_stroke_width
let a_stroke_linecap = Raw_svg.a_stroke_linecap
let a_stroke_linejoin = Raw_svg.a_stroke_linejoin
let a_stroke_miterlimit = Raw_svg.a_stroke_miterlimit
let a_stroke_dasharray = Raw_svg.a_stroke_dasharray
let a_stroke_dashoffset = Raw_svg.a_stroke_dashoffset
let a_stroke_opacity = Raw_svg.a_stroke_opacity
let a_onabort = Raw_svg.a_onabort
let a_onactivate = Raw_svg.a_onactivate
let a_onbegin = Raw_svg.a_onbegin
let a_onend = Raw_svg.a_onend
let a_onerror = Raw_svg.a_onerror
let a_onfocusin = Raw_svg.a_onfocusin
let a_onfocusout = Raw_svg.a_onfocusout
let a_onrepeat = Raw_svg.a_onrepeat
let a_onresize = Raw_svg.a_onresize
let a_onscroll = Raw_svg.a_onscroll
let a_onunload = Raw_svg.a_onunload
let a_onzoom = Raw_svg.a_onzoom
let a_onclick = Raw_svg.a_onclick
let a_onmousedown = Raw_svg.a_onmousedown
let a_onmouseup = Raw_svg.a_onmouseup
let a_onmouseover = Raw_svg.a_onmouseover
let a_onmouseout = Raw_svg.a_onmouseout