RXAAL 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +674 -0
- data/README +0 -0
- data/RXAAL.gemspec +15 -0
- data/Rakefile +60 -0
- data/lib/angle.rb +9 -0
- data/lib/arc.rb +13 -0
- data/lib/arrow.rb +23 -0
- data/lib/attribute.rb +13 -0
- data/lib/bound_array.rb +56 -0
- data/lib/center.rb +7 -0
- data/lib/circle.rb +11 -0
- data/lib/circle_segment.rb +9 -0
- data/lib/contents.rb +7 -0
- data/lib/coordinate.rb +20 -0
- data/lib/core_ext/class.rb +17 -0
- data/lib/core_ext/module.rb +23 -0
- data/lib/core_ext/object.rb +7 -0
- data/lib/core_ext/string.rb +11 -0
- data/lib/ellipse.rb +8 -0
- data/lib/enum.rb +8 -0
- data/lib/enum/anchor.rb +16 -0
- data/lib/enum/color_name.rb +24 -0
- data/lib/enum/offset_mode.rb +9 -0
- data/lib/enum/stroke_type.rb +9 -0
- data/lib/enum/text_alignment.rb +9 -0
- data/lib/font.rb +25 -0
- data/lib/generic_color.rb +7 -0
- data/lib/graphic_prim.rb +25 -0
- data/lib/line.rb +9 -0
- data/lib/metadata.rb +78 -0
- data/lib/metadata_mod.rb +34 -0
- data/lib/named_color.rb +16 -0
- data/lib/node_prim.rb +15 -0
- data/lib/ns_container.rb +30 -0
- data/lib/offset.rb +63 -0
- data/lib/operation.rb +5 -0
- data/lib/par.rb +25 -0
- data/lib/par_container.rb +2 -0
- data/lib/point.rb +8 -0
- data/lib/polygon.rb +22 -0
- data/lib/polyline.rb +29 -0
- data/lib/privtest.rb +24 -0
- data/lib/r_xaal_error.rb +2 -0
- data/lib/r_xaal_object.rb +5 -0
- data/lib/radius.rb +5 -0
- data/lib/rectangle.rb +10 -0
- data/lib/rgb_color.rb +20 -0
- data/lib/rxaal.rb +28 -0
- data/lib/seq.rb +31 -0
- data/lib/serializable.rb +11 -0
- data/lib/shape.rb +5 -0
- data/lib/show_hide.rb +27 -0
- data/lib/square.rb +35 -0
- data/lib/stroke.rb +27 -0
- data/lib/style.rb +91 -0
- data/lib/style_container.rb +5 -0
- data/lib/style_mod.rb +63 -0
- data/lib/text.rb +34 -0
- data/lib/top_level_elem.rb +12 -0
- data/lib/triangle.rb +9 -0
- data/lib/xaal_doc.rb +93 -0
- data/lib/xaal_element.rb +77 -0
- data/lib/xaalns.rb +14 -0
- data/test/arrow_test.rb +43 -0
- data/test/attribute_test.rb +10 -0
- data/test/bound_array_test.rb +54 -0
- data/test/metadata_test.rb +35 -0
- data/test/module_test.rb +36 -0
- data/test/ns_container_test.rb +18 -0
- data/test/serializable_test.rb +19 -0
- data/test/style_test.rb +64 -0
- data/test/test_base.rb +19 -0
- data/test/xaal_element_test.rb +47 -0
- metadata +145 -0
data/lib/rgb_color.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require "generic_color"
|
2
|
+
module RXaal
|
3
|
+
class RGBColor < GenericColor
|
4
|
+
attr_accessor_of_class Integer, :r, :g, :b
|
5
|
+
def initialize(_r, _g, _b)
|
6
|
+
super
|
7
|
+
@r = _r
|
8
|
+
@g = _g
|
9
|
+
@b = _b
|
10
|
+
end
|
11
|
+
|
12
|
+
def xaal_serialize(parent)
|
13
|
+
elem = Element.new "color"
|
14
|
+
elem.attributes['r'] = r
|
15
|
+
elem.attributes['g'] = g
|
16
|
+
elem.attributes["b"] = b
|
17
|
+
parent.elements << elem
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/rxaal.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module RXaal
|
2
|
+
require "core_ext/module"
|
3
|
+
require "core_ext/string"
|
4
|
+
require "core_ext/object"
|
5
|
+
require "core_ext/class"
|
6
|
+
autoload :XaalNS, "xaalns"
|
7
|
+
autoload :Anchor, "enum/anchor"
|
8
|
+
autoload :ColorName, "enum/color_name"
|
9
|
+
autoload :OffsetMode, "enum/offset_mode"
|
10
|
+
autoload :StrokeType, "enum/stroke_type"
|
11
|
+
autoload :TextAlignment, "enum/text_alignment"
|
12
|
+
smrt_autoload :Angle, :Arc, :Arrow, :Attribute
|
13
|
+
smrt_autoload :BoundArray
|
14
|
+
smrt_autoload :Center, :CircleSegment, :Circle, :Coordinate
|
15
|
+
smrt_autoload :Ellipse, :Enum
|
16
|
+
smrt_autoload :Font
|
17
|
+
smrt_autoload :GenericColor, :GraphicPrim
|
18
|
+
smrt_autoload :Line
|
19
|
+
smrt_autoload :Metadata, :MetadataMod
|
20
|
+
smrt_autoload :NamedColor, :NodePrim, :NSContainer
|
21
|
+
smrt_autoload :Offset, :Operation
|
22
|
+
smrt_autoload :Par, :Point, :Polygon, :Polyline
|
23
|
+
smrt_autoload :RXaalError, :RXaalObject, :Radius, :Rectangle, :RGBColor
|
24
|
+
smrt_autoload :Seq, :Serializable, :Shape, :ShowHide, :Square, :Stroke, :StyleContainer,
|
25
|
+
:StyleMod, :Style
|
26
|
+
smrt_autoload :Text, :TopLevelElem, :Triangle
|
27
|
+
smrt_autoload :XaalDoc, :XaalElement
|
28
|
+
end
|
data/lib/seq.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module RXaal
|
2
|
+
class Seq < TopLevelElem
|
3
|
+
attr_reader :pars
|
4
|
+
#narrative does not do type checking currently
|
5
|
+
attr_accessor :narrative
|
6
|
+
|
7
|
+
def initialize(doc)
|
8
|
+
super(doc)
|
9
|
+
@pars = BoundArray.new(Par)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
def xaal_serialize(parent)
|
15
|
+
e = Element.new "seq"
|
16
|
+
parent.elements << e
|
17
|
+
|
18
|
+
if @narrative != nil
|
19
|
+
n = Element.new "narrative"
|
20
|
+
n.text=(@narrative)
|
21
|
+
e.elements << n
|
22
|
+
end
|
23
|
+
|
24
|
+
pars.each { |p|
|
25
|
+
p.xaal_serialize(e)
|
26
|
+
}
|
27
|
+
|
28
|
+
superclass_serialize(e)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/serializable.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require "rexml/element"
|
2
|
+
module RXaal
|
3
|
+
module Serializable
|
4
|
+
include REXML
|
5
|
+
# serializes the current element in the REXML tree with parent as its
|
6
|
+
# parent element
|
7
|
+
def xaal_serialize(parent)
|
8
|
+
raise NotImplementedError, "must be overrriden"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/shape.rb
ADDED
data/lib/show_hide.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
module RXaal
|
3
|
+
class ShowHide < BoundArray
|
4
|
+
include Serializable
|
5
|
+
|
6
|
+
|
7
|
+
attr_reader :show
|
8
|
+
attr_accessor_of_class String, :type
|
9
|
+
|
10
|
+
def initialize(show)
|
11
|
+
super(XaalElement)
|
12
|
+
@show = show
|
13
|
+
end
|
14
|
+
|
15
|
+
def xaal_serialize(parent)
|
16
|
+
e_name = @show ? "show" : "hide"
|
17
|
+
e = Element.new e_name
|
18
|
+
parent.elements << e
|
19
|
+
e.attributes["type"] = @type
|
20
|
+
each { |obj|
|
21
|
+
t_obj = Element.new "object_ref"
|
22
|
+
t_obj.attributes["id"] = obj.id
|
23
|
+
e.elements << t_obj
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/square.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'rectangle'
|
2
|
+
module RXaal
|
3
|
+
class Square < Rectangle
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def coordinate
|
10
|
+
return self.coor1
|
11
|
+
end
|
12
|
+
|
13
|
+
def coordinate=(new_value)
|
14
|
+
self.coor1=(new_value)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def coor1
|
20
|
+
return super
|
21
|
+
end
|
22
|
+
|
23
|
+
def coor1=(n)
|
24
|
+
return super(n)
|
25
|
+
end
|
26
|
+
|
27
|
+
def coor2
|
28
|
+
return nil
|
29
|
+
end
|
30
|
+
|
31
|
+
def coor2=(n)
|
32
|
+
return nil
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/stroke.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module RXaal
|
2
|
+
class Stroke < XaalElement
|
3
|
+
include Serializable
|
4
|
+
|
5
|
+
attr_accessor_of_class String, :type
|
6
|
+
attr_accessor_of_class Integer, :width
|
7
|
+
|
8
|
+
def initialize(doc, id = nil, elem_ns=nil)
|
9
|
+
super(doc, id, elem_ns)
|
10
|
+
end
|
11
|
+
|
12
|
+
def xaal_serialize(parent)
|
13
|
+
if (@type != nil || @width != nil)
|
14
|
+
e = REXML::Element.new "stroke"
|
15
|
+
parent.elements << e
|
16
|
+
|
17
|
+
if @type != nil
|
18
|
+
e.attributes["type"] = @type
|
19
|
+
end
|
20
|
+
if @width != nil
|
21
|
+
e.attributes["width"] = @width
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/style.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
module RXaal
|
2
|
+
class Style < XaalElement
|
3
|
+
include StyleMod, Serializable
|
4
|
+
attr_accessor_of_class Style, :uses
|
5
|
+
style_attr_accessor_of_bool :forward_arrow, :backwards_arrow
|
6
|
+
attr_accessor :color, :fill_color
|
7
|
+
style_attr_accessor_of_class Font, :font
|
8
|
+
style_attr_accessor_of_class Stroke, :stroke
|
9
|
+
|
10
|
+
def initialize (doc, id = nil, uses_style = nil)
|
11
|
+
super(doc, id)
|
12
|
+
@uses = uses_style
|
13
|
+
end
|
14
|
+
|
15
|
+
def font_size
|
16
|
+
if font != nil
|
17
|
+
return font.size
|
18
|
+
end
|
19
|
+
return nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def font_size=(_size)
|
23
|
+
if @font == nil
|
24
|
+
@font.new(@doc)
|
25
|
+
end
|
26
|
+
|
27
|
+
@font.size = _size
|
28
|
+
end
|
29
|
+
|
30
|
+
def font_family
|
31
|
+
if font != nil
|
32
|
+
return font.family
|
33
|
+
end
|
34
|
+
return nil
|
35
|
+
end
|
36
|
+
|
37
|
+
def font_family=(_fam)
|
38
|
+
if @font == nil
|
39
|
+
@font.new(@doc)
|
40
|
+
end
|
41
|
+
|
42
|
+
@font.family = _fam
|
43
|
+
end
|
44
|
+
|
45
|
+
def stroke_type
|
46
|
+
if stroke != nil
|
47
|
+
return stroke.type
|
48
|
+
end
|
49
|
+
return nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def stroke_type=(_type)
|
53
|
+
if @stroke == nil
|
54
|
+
@stroke.new(@doc)
|
55
|
+
end
|
56
|
+
|
57
|
+
@stroke.type = _type
|
58
|
+
end
|
59
|
+
|
60
|
+
def stroke_width
|
61
|
+
if stroke != nil
|
62
|
+
return stroke.width
|
63
|
+
end
|
64
|
+
return nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def stroke_width=(_width)
|
68
|
+
if @stroke == nil
|
69
|
+
@stroke.new(@doc)
|
70
|
+
end
|
71
|
+
|
72
|
+
@stroke.width = _width
|
73
|
+
end
|
74
|
+
|
75
|
+
# TODO: this doesn't really do anything with uses yet
|
76
|
+
def xaal_serialize(parent)
|
77
|
+
style = REXML::Element.new "style"
|
78
|
+
parent.elements << style
|
79
|
+
|
80
|
+
[:color, :fill_color, :font, :stroke].each { |c|
|
81
|
+
t = self.send(c)
|
82
|
+
if t != nil
|
83
|
+
t.xaal_serialize(style)
|
84
|
+
end
|
85
|
+
|
86
|
+
}
|
87
|
+
|
88
|
+
superclass_serialize(style)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/style_mod.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
module RXaal
|
2
|
+
module StyleMod
|
3
|
+
def self.included(base)
|
4
|
+
base.extend(ClassMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def style_attr_accessor(*symbols)
|
9
|
+
symbols.each { |s|
|
10
|
+
|
11
|
+
style_get(s)
|
12
|
+
|
13
|
+
define_method("#{s}=") do |val|
|
14
|
+
instance_variable_set("@#{s}", val)
|
15
|
+
end
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def style_attr_accessor_of_class(klass, *symbols)
|
20
|
+
symbols.each { |s|
|
21
|
+
style_get(s)
|
22
|
+
|
23
|
+
define_method("#{s}=") do |val|
|
24
|
+
if val.class == klass
|
25
|
+
instance_variable_set("@#{s}", val)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
}
|
29
|
+
|
30
|
+
|
31
|
+
end
|
32
|
+
def style_attr_accessor_of_bool( *symbols)
|
33
|
+
symbols.each { |s|
|
34
|
+
style_get(s)
|
35
|
+
|
36
|
+
define_method("#{s}=") do |val|
|
37
|
+
if val.class == TrueClass || val.class == FalseClass
|
38
|
+
instance_variable_set("@#{s}", val)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
}
|
42
|
+
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def style_get(s)
|
47
|
+
define_method(s) do
|
48
|
+
symb = instance_variable_get("@#{s}")
|
49
|
+
if symb != nil
|
50
|
+
symb
|
51
|
+
else
|
52
|
+
if self.uses != nil
|
53
|
+
self.uses.send(s)
|
54
|
+
else
|
55
|
+
nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/text.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
module RXaal
|
2
|
+
class Text < NodePrim
|
3
|
+
attr_accessor_of_class Contents, :contents
|
4
|
+
attr_accessor_of_class String, :alignment
|
5
|
+
attr_accessor_of_class Integer
|
6
|
+
attr_accessor_of_boolean :boxed
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def xaal_serialize(parent)
|
14
|
+
text = Element.new "text"
|
15
|
+
parent.elements << text
|
16
|
+
|
17
|
+
if @alignment != nil
|
18
|
+
e_align = Element.new "alignment"
|
19
|
+
e_align.text = alignment
|
20
|
+
text << e_align
|
21
|
+
end
|
22
|
+
|
23
|
+
if @boxed != nil
|
24
|
+
e_boxed = Element.new "boxed"
|
25
|
+
e_boxed.text = boxed.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
contents.xaal_serialize(text)
|
29
|
+
|
30
|
+
superclass_serialize(text)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
data/lib/triangle.rb
ADDED
data/lib/xaal_doc.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
#This file is part of Foobar.
|
2
|
+
#
|
3
|
+
#Foobar is free software: you can redistribute it and/or modify
|
4
|
+
#it under the terms of the GNU General Public License as published by
|
5
|
+
#the Free Software Foundation, either version 3 of the License, or
|
6
|
+
#(at your option) any later version.
|
7
|
+
#
|
8
|
+
# Foobar is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License
|
14
|
+
# along with Foobar. If not, see <http://www.gnu.org/licenses/>.
|
15
|
+
#
|
16
|
+
|
17
|
+
|
18
|
+
require 'rexml/document'
|
19
|
+
require 'rexml/xmldecl'
|
20
|
+
|
21
|
+
module RXaal
|
22
|
+
class XaalDoc
|
23
|
+
include Serializable
|
24
|
+
XAAL_NS_URI = "http://www.cs.hut.fi/Research/SVG/XAAL"
|
25
|
+
XSI_URI = "http://www.w3.org/2001/XMLSchema-instance"
|
26
|
+
XAAL_VERSION = "0.1"
|
27
|
+
attr_reader :xaal_version
|
28
|
+
attr_reader :namespaces
|
29
|
+
attr_reader :defs, :global_styles, :metadata
|
30
|
+
attr_reader :general_options
|
31
|
+
attr_reader :initials, :seqs
|
32
|
+
|
33
|
+
attr_reader :custom_top_level_elems
|
34
|
+
|
35
|
+
|
36
|
+
def initialize
|
37
|
+
@namespaces = NSContainer.new
|
38
|
+
@namespaces.add_ns(XAAL_NS_URI)
|
39
|
+
@namespaces.add_ns(XSI_URI, "xsi")
|
40
|
+
@top_level_elems = Array.new
|
41
|
+
@metadata = Metadata.new(self)
|
42
|
+
#self.styles = StyleContainer.new
|
43
|
+
@initials = Array.new
|
44
|
+
@seqs = Array.new
|
45
|
+
@custom_top_level_elems = BoundArray.new(TopLevelElem)
|
46
|
+
end
|
47
|
+
|
48
|
+
def add_option (name, value)
|
49
|
+
self.general_options[name] = value
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
def xaal_serialize(parent=nil)
|
55
|
+
|
56
|
+
doc = REXML::Document.new
|
57
|
+
doc << REXML::XMLDecl.default
|
58
|
+
root = REXML::Element.new "xaal"
|
59
|
+
doc.add(root)
|
60
|
+
|
61
|
+
self.namespaces.each { |ns|
|
62
|
+
pref = ns.prefix
|
63
|
+
url = ns.url
|
64
|
+
if (pref == "")
|
65
|
+
#its the default
|
66
|
+
root.add_namespace(url)
|
67
|
+
else
|
68
|
+
#its not
|
69
|
+
root.add_namespace(pref, url)
|
70
|
+
end
|
71
|
+
}
|
72
|
+
root.add_attribute('version', XAAL_VERSION)
|
73
|
+
root.add_attribute(@namespaces.uri_to_ns[XSI_URI].prefix << ":schemaLocation", "http://www.cs.hut.fi/Research/SVG/XAAL xaal.xsd")
|
74
|
+
|
75
|
+
self.metadata.xaal_serialize(root)
|
76
|
+
init = REXML::Element.new "initial"
|
77
|
+
root.elements << init
|
78
|
+
|
79
|
+
initials.each { |i|
|
80
|
+
i.xaal_serialize(init)
|
81
|
+
}
|
82
|
+
anim = REXML::Element.new "animation"
|
83
|
+
root.elements << anim
|
84
|
+
seqs.each { |s|
|
85
|
+
s.xaal_serialize(anim)
|
86
|
+
}
|
87
|
+
output_str = String.new
|
88
|
+
doc.write(output_str, 3)
|
89
|
+
|
90
|
+
return output_str
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|