xibtoti 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG ADDED
File without changes
data/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ Copyright (c) 2011, Fredrik Andersson
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ - Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ - Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ - Neither the name of the KONDENSATOR AB nor the names of its contributors
15
+ may be used to endorse or promote products derived from this software
16
+ without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
+ POSSIBILITY OF SUCH DAMAGE.
data/Manifest ADDED
@@ -0,0 +1,12 @@
1
+ CHANGELOG
2
+ LICENSE
3
+ README.rdoc
4
+ Rakefile
5
+ bin/xibtoti
6
+ lib/config.rb
7
+ lib/converters.rb
8
+ lib/nodes.rb
9
+ lib/session.rb
10
+ lib/xibtoti.rb
11
+ xibtoti.gemspec
12
+ Manifest
data/README.rdoc ADDED
@@ -0,0 +1,59 @@
1
+ = XibToTi
2
+
3
+ == Installation
4
+
5
+ To install XibToTi:
6
+
7
+ gem install xibtoti
8
+
9
+ == Examples
10
+
11
+ To convert a xib file to standard output write:
12
+
13
+ xibtoti myxib.xib
14
+
15
+ To save the result as myxib.js:
16
+
17
+ xibtoti -o myxib.js myxib.xib
18
+
19
+ To explicitly output all warnings, use the flag -w. To provide your own config file write:
20
+
21
+ xibtoti -c myconfig.rb myxib.xib
22
+
23
+ == Config file
24
+
25
+ In the config file information on how to translate the properties from the xib file to the Titanium script is provided. The examples given below are from the default config file.
26
+
27
+ === Ignoring warnings
28
+ To ignore warnings for skipped classes in the xib file hierarchy:
29
+
30
+ ignore_properties 'contentStretch', 'simulatedStatusBarMetrics', 'simulatedOrientationMetrics'
31
+
32
+ To ignore warnings for skipped properties in the xib file hierarchy:
33
+
34
+ ignore_classes 'IBProxyObject'
35
+
36
+ === Translating classes
37
+
38
+ To provide information on how to translate classes in the xib file:
39
+
40
+ classes 'IBUIWindow' => 'Window',
41
+ 'IBUIView' => 'View',
42
+ 'IBUILabel' => 'Label',
43
+ 'IBUIButton' => 'Button'
44
+
45
+ To give a custom javascript creation call for in example 'View', which will have standard creation call Ti.UI.createView simply give an array: 'IBUIView' => ['View', 'myCreateViewCall]
46
+
47
+ === Translating properties
48
+
49
+ To provide information on how to translate properties in the xib file:
50
+
51
+ properties 'backgroundColor' => color(:backgroundColor),
52
+ 'font' => font(:font),
53
+ 'frameOrigin' => vector(:top, :bottom),
54
+ 'frameSize' => vector(:height, :width),
55
+ 'text' => val(:text),
56
+ 'textColor' => color(:color)
57
+
58
+ This example will take the xib property 'backgroundColor' and convert it into a color ('#rrggbb') in the :backgroundColor javascript property. 'font' will be converted into a font in the :font javascript property.
59
+ The property frameOrigin is on the form '{xx, yy}' and will be split into the following javascript properties: :top => xx, :bottom => yy. The xib property 'text' will simply be carried over to the javascript property :text.
data/Rakefile ADDED
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('xibtoti', '0.0.1') do |p|
6
+ p.description = "Convert iPhone xib-files to Titanium javascript."
7
+ p.url = "http://github.com/KONDENSATOR/xibtoti"
8
+ p.author = "Fredrik Andersson"
9
+ p.email = "fredrik@kondensator.se"
10
+ p.ignore_pattern = ["lib/*.xib"]
11
+ p.executable_pattern = "bin/xibtoti"
12
+ p.development_dependencies = []
13
+ end
14
+
15
+
data/bin/xibtoti ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib")
4
+ require 'xibtoti'
5
+
6
+ OptionParser.new do |opts|
7
+ opts.banner = "Usage: xibtoti [options] filename"
8
+
9
+ opts.on("-w", "--[no-]warnings", "Show warnings") do |w|
10
+ @show_warnings = w
11
+ end
12
+
13
+ opts.on("-o", "--output-file name", "Specify output file") do |o|
14
+ @output_file = o
15
+ end
16
+
17
+ opts.on("-c", "--config-file name", "Specify config file") do |o|
18
+ @config_file = o
19
+ end
20
+
21
+ end.parse!
22
+
23
+ if ARGV.size == 1
24
+ input_file = ARGV.first
25
+ session = Session.new @config_file || File.join("#{File.dirname(__FILE__)}/../lib", 'config.rb')
26
+ session.parse_file input_file
27
+ if session.has_errors?
28
+ puts "Aborted!"
29
+ puts session.full_log [:error]
30
+ else
31
+ severities = []
32
+ severities.unshift :warning if @show_warnings
33
+ log = session.full_log severities
34
+ script = js_comments_for(log) + js_for(session.out)
35
+ if @output_file
36
+ File.open(@output_file, 'w') do |file|
37
+ file.write script
38
+ end
39
+ puts log
40
+ else
41
+ puts script
42
+ end
43
+ end
44
+ else
45
+ puts "For help, type: xibtoti -h"
46
+ end
data/lib/config.rb ADDED
@@ -0,0 +1,24 @@
1
+ ignore_properties 'contentStretch', 'simulatedStatusBarMetrics', 'simulatedOrientationMetrics'
2
+ ignore_classes 'IBProxyObject'
3
+
4
+ # To get another creation call than standard
5
+ # Ti.UI.create#{name}
6
+ # give a array as value: 'IBUIWindow' => ['Window', 'myWindowCall']
7
+ classes 'IBUIWindow' => 'Window',
8
+ 'IBUIView' => 'View',
9
+ 'IBUILabel' => 'Label',
10
+ 'IBUIButton' => 'Button'
11
+
12
+ # Available types:
13
+ # val(:output)
14
+ # bool(:output) # Where '0' gives {:output => false} and '1' gives {:output => true}
15
+ # lookup(:output, {'yes' => true, 'no' => false})
16
+ # color(:output)
17
+ # font(:output)
18
+ # vextor(:x, :y) # Where '{1, 2}' => {:x => 1, :y => 2}
19
+ properties 'backgroundColor' => color(:backgroundColor),
20
+ 'font' => font(:font),
21
+ 'frameOrigin' => vector(:top, :bottom),
22
+ 'frameSize' => vector(:height, :width),
23
+ 'text' => val(:text),
24
+ 'textColor' => color(:color)
data/lib/converters.rb ADDED
@@ -0,0 +1,36 @@
1
+ # Converters converts data in the xib files property bag to the NodeInfos property bag.
2
+ # The output key it will have is stored here. The converter can be created with a conversion block
3
+ # Converter.new :output {|v| Convert value v here...}
4
+
5
+ class Converter
6
+ def initialize(output, &conversion)
7
+ @output = output
8
+ @conversion = conversion || proc {|v| v}
9
+ end
10
+
11
+ def props_for(value)
12
+ converted_value = @conversion.call(value)
13
+ if converted_value
14
+ {@output, converted_value}
15
+ end
16
+ end
17
+ end
18
+
19
+ # MultiConverter is used for cases when a property in the xhib file's property bag needs multiple
20
+ # properties in JS
21
+ # Example: {'frameOrigin' => "{123, 456}"} should give {:top => 123, :bottom => 456}
22
+ # Done by: MultiConverter.new([:top, :bottom], /\{(\d+), (\d+)\}/) {|v| v.to_i}
23
+
24
+ class MultiConverter < Converter
25
+ def initialize(outputs, regex, &conversion)
26
+ @outputs = outputs
27
+ @regex = regex
28
+ @conversion = conversion || proc {|v| v}
29
+ end
30
+
31
+ def props_for(value)
32
+ if match = @regex.match(value)
33
+ Hash[@outputs.zip(match.captures.map(&@conversion))]
34
+ end
35
+ end
36
+ end
data/lib/nodes.rb ADDED
@@ -0,0 +1,56 @@
1
+ # NodeInfo contains the information from the xib, both hierarchy and properties
2
+
3
+ class NodeInfo
4
+ def initialize(name, node_id, node_class, subviews)
5
+ @name = name
6
+ @node_id = node_id
7
+ @node_class = node_class
8
+ @subviews = subviews
9
+ @properties = {}
10
+ end
11
+
12
+ attr_reader :properties, :name, :node_class, :subviews
13
+
14
+ def self.enumerate(name)
15
+ "#{name}#{(@@name_counters ||= Hash.new {0})[name]+=1}"
16
+ end
17
+
18
+ def self.for(hierarchy, data, session)
19
+ id = hierarchy['object-id'].to_s
20
+ info = data[id]
21
+ node_class = session.class_info_for info['class']
22
+ if node_class
23
+ name = hierarchy['name'] || enumerate(node_class.name.downcase)
24
+ subviews = (hierarchy['children'] || []).map {|child_hierarchy| NodeInfo.for(child_hierarchy, data, session)}.compact
25
+ node = NodeInfo.new name, id, node_class, subviews
26
+ info.each do |prop, value|
27
+ if converter = session.converter_for(prop)
28
+ props = converter.props_for(value)
29
+ if props
30
+ node.properties.merge! props
31
+ else
32
+ session.log(:error, "Could not convert #{prop}: #{value}")
33
+ end
34
+ else
35
+ session.log(:warning, "Skipped property for #{info['class']}: #{prop}") unless session.ignore_property? prop
36
+ end
37
+ end
38
+ node
39
+ else
40
+ session.log(:warning, "Skipped class #{info['class']}") unless session.ignore_class? info['class']
41
+ end
42
+ node
43
+ end
44
+ end
45
+
46
+ # ClassInfo contains all known information on the class of the node info (Windows, Views... etc)
47
+
48
+ class ClassInfo
49
+ def initialize(name, creation_call="Ti.UI.create#{name}")
50
+ @name = name
51
+ @creation_call = creation_call
52
+ end
53
+
54
+ attr_reader :name, :creation_call
55
+ end
56
+
data/lib/session.rb ADDED
@@ -0,0 +1,129 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ require 'nodes'
3
+ require 'converters'
4
+ require 'rubygems'
5
+ require 'plist'
6
+
7
+ # Stores all configurable info on how to translate the xib to JS
8
+ # The session is created from a config file.
9
+
10
+ class Session
11
+ def initialize(path)
12
+ @ignore_properties = []
13
+ @ignore_classes = []
14
+ @classes = {}
15
+ @properties = {}
16
+ @log = []
17
+ File.open path do |file|
18
+ eval file.read
19
+ end
20
+ end
21
+
22
+ attr_reader :out
23
+
24
+ def parse_file(file)
25
+ data = Plist::parse_xml( %x[ibtool #{file} --hierarchy --objects --connections] )
26
+ @out = data['com.apple.ibtool.document.hierarchy'].map {|hierarchy| NodeInfo.for hierarchy, data['com.apple.ibtool.document.objects'], self}.compact
27
+ data['com.apple.ibtool.document.connections'].each do |connection|
28
+ # TODO
29
+ end
30
+ @out
31
+ end
32
+
33
+ def full_log(severities=[])
34
+ excluded = @log.map(&:first).uniq - severities
35
+ (excluded.empty? ? '' : "There were log entries of severity: #{excluded.join ', '}\n") +
36
+ @log.map do |severity, message|
37
+ "[#{severity}] #{message}" if severities.include? severity
38
+ end.compact.join("\n")
39
+ end
40
+
41
+ def has_errors?
42
+ @log.any? {|severity, message| severity == :error}
43
+ end
44
+
45
+ def log(severity, message)
46
+ @log.push [severity, message]
47
+ end
48
+
49
+ def ignore_class?(class_name)
50
+ @ignore_classes.include? class_name
51
+ end
52
+
53
+ def ignore_property?(property_name)
54
+ @ignore_properties.include? property_name
55
+ end
56
+
57
+ def converter_for(property_name)
58
+ @properties[property_name]
59
+ end
60
+
61
+ def class_info_for(class_name)
62
+ @classes[class_name]
63
+ end
64
+
65
+ def classes(class_hash)
66
+ class_hash.each do |key, value|
67
+ @classes[key] = ClassInfo.new(*value)
68
+ end
69
+ end
70
+
71
+ def ignore_properties(*names)
72
+ @ignore_properties += names
73
+ end
74
+
75
+ def ignore_classes(*names)
76
+ @ignore_classes += names
77
+ end
78
+
79
+ def properties(properties_hash)
80
+ @properties.merge! properties_hash
81
+ end
82
+
83
+ # Color helper methods
84
+
85
+ def hex(v)
86
+ "%02x" % (v.to_f*255).round
87
+ end
88
+
89
+ def rgba(r, g, b, a)
90
+ "##{hex(r)}#{hex(g)}#{hex(b)}#{hex(a)}"
91
+ end
92
+
93
+ # Methods for converter creation in config file
94
+
95
+ def val(name)
96
+ Converter.new(name)
97
+ end
98
+
99
+ def bool(name)
100
+ Converter.new(name) {|v| v==1}
101
+ end
102
+
103
+ def lookup(name, hash)
104
+ Converter.new(name) {|v| hash[v]}
105
+ end
106
+
107
+ def color(name)
108
+ Converter.new(name) do |v|
109
+ case v
110
+ when /NS(?:Calibrated|Device)RGBColorSpace (\d+(?:\.\d+)?) (\d+(?:\.\d+)?) (\d+(?:\.\d+)?) (\d+(?:\.\d+)?)/
111
+ rgba($1, $2, $3, $4)
112
+ when /NS(?:Calibrated|Device)WhiteColorSpace (\d+(?:\.\d+)?) (\d+(?:\.\d+)?)/
113
+ rgba($1, $1, $1, $2)
114
+ when /NSCustomColorSpace Generic Gray colorspace (\d+(?:\.\d+)?) (\d+(?:\.\d+)?)/
115
+ rgba($1, $1, $1, $2)
116
+ end
117
+ end
118
+ end
119
+
120
+ def font(name)
121
+ Converter.new(name) do |v|
122
+ {:fontFamily => v['Family'], :fontSize => v['Size']}
123
+ end
124
+ end
125
+
126
+ def vector(x, y)
127
+ MultiConverter.new([x, y], /\{(\d+), (\d+)\}/) {|v| v.to_i}
128
+ end
129
+ end
data/lib/xibtoti.rb ADDED
@@ -0,0 +1,28 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ require 'session'
3
+
4
+ def inline_js_for(data)
5
+ case data
6
+ when Hash: '{' + data.map {|k,v| "#{k}:#{inline_js_for(v)}"}.join(',') + '}'
7
+ when String: "'#{data}'"
8
+ else data.to_s
9
+ end
10
+ end
11
+
12
+ def creation_call(name, class_name, info)
13
+ "#{name} = #{class_name}({\n" +
14
+ info.keys.sort.map {|key| "\t#{key}:#{inline_js_for(info[key])}"}.join(",\n") + "\n});"
15
+ end
16
+
17
+ def js_sections_for(node)
18
+ [creation_call(node.name, node.node_class.creation_call, node.properties)] +
19
+ node.subviews.map {|child| [js_sections_for(child), "#{node.name}.add(#{child.name});"]}.flatten
20
+ end
21
+
22
+ def js_for(nodes)
23
+ nodes.map {|node| js_sections_for(node)}.flatten.join("\n\n")
24
+ end
25
+
26
+ def js_comments_for text
27
+ text.map {|line| line.chomp.empty? ? line : "// #{line}"}.join + "\n"
28
+ end
data/xibtoti.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{xibtoti}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Fredrik Andersson"]
9
+ s.cert_chain = ["/Users/martin/.gem_cert/gem-public_cert.pem"]
10
+ s.date = %q{2011-03-18}
11
+ s.default_executable = %q{xibtoti}
12
+ s.description = %q{Convert iPhone xib-files to Titanium javascript.}
13
+ s.email = %q{fredrik@kondensator.se}
14
+ s.executables = ["xibtoti"]
15
+ s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc", "bin/xibtoti", "lib/config.rb", "lib/converters.rb", "lib/nodes.rb", "lib/session.rb", "lib/xibtoti.rb"]
16
+ s.files = ["CHANGELOG", "LICENSE", "README.rdoc", "Rakefile", "bin/xibtoti", "lib/config.rb", "lib/converters.rb", "lib/nodes.rb", "lib/session.rb", "lib/xibtoti.rb", "xibtoti.gemspec", "Manifest"]
17
+ s.homepage = %q{http://github.com/KONDENSATOR/xibtoti}
18
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Xibtoti", "--main", "README.rdoc"]
19
+ s.require_paths = ["lib"]
20
+ s.rubyforge_project = %q{xibtoti}
21
+ s.rubygems_version = %q{1.3.7}
22
+ s.signing_key = %q{/Users/martin/.gem_cert/gem-private_key.pem}
23
+ s.summary = %q{Convert iPhone xib-files to Titanium javascript.}
24
+
25
+ if s.respond_to? :specification_version then
26
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
27
+ s.specification_version = 3
28
+
29
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
30
+ else
31
+ end
32
+ else
33
+ end
34
+ end
data.tar.gz.sig ADDED
@@ -0,0 +1,3 @@
1
+ ���o��bJ [1�L��\���f��]�z0T��t�最hW���{�����ɯ���X�
2
+ �&�Z=�,ԭ�ja8
3
+ ��Z5*���&�Q���gp�)��패��Z&]t�b8_�s�ǁd$9vSc�yTU,�|�H�`�}�Ѝ)�W}Ľ��ˠҶg�*�ͳ��r�q�z.�����D�H1�̑��:�'W�cߎ �+���
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xibtoti
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Fredrik Andersson
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain:
17
+ - |
18
+ -----BEGIN CERTIFICATE-----
19
+ MIIDPDCCAiSgAwIBAgIBADANBgkqhkiG9w0BAQUFADBEMRYwFAYDVQQDDA1tYXJ0
20
+ aW4ubHViY2tlMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
21
+ FgNjb20wHhcNMTEwMzE4MDcyNjQ3WhcNMTIwMzE3MDcyNjQ3WjBEMRYwFAYDVQQD
22
+ DA1tYXJ0aW4ubHViY2tlMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJ
23
+ k/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQ8ebD
24
+ 1MfxrlgRbWL5T7MG/2rXcZH/8y5p7806WntPU+MhFAFcLwsgQ5hSMz5Pm04N8hxE
25
+ XTKYUDz0sWTbiEGvsgmX/HzpaBzsXIqtr6budspP9Et2Q2U936jczgv2em9q2m19
26
+ RXz6DrdDuwkHMfw0nk1u9rCustst/gjQzX0jvpHG8zJZ2BL8WwGCL7G+ybYaph1Q
27
+ lxijqv9fdZBZm7CvcsuDT7NtsZ67/5OuJ7HQPQHoVsllG5zR8J0yo6spLn4yxWkk
28
+ xu4wbMIoKQuzncS+eC3MSi3juGk0Pj0EzA8PybZOYuvIzZ9kvVn19A1gW1QXMu5s
29
+ eGG/BpXXBa0zFTFzAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0G
30
+ A1UdDgQWBBQ5x3pbsbPjZpQjx6aEdR7kj0JFwTANBgkqhkiG9w0BAQUFAAOCAQEA
31
+ uhIcZC1ltpGCHzwISugwHhioh3qqwTl9JEBCK6yf9lwM1JTgO+aUd8KY1B0gPCAN
32
+ oQlEoKGxszU3Aj48OTvfohBSgZRVIqhhlSS3Z1nWv4uRx84v+vImA57jy9KQe1PW
33
+ 49Pb42YWPA5YIXH5rND20Ack+ZbabiB/Y1fD5e10rYgE9HiqRPHIU3njB4hGNZj8
34
+ aF/HyaUxB/APPuW1c+nDDXjRldv2tCfZCNTHnQZZE8vbukn/Hdd/WySK59jQQ/p9
35
+ CK9UfnttQlNiabzeW+dijEAVjXuTpGlbUsMiFb8T2QsFjouMbkoV5AHjavEzeLKz
36
+ k9nD49LRncHAwZI65CnDwA==
37
+ -----END CERTIFICATE-----
38
+
39
+ date: 2011-03-18 00:00:00 +01:00
40
+ default_executable:
41
+ dependencies: []
42
+
43
+ description: Convert iPhone xib-files to Titanium javascript.
44
+ email: fredrik@kondensator.se
45
+ executables:
46
+ - xibtoti
47
+ extensions: []
48
+
49
+ extra_rdoc_files:
50
+ - CHANGELOG
51
+ - LICENSE
52
+ - README.rdoc
53
+ - bin/xibtoti
54
+ - lib/config.rb
55
+ - lib/converters.rb
56
+ - lib/nodes.rb
57
+ - lib/session.rb
58
+ - lib/xibtoti.rb
59
+ files:
60
+ - CHANGELOG
61
+ - LICENSE
62
+ - README.rdoc
63
+ - Rakefile
64
+ - bin/xibtoti
65
+ - lib/config.rb
66
+ - lib/converters.rb
67
+ - lib/nodes.rb
68
+ - lib/session.rb
69
+ - lib/xibtoti.rb
70
+ - xibtoti.gemspec
71
+ - Manifest
72
+ has_rdoc: true
73
+ homepage: http://github.com/KONDENSATOR/xibtoti
74
+ licenses: []
75
+
76
+ post_install_message:
77
+ rdoc_options:
78
+ - --line-numbers
79
+ - --inline-source
80
+ - --title
81
+ - Xibtoti
82
+ - --main
83
+ - README.rdoc
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ hash: 3
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ hash: 11
101
+ segments:
102
+ - 1
103
+ - 2
104
+ version: "1.2"
105
+ requirements: []
106
+
107
+ rubyforge_project: xibtoti
108
+ rubygems_version: 1.3.7
109
+ signing_key:
110
+ specification_version: 3
111
+ summary: Convert iPhone xib-files to Titanium javascript.
112
+ test_files: []
113
+
metadata.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ #uqNJ ���ڗ(,��E�.���\
2
+ >��E�3JF����m/�@�Y�x���� ����zn���ɴ �b��D�w-��9�7�%kQ�ێ�o�q�n�k��i��&�_�z� A�