sevgi 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +26 -6
- data/lib/sevgi/function.rb +3 -3
- data/lib/sevgi/geometry/elements/rect.rb +2 -2
- data/lib/sevgi/geometry/elements/segment.rb +2 -2
- data/lib/sevgi/geometry/equation/line/diagonal.rb +5 -11
- data/lib/sevgi/geometry/operation/sweep.rb +1 -1
- data/lib/sevgi/geometry/point.rb +3 -3
- data/lib/sevgi/graphics/attribute.rb +9 -9
- data/lib/sevgi/graphics/content.rb +2 -2
- data/lib/sevgi/graphics/document/default.rb +3 -3
- data/lib/sevgi/graphics/document/inkscape.rb +3 -2
- data/lib/sevgi/graphics/mixtures/hatch.rb +4 -4
- data/lib/sevgi/graphics/mixtures/identify.rb +4 -2
- data/lib/sevgi/graphics/mixtures/render.rb +2 -2
- data/lib/sevgi/graphics/mixtures/replicate.rb +4 -7
- data/lib/sevgi/graphics/mixtures/transform.rb +3 -3
- data/lib/sevgi/internal/locate.rb +1 -3
- data/lib/sevgi/internal/margin.rb +1 -1
- data/lib/sevgi/internal/minitest/script.rb +1 -1
- data/lib/sevgi/internal/minitest/shell.rb +3 -3
- data/lib/sevgi/internal/minitest/suite.rb +1 -1
- data/lib/sevgi/internal/paper.rb +1 -1
- data/lib/sevgi/standard/data/attribute.rb +20 -20
- data/lib/sevgi/standard/data/element.rb +21 -21
- data/lib/sevgi/standard/data/specification.rb +160 -160
- data/lib/sevgi/standard/errors.rb +1 -1
- data/lib/sevgi/utensils/external.rb +1 -1
- data/lib/sevgi/utensils/grid.rb +3 -3
- data/lib/sevgi/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d10f877d0767cd2b04ac1165e6485601e85ba444486c0f9a304cf46bdcd9291b
|
4
|
+
data.tar.gz: 0bcbdaaf6df270a83a184de931bb70958447b0f446339fcf51daa74c2b76cc59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d08ecea5e16f48d8f950cd3245a5fa497913b68f0e6d9fa1303a8c7b3515a4d24af55c4bef2fb8c4b23e2d0d0d0ec8fd3ea6fcef78b899c0e857802eb64b1be9
|
7
|
+
data.tar.gz: 181d34db462e84b100194e33542243ee090e15933a5a37b14efdcf8c164b2d751b4231736826f3c51a7e37111902c82b97b67338cfcf57faada244f8108cf1e7
|
data/README.md
CHANGED
@@ -1,15 +1,35 @@
|
|
1
1
|
[![test status](https://github.com/roktas/sevgi/workflows/Test/badge.svg)](https://github.com/roktas/sevgi/actions?query=workflow%3ATest)
|
2
|
-
[![code quality](https://codebeat.co/badges/
|
2
|
+
[![code quality](https://codebeat.co/badges/b7c41452-51ba-417d-9cea-b29782993147)](https://codebeat.co/projects/github-com-roktas-sevgi-dev)
|
3
3
|
|
4
|
-
#
|
4
|
+
# SEVGI
|
5
|
+
|
6
|
+
**SEVGI** is a toolkit for creating SVG content programmatically with Ruby as demonstrated below[^1]. You can use it to
|
7
|
+
create pixel-perfect graphics without using a vector graphics editor in certain scenarios. Thanks to a mixin based
|
8
|
+
design, you can easily add custom features and use a rich set of methods, especially for tiling, hatching and various
|
9
|
+
geometric operations.
|
5
10
|
|
6
11
|
<p align="center"><img src="srv/static/assets/light/logo.svg#gh-light-mode-only"/></p>
|
7
12
|
<p align="center"><img src="srv/static/assets/dark/logo.svg#gh-dark-mode-only"/></p>
|
8
13
|
|
9
14
|
<p align="center"><img src="srv/static/assets/light/pacman-animation.png"/></p>
|
10
15
|
|
11
|
-
Inspired by [Victor](https://github.com/DannyBen/victor), which might be a better choice for those seeking something
|
12
|
-
simpler. Please note that a fair amount of the examples used for demonstration purposes come from this project (thanks
|
13
|
-
to the author).
|
14
|
-
|
15
16
|
### Roadmap
|
17
|
+
|
18
|
+
**The project is currently in pre-alpha stage. So many things might not work and many things can change.**
|
19
|
+
|
20
|
+
Alpha stage
|
21
|
+
|
22
|
+
- [ ] Stabilize API.
|
23
|
+
- [ ] Complete unit tests for all critical code paths.
|
24
|
+
- [ ] Populate examples while adding integration tests.
|
25
|
+
- [ ] Write entry-level user documentation.
|
26
|
+
|
27
|
+
Beta stage
|
28
|
+
|
29
|
+
- [ ] Complete Geometry library.
|
30
|
+
- [ ] Complete user documentation.
|
31
|
+
- [ ] Start documenting API.
|
32
|
+
|
33
|
+
[^1]: Inspired by [Victor](https://github.com/DannyBen/victor), which might be a better choice for those seeking
|
34
|
+
something simpler. Please note that a fair amount of the examples used for demonstration purposes come from this
|
35
|
+
project (thanks to the author).
|
data/lib/sevgi/function.rb
CHANGED
@@ -3,15 +3,15 @@
|
|
3
3
|
module Sevgi
|
4
4
|
module Function
|
5
5
|
module External
|
6
|
-
EXTENSIONS = ["sevgi", "rb"].freeze
|
7
|
-
DIRECTORIES = ["lib", "library"].freeze
|
6
|
+
EXTENSIONS = [ "sevgi", "rb" ].freeze
|
7
|
+
DIRECTORIES = [ "lib", "library" ].freeze
|
8
8
|
|
9
9
|
def Lib(name)
|
10
10
|
start = ::File.dirname(caller_locations(1..1).first.path)
|
11
11
|
|
12
12
|
paths = F.variations(name, DIRECTORIES, EXTENSIONS)
|
13
13
|
|
14
|
-
raise
|
14
|
+
raise(Error, "No library found matching: #{name}") unless (location = Locate.(paths, start))
|
15
15
|
|
16
16
|
Kernel.load(location.file)
|
17
17
|
end
|
@@ -17,7 +17,7 @@ module Sevgi
|
|
17
17
|
top_left: position,
|
18
18
|
top_right: position.translate(dx: rect.width),
|
19
19
|
bottom_right: position.translate(dx: rect.width, dy: rect.height),
|
20
|
-
bottom_left: position.translate(dy: rect.height)
|
20
|
+
bottom_left: position.translate(dy: rect.height)
|
21
21
|
)
|
22
22
|
end
|
23
23
|
end
|
@@ -33,7 +33,7 @@ module Sevgi
|
|
33
33
|
top: Segment[corner.top_left, corner.top_right],
|
34
34
|
right: Segment[corner.top_right, corner.bottom_right],
|
35
35
|
bottom: Segment[corner.bottom_left, corner.bottom_right],
|
36
|
-
left: Segment[corner.top_left, corner.bottom_left]
|
36
|
+
left: Segment[corner.top_left, corner.bottom_left]
|
37
37
|
)
|
38
38
|
end
|
39
39
|
end
|
@@ -45,7 +45,7 @@ module Sevgi
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def infinite?
|
48
|
-
[position, ending].any(&:infinite?)
|
48
|
+
[ position, ending ].any(&:infinite?)
|
49
49
|
end
|
50
50
|
|
51
51
|
def length
|
@@ -82,7 +82,7 @@ module Sevgi
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def forward(p, q = nil)
|
85
|
-
new(position: (points = [p, q || p]).sort!.shift, ending: points.shift)
|
85
|
+
new(position: (points = [ p, q || p ]).sort!.shift, ending: points.shift)
|
86
86
|
end
|
87
87
|
|
88
88
|
def directed(position: Point.origin, length:, direction:)
|
@@ -18,26 +18,20 @@ module Sevgi
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def eql?(other)
|
21
|
-
self.class == other.class && [slope, intercept] == [other.slope, other.intercept]
|
21
|
+
self.class == other.class && [ slope, intercept ] == [ other.slope, other.intercept ]
|
22
22
|
end
|
23
23
|
|
24
24
|
alias_method :==, :eql?
|
25
25
|
|
26
26
|
def hash
|
27
|
-
[self.class, slope, intercept].hash
|
27
|
+
[ self.class, slope, intercept ].hash
|
28
28
|
end
|
29
29
|
|
30
30
|
def intersection(other)
|
31
31
|
case other
|
32
|
-
when Diagonal
|
33
|
-
|
34
|
-
|
35
|
-
when Horizontal
|
36
|
-
y = other.y
|
37
|
-
x = x(y)
|
38
|
-
when Vertical
|
39
|
-
x = other.x
|
40
|
-
y = y(x)
|
32
|
+
when Diagonal then y = y(x = (other.intercept - intercept) / (slope - other.slope))
|
33
|
+
when Horizontal then x = x(y = other.y)
|
34
|
+
when Vertical then y = y(x = other.x)
|
41
35
|
end
|
42
36
|
|
43
37
|
Point[x, y]
|
data/lib/sevgi/geometry/point.rb
CHANGED
@@ -26,11 +26,11 @@ module Sevgi
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def infinite?
|
29
|
-
[x, y].any?(&:infinite?)
|
29
|
+
[ x, y ].any?(&:infinite?)
|
30
30
|
end
|
31
31
|
|
32
32
|
def nan?
|
33
|
-
[x, y].any?(&:nan?)
|
33
|
+
[ x, y ].any?(&:nan?)
|
34
34
|
end
|
35
35
|
|
36
36
|
def to_s
|
@@ -42,7 +42,7 @@ module Sevgi
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def unordered_between?(p, q)
|
45
|
-
nan? ? false : between?([p, q].min, [p, q].max)
|
45
|
+
nan? ? false : between?([ p, q ].min, [ p, q ].max)
|
46
46
|
end
|
47
47
|
|
48
48
|
def <=>(other)
|
@@ -33,7 +33,7 @@ module Sevgi
|
|
33
33
|
|
34
34
|
def import(attributes)
|
35
35
|
hash = attributes.compact.to_a.map do |key, value|
|
36
|
-
[key.to_sym, value.is_a?(::Hash) ? value.transform_keys!(&:to_sym) : value]
|
36
|
+
[ key.to_sym, value.is_a?(::Hash) ? value.transform_keys!(&:to_sym) : value ]
|
37
37
|
end.to_h
|
38
38
|
|
39
39
|
@store.merge!(hash)
|
@@ -91,10 +91,10 @@ module Sevgi
|
|
91
91
|
private
|
92
92
|
|
93
93
|
UPDATER = {
|
94
|
-
::String => proc { |old_value, new_value| [old_value, new_value].reject(&:empty?).join(" ") },
|
95
|
-
::Symbol => proc { |old_value, new_value| [old_value, new_value].reject(&:empty?).join(" ").to_sym },
|
96
|
-
::Array => proc { |old_value, new_value| [old_value, new_value] },
|
97
|
-
::Hash => proc { |old_value, new_value| merge(old_value, new_value.transform_keys(&:to_sym)) }
|
94
|
+
::String => proc { |old_value, new_value| [ old_value, new_value ].reject(&:empty?).join(" ") },
|
95
|
+
::Symbol => proc { |old_value, new_value| [ old_value, new_value ].reject(&:empty?).join(" ").to_sym },
|
96
|
+
::Array => proc { |old_value, new_value| [ old_value, new_value ] },
|
97
|
+
::Hash => proc { |old_value, new_value| merge(old_value, new_value.transform_keys(&:to_sym)) }
|
98
98
|
}.freeze
|
99
99
|
|
100
100
|
def update(id, new_value)
|
@@ -105,16 +105,16 @@ module Sevgi
|
|
105
105
|
ArgumentError.("Incompatible values: #{new_value} vs #{old_value}") unless new_value.is_a?(old_value.class)
|
106
106
|
ArgumentError.("Unsupported value for update: #{new_value}") unless UPDATER.key?(new_value.class)
|
107
107
|
|
108
|
-
[old_value, new_value]
|
108
|
+
[ old_value, new_value ]
|
109
109
|
end
|
110
110
|
|
111
111
|
private_constant :UPDATER
|
112
112
|
|
113
113
|
def to_xml(id, value)
|
114
114
|
case value
|
115
|
-
when ::Hash then %
|
116
|
-
when ::Array then %
|
117
|
-
else %
|
115
|
+
when ::Hash then %(#{id}="#{value.map { "#{_1}:#{_2}" }.join("; ")}")
|
116
|
+
when ::Array then %(#{id}="#{value.join(" ")}")
|
117
|
+
else %(#{id}=#{value.to_s.encode(xml: :attr)})
|
118
118
|
end
|
119
119
|
end
|
120
120
|
end
|
@@ -7,7 +7,7 @@ module Sevgi
|
|
7
7
|
|
8
8
|
def initialize(content) = @content = content
|
9
9
|
|
10
|
-
def render(renderer, depth) = raise
|
10
|
+
def render(renderer, depth) = raise(NotImplementedError)
|
11
11
|
|
12
12
|
def to_s = content.to_s
|
13
13
|
|
@@ -28,7 +28,7 @@ module Sevgi
|
|
28
28
|
super
|
29
29
|
end
|
30
30
|
|
31
|
-
def render(renderer, depth)
|
31
|
+
def render(renderer, depth) # rubocop:disable Metrics/MethodLength
|
32
32
|
depth += 1
|
33
33
|
|
34
34
|
renderer.append(depth, "<![CDATA[")
|
@@ -7,11 +7,11 @@ module Sevgi
|
|
7
7
|
document :default,
|
8
8
|
attributes: {
|
9
9
|
"xmlns": "http://www.w3.org/2000/svg",
|
10
|
-
"xmlns:xlink": "http://www.w3.org/1999/xlink"
|
10
|
+
"xmlns:xlink": "http://www.w3.org/1999/xlink"
|
11
11
|
},
|
12
|
-
preambles:
|
12
|
+
preambles: [
|
13
13
|
'<?xml version="1.0" standalone="no"?>',
|
14
|
-
'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'
|
14
|
+
'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'
|
15
15
|
]
|
16
16
|
end
|
17
17
|
end
|
@@ -4,10 +4,11 @@ module Sevgi
|
|
4
4
|
module Graphics
|
5
5
|
module Document
|
6
6
|
class Inkscape < Default
|
7
|
-
document :inkscape,
|
7
|
+
document :inkscape,
|
8
|
+
attributes: {
|
8
9
|
"xmlns:inkscape": "http://www.inkscape.org/slugs/inkscape",
|
9
10
|
"xmlns:sodipodi": "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd",
|
10
|
-
"shape-rendering": "crispEdges"
|
11
|
+
"shape-rendering": "crispEdges"
|
11
12
|
}
|
12
13
|
|
13
14
|
mixture Mixtures::Inkscape
|
@@ -5,13 +5,13 @@ module Sevgi
|
|
5
5
|
module Mixtures
|
6
6
|
module Hatch
|
7
7
|
module InstanceMethods
|
8
|
-
def Draw(segments, **)
|
9
|
-
segments.each { |segment| segment.draw(self, **) }
|
8
|
+
def Draw(segments, **kwargs)
|
9
|
+
segments.each { |segment| segment.draw(self, **kwargs) }
|
10
10
|
end
|
11
11
|
|
12
|
-
def Hatch(canvas, direction:, step:, **)
|
12
|
+
def Hatch(canvas, direction:, step:, **kwargs)
|
13
13
|
Geometry::Operation.sweep!(rect = canvas.rect, initial: rect.position, direction:, step:).tap do |segments|
|
14
|
-
Draw(segments, **)
|
14
|
+
Draw(segments, **kwargs)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -31,7 +31,7 @@ module Sevgi
|
|
31
31
|
next unless (id = element[:id])
|
32
32
|
|
33
33
|
if @namespace.key?(id)
|
34
|
-
(@collision[id] ||= [@namespace[id]]) << element
|
34
|
+
(@collision[id] ||= [ @namespace[id] ]) << element
|
35
35
|
else
|
36
36
|
@namespace[id] = element
|
37
37
|
end
|
@@ -59,7 +59,9 @@ module Sevgi
|
|
59
59
|
SEPARATOR = "-"
|
60
60
|
|
61
61
|
IdentifyAs = Data.define(:id) do
|
62
|
-
def label(*indexes)
|
62
|
+
def label(*indexes)
|
63
|
+
id and [ id, *indexes ].map(&:to_s).join(SEPARATOR)
|
64
|
+
end
|
63
65
|
end
|
64
66
|
|
65
67
|
IdentifyAsList = Class.new(IdentifyAs) do
|
@@ -56,7 +56,7 @@ module Sevgi
|
|
56
56
|
|
57
57
|
root.Traverse(
|
58
58
|
0,
|
59
|
-
proc { |element, depth| render_leave(element, depth) }
|
59
|
+
proc { |element, depth| render_leave(element, depth) }
|
60
60
|
) { |element, depth| render_enter(element, depth) }
|
61
61
|
|
62
62
|
output.join("\n")
|
@@ -99,7 +99,7 @@ module Sevgi
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def attributes_inline(element, depth, lines)
|
102
|
-
line = "<#{[element.name, *lines].join(" ")}"
|
102
|
+
line = "<#{[ element.name, *lines ].join(" ")}"
|
103
103
|
|
104
104
|
append(depth, (childless?(element) ? "#{line}/>".tap { closed } : "#{line}>"))
|
105
105
|
end
|
@@ -5,6 +5,7 @@ module Sevgi
|
|
5
5
|
module Mixtures
|
6
6
|
module Replicate
|
7
7
|
module InstanceMethods
|
8
|
+
# rubocop:disable Metrics/MethodLength
|
8
9
|
def Replicate(nx: Undefined, dx: Undefined, ix: nil, ny: Undefined, dy: Undefined, iy: nil, id: nil, &block)
|
9
10
|
Ensure.without_block(block, nx:, dx:, ny:, dy:)
|
10
11
|
|
@@ -32,9 +33,7 @@ module Sevgi
|
|
32
33
|
|
33
34
|
With do |base|
|
34
35
|
layer(id:) do
|
35
|
-
(n - 1).times
|
36
|
-
base.DuplicateH((time + 1) * d, parent: self)
|
37
|
-
end
|
36
|
+
(n - 1).times { |time| base.DuplicateH((time + 1) * d, parent: self) }
|
38
37
|
end.tap do |element|
|
39
38
|
base.AdoptFirst(element)
|
40
39
|
IdentifyAsList(element.children, i)
|
@@ -47,9 +46,7 @@ module Sevgi
|
|
47
46
|
|
48
47
|
With do |base|
|
49
48
|
layer(id:) do
|
50
|
-
(n - 1).times
|
51
|
-
base.DuplicateV((time + 1) * d, parent: self)
|
52
|
-
end
|
49
|
+
(n - 1).times { |time| base.DuplicateV((time + 1) * d, parent: self) }
|
53
50
|
end.tap do |element|
|
54
51
|
base.AdoptFirst(element)
|
55
52
|
IdentifyAsList(element.children, i)
|
@@ -89,7 +86,7 @@ module Sevgi
|
|
89
86
|
ny: proc { |name, value| "Argument '#{name}' must be a positive integer" unless value.positive? },
|
90
87
|
d: proc { |name, value| "Argument '#{name}' must be a number" unless value.is_a?(::Numeric) },
|
91
88
|
dx: proc { |name, value| "Argument '#{name}' must be a number" unless value.is_a?(::Numeric) },
|
92
|
-
dy: proc { |name, value| "Argument '#{name}' must be a number" unless value.is_a?(::Numeric) }
|
89
|
+
dy: proc { |name, value| "Argument '#{name}' must be a number" unless value.is_a?(::Numeric) }
|
93
90
|
}.freeze
|
94
91
|
|
95
92
|
def with_block(block, **)
|
@@ -9,7 +9,7 @@ module Sevgi
|
|
9
9
|
tap do
|
10
10
|
next if x.to_f == 0.0 && (y.nil? || y.to_f == 0.0)
|
11
11
|
|
12
|
-
attributes[:"transform+"] = "translate(#{(y ? [x, y] : [x]).join(" ")})"
|
12
|
+
attributes[:"transform+"] = "translate(#{(y ? [ x, y ] : [ x ]).join(" ")})"
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -17,7 +17,7 @@ module Sevgi
|
|
17
17
|
tap do
|
18
18
|
next if x.to_f == 0.0 && (y.nil? || y.to_f == 0.0)
|
19
19
|
|
20
|
-
attributes[:"transform+"] = "scale(#{(y ? [x, y] : [x]).join(", ")})"
|
20
|
+
attributes[:"transform+"] = "scale(#{(y ? [ x, y ] : [ x ]).join(", ")})"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -49,7 +49,7 @@ module Sevgi
|
|
49
49
|
|
50
50
|
next if a.to_f == 0.0
|
51
51
|
|
52
|
-
attributes[:"transform+"] = "rotate(#{[a, *origin].join(", ")})"
|
52
|
+
attributes[:"transform+"] = "rotate(#{[ a, *origin ].join(", ")})"
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Sevgi
|
4
4
|
Margin = Data.define(:top, :right, :bottom, :left) do
|
5
5
|
def initialize(top: nil, right: nil, bottom: nil, left: nil)
|
6
|
-
case [top, right, bottom, left]
|
6
|
+
case [ top, right, bottom, left ]
|
7
7
|
in Numeric, Numeric, Numeric, Numeric then # nop
|
8
8
|
in Numeric, Numeric, Numeric, NilClass then left = right
|
9
9
|
in Numeric, Numeric, NilClass, NilClass then bottom, left = top, right
|
@@ -45,14 +45,14 @@ module Sevgi
|
|
45
45
|
out = stdout.readlines.map(&:chomp)
|
46
46
|
err = stderr.readlines.map(&:chomp)
|
47
47
|
|
48
|
-
[out, err, thread.value]
|
48
|
+
[ out, err, thread.value ]
|
49
49
|
end
|
50
50
|
|
51
51
|
def handle_sigint(pid)
|
52
52
|
message, signal = if @coathooks > 1
|
53
|
-
["SIGINT received again. Force quitting...", "KILL"]
|
53
|
+
[ "SIGINT received again. Force quitting...", "KILL" ]
|
54
54
|
else
|
55
|
-
["SIGINT received.", "TERM"]
|
55
|
+
[ "SIGINT received.", "TERM" ]
|
56
56
|
end
|
57
57
|
|
58
58
|
warn("\n#{message}")
|
data/lib/sevgi/internal/paper.rb
CHANGED
@@ -4,7 +4,7 @@ module Sevgi
|
|
4
4
|
module Standard
|
5
5
|
module Attribute
|
6
6
|
import(
|
7
|
-
Animation:
|
7
|
+
Animation: %i[
|
8
8
|
accelerate
|
9
9
|
accumulate
|
10
10
|
additive
|
@@ -33,7 +33,7 @@ module Sevgi
|
|
33
33
|
values
|
34
34
|
],
|
35
35
|
|
36
|
-
AnimationAddition:
|
36
|
+
AnimationAddition: %i[
|
37
37
|
accumulate
|
38
38
|
additive
|
39
39
|
],
|
@@ -43,7 +43,7 @@ module Sevgi
|
|
43
43
|
attributeType
|
44
44
|
],
|
45
45
|
|
46
|
-
AnimationValue:
|
46
|
+
AnimationValue: %i[
|
47
47
|
accelerate
|
48
48
|
autoReverse
|
49
49
|
by
|
@@ -56,7 +56,7 @@ module Sevgi
|
|
56
56
|
values
|
57
57
|
],
|
58
58
|
|
59
|
-
AnimationTiming:
|
59
|
+
AnimationTiming: %i[
|
60
60
|
begin
|
61
61
|
dur
|
62
62
|
end
|
@@ -68,7 +68,7 @@ module Sevgi
|
|
68
68
|
restart
|
69
69
|
],
|
70
70
|
|
71
|
-
Aria:
|
71
|
+
Aria: %i[
|
72
72
|
aria-activedescendant
|
73
73
|
aria-atomic
|
74
74
|
aria-autocomplete
|
@@ -119,13 +119,13 @@ module Sevgi
|
|
119
119
|
aria-valuetext
|
120
120
|
],
|
121
121
|
|
122
|
-
ConditionalProcessing:
|
122
|
+
ConditionalProcessing: %i[
|
123
123
|
requiredExtensions
|
124
124
|
requiredFeatures
|
125
125
|
systemLanguage
|
126
126
|
],
|
127
127
|
|
128
|
-
Core:
|
128
|
+
Core: %i[
|
129
129
|
autofocus
|
130
130
|
id
|
131
131
|
lang
|
@@ -135,13 +135,13 @@ module Sevgi
|
|
135
135
|
xml:space
|
136
136
|
],
|
137
137
|
|
138
|
-
EventAnimation:
|
138
|
+
EventAnimation: %i[
|
139
139
|
onbegin
|
140
140
|
onend
|
141
141
|
onrepeat
|
142
142
|
],
|
143
143
|
|
144
|
-
EventDocument:
|
144
|
+
EventDocument: %i[
|
145
145
|
onabort
|
146
146
|
onerror
|
147
147
|
onresize
|
@@ -149,13 +149,13 @@ module Sevgi
|
|
149
149
|
onunload
|
150
150
|
],
|
151
151
|
|
152
|
-
EventDocumentElement:
|
152
|
+
EventDocumentElement: %i[
|
153
153
|
oncopy
|
154
154
|
oncut
|
155
155
|
onpaste
|
156
156
|
],
|
157
157
|
|
158
|
-
EventGlobal:
|
158
|
+
EventGlobal: %i[
|
159
159
|
oncancel
|
160
160
|
oncanplay
|
161
161
|
oncanplaythrough
|
@@ -214,13 +214,13 @@ module Sevgi
|
|
214
214
|
onwaiting
|
215
215
|
],
|
216
216
|
|
217
|
-
EventGraphical:
|
217
|
+
EventGraphical: %i[
|
218
218
|
onactivate
|
219
219
|
onfocusin
|
220
220
|
onfocusout
|
221
221
|
],
|
222
222
|
|
223
|
-
FilterPrimitive:
|
223
|
+
FilterPrimitive: %i[
|
224
224
|
height
|
225
225
|
result
|
226
226
|
width
|
@@ -228,7 +228,7 @@ module Sevgi
|
|
228
228
|
y
|
229
229
|
],
|
230
230
|
|
231
|
-
FilterTransferFunction:
|
231
|
+
FilterTransferFunction: %i[
|
232
232
|
amplitude
|
233
233
|
exponent
|
234
234
|
intercept
|
@@ -238,7 +238,7 @@ module Sevgi
|
|
238
238
|
type
|
239
239
|
],
|
240
240
|
|
241
|
-
Presentation:
|
241
|
+
Presentation: %i[
|
242
242
|
alignment-baseline
|
243
243
|
baseline-shift
|
244
244
|
clip
|
@@ -303,12 +303,12 @@ module Sevgi
|
|
303
303
|
writing-mode
|
304
304
|
],
|
305
305
|
|
306
|
-
Style:
|
306
|
+
Style: %i[
|
307
307
|
class
|
308
308
|
style
|
309
309
|
],
|
310
310
|
|
311
|
-
Xlink:
|
311
|
+
Xlink: %i[
|
312
312
|
xlink:actuate
|
313
313
|
xlink:arcrole
|
314
314
|
xlink:href
|
@@ -320,7 +320,7 @@ module Sevgi
|
|
320
320
|
|
321
321
|
# Uncategorized attributes (for the sake of completeness)
|
322
322
|
|
323
|
-
Uncategorized:
|
323
|
+
Uncategorized: %i[
|
324
324
|
accent-height
|
325
325
|
alphabetic
|
326
326
|
arabic-form
|
@@ -480,7 +480,7 @@ module Sevgi
|
|
480
480
|
|
481
481
|
# Deprecated attributes
|
482
482
|
|
483
|
-
Deprecated:
|
483
|
+
Deprecated: %i[
|
484
484
|
accent-height
|
485
485
|
alphabetic
|
486
486
|
amplitude
|
@@ -489,7 +489,7 @@ module Sevgi
|
|
489
489
|
attributeType
|
490
490
|
baseProfile
|
491
491
|
bbox
|
492
|
-
]
|
492
|
+
]
|
493
493
|
)
|
494
494
|
end
|
495
495
|
end
|