RUIC 0.2.3 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,164 +1,165 @@
1
- #encoding: utf-8
2
- class UIC::Property
3
- class << self; attr_accessor :default; end
4
- def initialize(el); @el = el; end
5
- def name; @name||=@el['name']; end
6
- def type; @type||=@el['type']; end
7
- def formal; @formal||=@el['formalName'] || @el['name']; end
8
- def min; @el['min']; end
9
- def max; @el['max']; end
10
- def description; @desc||=@el['description']; end
11
- def default; @def ||= (@el['default'] || self.class.default); end
12
- def get(asset,slide)
13
- if asset.slide? || asset.has_slide?(slide)
14
- asset.presentation.get_attribute(asset.el,name,slide) || default
15
- end
16
- end
17
- def set(asset,new_value,slide_name_or_index)
18
- asset.presentation.set_attribute(asset.el,name,slide_name_or_index,new_value)
19
- end
20
- def inspect
21
- "<#{type} '#{name}'>"
22
- end
23
-
24
- class String < self
25
- self.default = ''
26
- end
27
- MultiLineString = String
28
-
29
- class Float < self
30
- self.default = 0.0
31
- def get(asset,slide); super.to_f; end
32
- end
33
- class Long < self
34
- self.default = 0
35
- def get(asset,slide); super.to_i; end
36
- end
37
- class Boolean < self
38
- self.default = false
39
- def get(asset,slide); super=='True'; end
40
- def set(asset,new_value,slide_name_or_index)
41
- super( asset, new_value ? 'True' : 'False', slide_name_or_index )
42
- end
43
- end
44
- class Vector < self
45
- self.default = '0 0 0'
46
- def get(asset,slide)
47
- VectorValue.new(asset,self,slide,super)
48
- end
49
- def set(asset,new_value,slide_name_or_index)
50
- new_value = new_value.join(' ') if new_value.is_a?(Array)
51
- super( asset, new_value, slide_name_or_index )
52
- end
53
- end
54
- Rotation = Vector
55
- Color = Vector
56
- class Image < self
57
- self.default = nil
58
- def get(asset,slide)
59
- if idref = super
60
- result = asset.presentation.asset_by_id( idref[1..-1] )
61
- slide ? result.on_slide( slide ) : result
62
- end
63
- end
64
- def set(asset,new_value,slide)
65
- raise "Setting image attributes not yet supported"
66
- end
67
- end
68
- class Texture < String
69
- def get(asset,slide)
70
- if path=super
71
- path.empty? ? nil : path
72
- end
73
- end
74
- end
75
-
76
- class ObjectRef < self
77
- self.default = nil
78
- def get(asset,slide)
79
- ref = super
80
- type = :absolute
81
- obj = nil
82
- unless ref=='' || ref.nil?
83
- type = ref[0]=='#' ? :absolute : :path
84
- ref = type==:absolute ? asset.presentation.asset_by_id( ref[1..-1] ) : asset.presentation.at( ref, asset.el )
85
- end
86
- ObjectReference.new(asset,self,slide,ref,type)
87
- end
88
- def set(asset,new_object,slide)
89
- get(asset,slide).object = new_object
90
- end
91
- end
92
-
93
- class ObjectReference
94
- attr_reader :object, :type
95
- def initialize(asset,property,slide,object=nil,type=nil)
96
- @asset = asset
97
- @name = property.name
98
- @slide = slide
99
- @object = object
100
- @type = type
101
- end
102
- def object=(new_object)
103
- raise "ObjectRef must be set to an asset (not a #{new_object.class.name})" unless new_object.is_a?(UIC::Asset::Root)
104
- @object = new_object
105
- write_value!
106
- end
107
- def type=(new_type)
108
- raise "ObjectRef types must be either :absolute or :path (not #{new_type.inspect})" unless [:absolute,:path].include?(new_type)
109
- @type = new_type
110
- write_value!
111
- end
112
- private
113
- def write_value!
114
- path = case @object
115
- when NilClass then ""
116
- else case @type
117
- when :absolute then "##{@object.el['id']}"
118
- when :path then @asset.presentation.path_to( @object.el, @asset.el ).sub(/^[^:.]+:/,'')
119
- # when :root then @asset.presentation.path_to( @object.el ).sub(/^[^:.]+:/,'')
120
- end
121
- end
122
- @asset.presentation.set_attribute( @asset.el, @name, @slide, path )
123
- end
124
- end
125
-
126
- Import = String #TODO: a real class
127
- Mesh = String #TODO: a real class
128
- Renderable = String #TODO: a real class
129
- Font = String #TODO: a real class
130
- FontSize = Long
131
-
132
- StringListOrInt = String #TODO: a real class
133
-
134
- class VectorValue
135
- attr_reader :x, :y, :z
136
- def initialize(asset,property,slide,str)
137
- @asset = asset
138
- @property = property
139
- @slide = slide
140
- @x, @y, @z = str.split(/\s+/).map(&:to_f)
141
- end
142
- def setall
143
- @property.set( @asset, to_s, @slide )
144
- end
145
- def x=(n); @x=n; setall end
146
- def y=(n); @y=n; setall end
147
- def z=(n); @z=n; setall end
148
- alias_method :r, :x
149
- alias_method :g, :y
150
- alias_method :b, :z
151
- alias_method :r=, :x=
152
- alias_method :g=, :y=
153
- alias_method :b=, :z=
154
- def inspect
155
- "<#{@asset.path}.#{@property.name}: #{self}>"
156
- end
157
- def to_s
158
- to_a.join(' ')
159
- end
160
- def to_a
161
- [x,y,z]
162
- end
163
- end
164
- end
1
+ #encoding: utf-8
2
+ class UIC::Property
3
+ class << self; attr_accessor :default; end
4
+ def initialize(el); @el = el; end
5
+ def name; @name||=@el['name']; end
6
+ def type; @type||=@el['type']; end
7
+ def formal; @formal||=@el['formalName'] || @el['name']; end
8
+ def min; @el['min']; end
9
+ def max; @el['max']; end
10
+ def description; @desc||=@el['description']; end
11
+ def default; @def ||= (@el['default'] || self.class.default); end
12
+ def get(asset,slide)
13
+ if asset.slide? || asset.has_slide?(slide)
14
+ asset.presentation.get_attribute(asset.el,name,slide) || default
15
+ end
16
+ end
17
+ def set(asset,new_value,slide_name_or_index)
18
+ asset.presentation.set_attribute(asset.el,name,slide_name_or_index,new_value)
19
+ end
20
+ def inspect
21
+ "<#{type} '#{name}'>"
22
+ end
23
+
24
+ class String < self
25
+ self.default = ''
26
+ end
27
+ MultiLineString = String
28
+
29
+ class Float < self
30
+ self.default = 0.0
31
+ def get(asset,slide); super.to_f; end
32
+ end
33
+ class Long < self
34
+ self.default = 0
35
+ def get(asset,slide); super.to_i; end
36
+ end
37
+ class Boolean < self
38
+ self.default = false
39
+ def get(asset,slide); super=='True'; end
40
+ def set(asset,new_value,slide_name_or_index)
41
+ super( asset, new_value ? 'True' : 'False', slide_name_or_index )
42
+ end
43
+ end
44
+ class Vector < self
45
+ self.default = '0 0 0'
46
+ def get(asset,slide)
47
+ VectorValue.new(asset,self,slide,super)
48
+ end
49
+ def set(asset,new_value,slide_name_or_index)
50
+ new_value = new_value.join(' ') if new_value.is_a?(Array)
51
+ super( asset, new_value, slide_name_or_index )
52
+ end
53
+ end
54
+ Rotation = Vector
55
+ Color = Vector
56
+ Float2 = Vector
57
+ class Image < self
58
+ self.default = nil
59
+ def get(asset,slide)
60
+ if idref = super
61
+ result = asset.presentation.asset_by_id( idref[1..-1] )
62
+ slide ? result.on_slide( slide ) : result
63
+ end
64
+ end
65
+ def set(asset,new_value,slide)
66
+ raise "Setting image attributes not yet supported"
67
+ end
68
+ end
69
+ class Texture < String
70
+ def get(asset,slide)
71
+ if path=super
72
+ path.empty? ? nil : path
73
+ end
74
+ end
75
+ end
76
+
77
+ class ObjectRef < self
78
+ self.default = nil
79
+ def get(asset,slide)
80
+ ref = super
81
+ type = :absolute
82
+ obj = nil
83
+ unless ref=='' || ref.nil?
84
+ type = ref[0]=='#' ? :absolute : :path
85
+ ref = type==:absolute ? asset.presentation.asset_by_id( ref[1..-1] ) : asset.presentation.at( ref, asset.el )
86
+ end
87
+ ObjectReference.new(asset,self,slide,ref,type)
88
+ end
89
+ def set(asset,new_object,slide)
90
+ get(asset,slide).object = new_object
91
+ end
92
+ end
93
+
94
+ class ObjectReference
95
+ attr_reader :object, :type
96
+ def initialize(asset,property,slide,object=nil,type=nil)
97
+ @asset = asset
98
+ @name = property.name
99
+ @slide = slide
100
+ @object = object
101
+ @type = type
102
+ end
103
+ def object=(new_object)
104
+ raise "ObjectRef must be set to an asset (not a #{new_object.class.name})" unless new_object.is_a?(UIC::Asset::Root)
105
+ @object = new_object
106
+ write_value!
107
+ end
108
+ def type=(new_type)
109
+ raise "ObjectRef types must be either :absolute or :path (not #{new_type.inspect})" unless [:absolute,:path].include?(new_type)
110
+ @type = new_type
111
+ write_value!
112
+ end
113
+ private
114
+ def write_value!
115
+ path = case @object
116
+ when NilClass then ""
117
+ else case @type
118
+ when :absolute then "##{@object.el['id']}"
119
+ when :path then @asset.presentation.path_to( @object.el, @asset.el ).sub(/^[^:.]+:/,'')
120
+ # when :root then @asset.presentation.path_to( @object.el ).sub(/^[^:.]+:/,'')
121
+ end
122
+ end
123
+ @asset.presentation.set_attribute( @asset.el, @name, @slide, path )
124
+ end
125
+ end
126
+
127
+ Import = String #TODO: a real class
128
+ Mesh = String #TODO: a real class
129
+ Renderable = String #TODO: a real class
130
+ Font = String #TODO: a real class
131
+ FontSize = Long
132
+
133
+ StringListOrInt = String #TODO: a real class
134
+
135
+ class VectorValue
136
+ attr_reader :x, :y, :z
137
+ def initialize(asset,property,slide,str)
138
+ @asset = asset
139
+ @property = property
140
+ @slide = slide
141
+ @x, @y, @z = str.split(/\s+/).map(&:to_f)
142
+ end
143
+ def setall
144
+ @property.set( @asset, to_s, @slide )
145
+ end
146
+ def x=(n); @x=n; setall end
147
+ def y=(n); @y=n; setall end
148
+ def z=(n); @z=n; setall end
149
+ alias_method :r, :x
150
+ alias_method :g, :y
151
+ alias_method :b, :z
152
+ alias_method :r=, :x=
153
+ alias_method :g=, :y=
154
+ alias_method :b=, :z=
155
+ def inspect
156
+ "<#{@asset.path}.#{@property.name}: #{self}>"
157
+ end
158
+ def to_s
159
+ to_a.join(' ')
160
+ end
161
+ def to_a
162
+ [x,y,z]
163
+ end
164
+ end
165
+ end
File without changes
File without changes
File without changes
@@ -0,0 +1,12 @@
1
+ module Ripl::AfterResult
2
+ def print_result(result)
3
+ super
4
+ if after=config[:after_result]
5
+ if after.respond_to?(:call)
6
+ after.call(result)
7
+ else
8
+ puts after
9
+ end
10
+ end
11
+ end
12
+ end
File without changes
@@ -1,3 +1,3 @@
1
- class RUIC
2
- VERSION = '0.2.3'
1
+ class RUIC
2
+ VERSION = '0.2.5'
3
3
  end
@@ -1,26 +1,26 @@
1
- # encoding: UTF-8
2
- $: << File.expand_path("../lib", __FILE__)
3
- require "ruic/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "RUIC"
7
- s.version = RUIC::VERSION
8
- s.platform = Gem::Platform::RUBY
9
- s.authors = ["Gavin Kistner"]
10
- s.email = ["gavin@phrogz.net"]
11
- s.license = "MIT License"
12
- s.summary = %q{Library and DSL analyzing and manipulating UI Composer applications and presentations.}
13
- s.description = %q{RUIC is a library that understands the XML formats used by NVIDIA's "UI Composer" tool suite. In addition to APIs for analyzing and manipulating these files—the UIC portion of the library—it also includes a mini DSL for writing scripts that can be run by the `ruic` interpreter.}
14
- s.homepage = "https://github.com/Phrogz/RUIC"
15
-
16
- s.add_runtime_dependency "nokogiri", '~> 1'
17
- s.add_runtime_dependency "ripl", '~> 0'
18
- s.add_runtime_dependency "ripl-multi_line", '~> 0'
19
- s.add_runtime_dependency "ripl-irb", '~> 0'
20
-
21
- s.files = `git ls-files`.split("\n")
22
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
- s.require_paths = ["lib"]
25
- s.bindir = 'bin'
1
+ # encoding: UTF-8
2
+ $: << File.expand_path("../lib", __FILE__)
3
+ require "ruic/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "RUIC"
7
+ s.version = RUIC::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Gavin Kistner"]
10
+ s.email = ["gavin@phrogz.net"]
11
+ s.license = "MIT License"
12
+ s.summary = %q{Library and DSL analyzing and manipulating UI Composer applications and presentations.}
13
+ s.description = %q{RUIC is a library that understands the XML formats used by NVIDIA's "UI Composer" tool suite. In addition to APIs for analyzing and manipulating these files—the UIC portion of the library—it also includes a mini DSL for writing scripts that can be run by the `ruic` interpreter.}
14
+ s.homepage = "https://github.com/Phrogz/RUIC"
15
+
16
+ s.add_runtime_dependency "nokogiri", '~> 1'
17
+ s.add_runtime_dependency "ripl", '~> 0'
18
+ s.add_runtime_dependency "ripl-multi_line", '~> 0'
19
+ s.add_runtime_dependency "ripl-irb", '~> 0'
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+ s.bindir = 'bin'
26
26
  end
File without changes
@@ -1,39 +1,39 @@
1
- metadata 'MetaData.xml'
2
-
3
- uia 'projects/SimpleScene/SimpleScene.uia'
4
- show app.errors if app.errors?
5
-
6
- main = app.main_presentation
7
-
8
- assert main.find( type:'Model' ).length==4
9
- assert main.find( type:'Model', slide:0 ).length==3
10
- assert main.find( type:'Model', slide:1 ).length==4
11
- assert main.find( type:'Model', slide:1, master:false ).length==1
12
- assert main.find( type:'Model', attributes:{position:[-150,60,0]} ).length==2
13
- assert main.find( type:'Model', attributes:{position:[-150,60,0]} ).length==2
14
- assert main.find( type:'Model', attributes:{position:[nil,60,nil]} ).length==4
15
- assert main.find( type:'Model', attributes:{sourcepath:'#Cube'} ).length==1
16
- assert main.find( under:main/"Scene.Layer.Sphere1" ).length==1
17
- assert main.find( attributes:{name:'Material'} ).length==4
18
- assert main.find( attributes:{name:/^Sphere/} ).length==2
19
-
20
- # You can use name not as an attribute
21
- assert main.find( name:'Material' ).length==4
22
- assert main.find( name:/^Sphere/ ).length==2
23
-
24
- # Return values are in Scene graph order
25
- assert main.find.first == main/"Scene"
26
- assert main.find.last == main/"Scene.Layer.NonMaster.Material"
27
-
28
- # Any asset can be used as the 'root'
29
- sphere = main/"Scene.Layer.Sphere1"
30
- assert sphere.find.length==1
31
-
32
- # Supplying a block will iterate, including the index
33
- expected = main.find type:'Model'
34
- found = 0
35
- main.find type:'Model' do |mod,i|
36
- found += 1
37
- assert mod == expected[i]
38
- end
1
+ metadata 'MetaData.xml'
2
+
3
+ uia 'projects/SimpleScene/SimpleScene.uia'
4
+ show app.errors if app.errors?
5
+
6
+ main = app.main_presentation
7
+
8
+ assert main.find( type:'Model' ).length==4
9
+ assert main.find( type:'Model', slide:0 ).length==3
10
+ assert main.find( type:'Model', slide:1 ).length==4
11
+ assert main.find( type:'Model', slide:1, master:false ).length==1
12
+ assert main.find( type:'Model', attributes:{position:[-150,60,0]} ).length==2
13
+ assert main.find( type:'Model', attributes:{position:[-150,60,0]} ).length==2
14
+ assert main.find( type:'Model', attributes:{position:[nil,60,nil]} ).length==4
15
+ assert main.find( type:'Model', attributes:{sourcepath:'#Cube'} ).length==1
16
+ assert main.find( under:main/"Scene.Layer.Sphere1" ).length==1
17
+ assert main.find( attributes:{name:'Material'} ).length==4
18
+ assert main.find( attributes:{name:/^Sphere/} ).length==2
19
+
20
+ # You can use name not as an attribute
21
+ assert main.find( name:'Material' ).length==4
22
+ assert main.find( name:/^Sphere/ ).length==2
23
+
24
+ # Return values are in Scene graph order
25
+ assert main.find.first == main/"Scene"
26
+ assert main.find.last == main/"Scene.Layer.NonMaster.Material"
27
+
28
+ # Any asset can be used as the 'root'
29
+ sphere = main/"Scene.Layer.Sphere1"
30
+ assert sphere.find.length==1
31
+
32
+ # Supplying a block will iterate, including the index
33
+ expected = main.find type:'Model'
34
+ found = 0
35
+ main.find type:'Model' do |mod,i|
36
+ found += 1
37
+ assert mod == expected[i]
38
+ end
39
39
  assert found==4