xibtoti 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.
- data/CHANGELOG +0 -0
- data/LICENSE +28 -0
- data/Manifest +12 -0
- data/README.rdoc +59 -0
- data/Rakefile +15 -0
- data/bin/xibtoti +46 -0
- data/lib/config.rb +24 -0
- data/lib/converters.rb +36 -0
- data/lib/nodes.rb +56 -0
- data/lib/session.rb +129 -0
- data/lib/xibtoti.rb +28 -0
- data/xibtoti.gemspec +34 -0
- data.tar.gz.sig +3 -0
- metadata +113 -0
- metadata.gz.sig +2 -0
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
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
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