sevgi 0.0.0 → 0.0.1
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.
- 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
|
[](https://github.com/roktas/sevgi/actions?query=workflow%3ATest)
|
2
|
-
[](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
|