candle 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/LICENSE.txt +20 -0
- data/README.md +4 -0
- data/VERSION +1 -0
- data/bin/candle +21 -0
- data/lib/candle.rb +68 -0
- data/lib/candle/command.rb +27 -0
- data/lib/candle/generators/actions.rb +183 -0
- data/lib/candle/generators/blank.rb +127 -0
- data/lib/candle/generators/cli.rb +55 -0
- data/lib/candle/generators/help.rb +47 -0
- data/lib/candle/generators/jam.rb +80 -0
- data/lib/candle/generators/lua/scripts/AppDelegate.lua +36 -0
- data/lib/candle/generators/lua/scripts/tests/init.lua +6 -0
- data/lib/candle/generators/lua/scripts/tests/someTest.lua +12 -0
- data/lib/candle/generators/lua/wax/ProtocolLoader.h +12 -0
- data/lib/candle/generators/lua/wax/bin/hammer +157 -0
- data/lib/candle/generators/lua/wax/bin/update-xibs +131 -0
- data/lib/candle/generators/lua/wax/bin/waxsim +0 -0
- data/lib/candle/generators/lua/wax/lib/build-scripts/compile-stdlib.sh +14 -0
- data/lib/candle/generators/lua/wax/lib/build-scripts/copy-scripts.sh +58 -0
- data/lib/candle/generators/lua/wax/lib/build-scripts/luac.lua +80 -0
- data/lib/candle/generators/lua/wax/lib/extensions/CGAffine/wax_CGTransform.h +12 -0
- data/lib/candle/generators/lua/wax/lib/extensions/CGAffine/wax_CGTransform.m +85 -0
- data/lib/candle/generators/lua/wax/lib/extensions/CGContext/wax_CGContext.h +12 -0
- data/lib/candle/generators/lua/wax/lib/extensions/CGContext/wax_CGContext.m +251 -0
- data/lib/candle/generators/lua/wax/lib/extensions/HTTP/wax_http.h +14 -0
- data/lib/candle/generators/lua/wax/lib/extensions/HTTP/wax_http.m +240 -0
- data/lib/candle/generators/lua/wax/lib/extensions/HTTP/wax_http_connection.h +54 -0
- data/lib/candle/generators/lua/wax/lib/extensions/HTTP/wax_http_connection.m +304 -0
- data/lib/candle/generators/lua/wax/lib/extensions/filesystem/wax_filesystem.h +9 -0
- data/lib/candle/generators/lua/wax/lib/extensions/filesystem/wax_filesystem.m +273 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/Rakefile +10 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/wax_json.c +304 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/wax_json.h +11 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl-1.0.9.tar.gz +0 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/api/yajl_common.h +85 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/api/yajl_gen.h +159 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/api/yajl_parse.h +193 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl.c +159 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_alloc.c +65 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_alloc.h +50 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_buf.c +119 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_buf.h +73 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_bytestack.h +85 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_common.h +85 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_encode.c +188 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_encode.h +50 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_gen.c +322 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_gen.h +159 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_lex.c +737 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_lex.h +133 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_parse.h +193 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_parser.c +448 -0
- data/lib/candle/generators/lua/wax/lib/extensions/json/yajl/yajl_parser.h +82 -0
- data/lib/candle/generators/lua/wax/lib/lua/lapi.c +1087 -0
- data/lib/candle/generators/lua/wax/lib/lua/lapi.h +16 -0
- data/lib/candle/generators/lua/wax/lib/lua/lauxlib.c +652 -0
- data/lib/candle/generators/lua/wax/lib/lua/lauxlib.h +174 -0
- data/lib/candle/generators/lua/wax/lib/lua/lbaselib.c +653 -0
- data/lib/candle/generators/lua/wax/lib/lua/lcode.c +839 -0
- data/lib/candle/generators/lua/wax/lib/lua/lcode.h +76 -0
- data/lib/candle/generators/lua/wax/lib/lua/ldblib.c +397 -0
- data/lib/candle/generators/lua/wax/lib/lua/ldebug.c +638 -0
- data/lib/candle/generators/lua/wax/lib/lua/ldebug.h +33 -0
- data/lib/candle/generators/lua/wax/lib/lua/ldo.c +518 -0
- data/lib/candle/generators/lua/wax/lib/lua/ldo.h +57 -0
- data/lib/candle/generators/lua/wax/lib/lua/ldump.c +164 -0
- data/lib/candle/generators/lua/wax/lib/lua/lfunc.c +174 -0
- data/lib/candle/generators/lua/wax/lib/lua/lfunc.h +34 -0
- data/lib/candle/generators/lua/wax/lib/lua/lgc.c +711 -0
- data/lib/candle/generators/lua/wax/lib/lua/lgc.h +110 -0
- data/lib/candle/generators/lua/wax/lib/lua/linit.c +38 -0
- data/lib/candle/generators/lua/wax/lib/lua/liolib.c +553 -0
- data/lib/candle/generators/lua/wax/lib/lua/llex.c +461 -0
- data/lib/candle/generators/lua/wax/lib/lua/llex.h +81 -0
- data/lib/candle/generators/lua/wax/lib/lua/llimits.h +128 -0
- data/lib/candle/generators/lua/wax/lib/lua/lmathlib.c +263 -0
- data/lib/candle/generators/lua/wax/lib/lua/lmem.c +86 -0
- data/lib/candle/generators/lua/wax/lib/lua/lmem.h +49 -0
- data/lib/candle/generators/lua/wax/lib/lua/loadlib.c +666 -0
- data/lib/candle/generators/lua/wax/lib/lua/lobject.c +214 -0
- data/lib/candle/generators/lua/wax/lib/lua/lobject.h +381 -0
- data/lib/candle/generators/lua/wax/lib/lua/lopcodes.c +102 -0
- data/lib/candle/generators/lua/wax/lib/lua/lopcodes.h +268 -0
- data/lib/candle/generators/lua/wax/lib/lua/loslib.c +243 -0
- data/lib/candle/generators/lua/wax/lib/lua/lparser.c +1339 -0
- data/lib/candle/generators/lua/wax/lib/lua/lparser.h +82 -0
- data/lib/candle/generators/lua/wax/lib/lua/lstate.c +214 -0
- data/lib/candle/generators/lua/wax/lib/lua/lstate.h +169 -0
- data/lib/candle/generators/lua/wax/lib/lua/lstring.c +111 -0
- data/lib/candle/generators/lua/wax/lib/lua/lstring.h +31 -0
- data/lib/candle/generators/lua/wax/lib/lua/lstrlib.c +869 -0
- data/lib/candle/generators/lua/wax/lib/lua/ltable.c +588 -0
- data/lib/candle/generators/lua/wax/lib/lua/ltable.h +40 -0
- data/lib/candle/generators/lua/wax/lib/lua/ltablib.c +287 -0
- data/lib/candle/generators/lua/wax/lib/lua/ltm.c +75 -0
- data/lib/candle/generators/lua/wax/lib/lua/ltm.h +54 -0
- data/lib/candle/generators/lua/wax/lib/lua/lua.h +388 -0
- data/lib/candle/generators/lua/wax/lib/lua/luaconf.h +753 -0
- data/lib/candle/generators/lua/wax/lib/lua/lualib.h +53 -0
- data/lib/candle/generators/lua/wax/lib/lua/lundump.c +227 -0
- data/lib/candle/generators/lua/wax/lib/lua/lundump.h +36 -0
- data/lib/candle/generators/lua/wax/lib/lua/lvm.c +763 -0
- data/lib/candle/generators/lua/wax/lib/lua/lvm.h +36 -0
- data/lib/candle/generators/lua/wax/lib/lua/lzio.c +82 -0
- data/lib/candle/generators/lua/wax/lib/lua/lzio.h +67 -0
- data/lib/candle/generators/lua/wax/lib/lua/print.c +227 -0
- data/lib/candle/generators/lua/wax/lib/project.rake +159 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/enums.lua +396 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/ext/http.lua +43 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/ext/init.lua +4 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/ext/number.lua +21 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/ext/string.lua +97 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/ext/table.lua +165 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/helpers/WaxServer.lua +49 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/helpers/autoload.lua +10 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/helpers/base64.lua +64 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/helpers/bit.lua +274 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/helpers/cache.lua +73 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/helpers/callback.lua +22 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/helpers/frame.lua +76 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/helpers/init.lua +78 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/helpers/pickView.lua +54 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/helpers/time.lua +102 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/init.lua +18 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/luaspec/init.lua +2 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/luaspec/luamock.lua +84 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/luaspec/luaspec.lua +377 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/repl.lua +9 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/structs.lua +11 -0
- data/lib/candle/generators/lua/wax/lib/stdlib/waxClass.lua +42 -0
- data/lib/candle/generators/lua/wax/lib/wax.h +16 -0
- data/lib/candle/generators/lua/wax/lib/wax.m +260 -0
- data/lib/candle/generators/lua/wax/lib/wax_class.h +18 -0
- data/lib/candle/generators/lua/wax/lib/wax_class.m +190 -0
- data/lib/candle/generators/lua/wax/lib/wax_gc.h +20 -0
- data/lib/candle/generators/lua/wax/lib/wax_gc.m +56 -0
- data/lib/candle/generators/lua/wax/lib/wax_helpers.h +102 -0
- data/lib/candle/generators/lua/wax/lib/wax_helpers.m +870 -0
- data/lib/candle/generators/lua/wax/lib/wax_instance.h +34 -0
- data/lib/candle/generators/lua/wax/lib/wax_instance.m +810 -0
- data/lib/candle/generators/lua/wax/lib/wax_server.h +47 -0
- data/lib/candle/generators/lua/wax/lib/wax_server.m +252 -0
- data/lib/candle/generators/lua/wax/lib/wax_stdlib.h +3 -0
- data/lib/candle/generators/lua/wax/lib/wax_struct.h +26 -0
- data/lib/candle/generators/lua/wax/lib/wax_struct.m +335 -0
- data/lib/candle/generators/templates/blank/WaxApplication.xcodeproj/project.pbxproj +836 -0
- data/lib/candle/generators/templates/blank/WaxApplication.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/lib/candle/generators/templates/blank/WaxApplication.xcodeproj/project.xcworkspace/xcuserdata/eiffel.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/lib/candle/generators/templates/blank/WaxApplication.xcodeproj/xcuserdata/eiffel.xcuserdatad/xcschemes/WaxApplication.xcscheme +86 -0
- data/lib/candle/generators/templates/blank/WaxApplication.xcodeproj/xcuserdata/eiffel.xcuserdatad/xcschemes/xcschememanagement.plist +22 -0
- data/lib/candle/generators/templates/blank/WaxApplication/Default-568h@2x.png +0 -0
- data/lib/candle/generators/templates/blank/WaxApplication/Default.png +0 -0
- data/lib/candle/generators/templates/blank/WaxApplication/Default@2x.png +0 -0
- data/lib/candle/generators/templates/blank/WaxApplication/ProtocolLoader.h +12 -0
- data/lib/candle/generators/templates/blank/WaxApplication/WaxApplication-Info.plist.tt +38 -0
- data/lib/candle/generators/templates/blank/WaxApplication/WaxApplication-Prefix.pch.tt +14 -0
- data/lib/candle/generators/templates/blank/WaxApplication/en.lproj/InfoPlist.strings +2 -0
- data/lib/candle/generators/templates/blank/WaxApplication/main.m.tt +20 -0
- data/lib/candle/tasks.rb +22 -0
- data/lib/candle/utility.rb +30 -0
- data/lib/candle/version.rb +9 -0
- data/lib/candle/view.rb +48 -0
- metadata +582 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'thor/group'
|
|
3
|
+
require 'cli-colorize'
|
|
4
|
+
require 'hirb'
|
|
5
|
+
|
|
6
|
+
module Candle
|
|
7
|
+
module Generators
|
|
8
|
+
##
|
|
9
|
+
# This class bootstrap +config/boot+ and perform +Candle::Generators.load_components!+ for handle
|
|
10
|
+
# 3rd party generators
|
|
11
|
+
#
|
|
12
|
+
class Cli < Thor::Group
|
|
13
|
+
include CLIColorize
|
|
14
|
+
|
|
15
|
+
CLIColorize.default_color = :red
|
|
16
|
+
|
|
17
|
+
RENDER_OPTIONS = { :fields => [:category,:command,:description] }
|
|
18
|
+
# Include related modules
|
|
19
|
+
include Thor::Actions
|
|
20
|
+
desc "Candle Version:\t#{Candle::Version::STRING}"
|
|
21
|
+
class_option :help, :desc => "Help screen", :aliases => '-h', :type => :string
|
|
22
|
+
|
|
23
|
+
# We need to TRY to load boot because some of our app dependencies maybe have
|
|
24
|
+
# custom generators, so is necessary know who are.
|
|
25
|
+
def load_boot
|
|
26
|
+
begin
|
|
27
|
+
ENV['BUNDLE_GEMFILE'] = File.join(options[:root], "Gemfile") if options[:root]
|
|
28
|
+
rescue Exception => e
|
|
29
|
+
puts "=> Problem loading #{boot}"
|
|
30
|
+
puts ["=> #{e.message}", *e.backtrace].join("\n ")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def setup
|
|
35
|
+
Candle::Generators.load_components!
|
|
36
|
+
|
|
37
|
+
generator_kind = ARGV.delete_at(0).to_s.downcase.to_sym if ARGV[0].present?
|
|
38
|
+
generator_class = Candle::Generators.mappings[generator_kind]
|
|
39
|
+
if generator_class
|
|
40
|
+
args = ARGV.empty? && generator_class.require_arguments? ? ["-h"] : ARGV
|
|
41
|
+
generator_class.start(args)
|
|
42
|
+
else
|
|
43
|
+
puts colorize( "Candle Version: #{Candle::Version::STRING}", { :foreground => :red, :background => :white, :config => :underline } )
|
|
44
|
+
puts
|
|
45
|
+
puts "Candle is a rubygem for wax iOS framework which writes iOS application in lua, it contains xcode 4 template generators."
|
|
46
|
+
puts
|
|
47
|
+
puts colorize("For more information")
|
|
48
|
+
puts
|
|
49
|
+
puts "puer help"
|
|
50
|
+
puts
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end # Cli
|
|
54
|
+
end # Generators
|
|
55
|
+
end # Candle
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'cli-colorize'
|
|
3
|
+
require 'thor/group'
|
|
4
|
+
require 'hirb'
|
|
5
|
+
|
|
6
|
+
require File.dirname(__FILE__) + '/jam'
|
|
7
|
+
|
|
8
|
+
module Candle
|
|
9
|
+
module Generators
|
|
10
|
+
class Help < Jam
|
|
11
|
+
include CLIColorize
|
|
12
|
+
|
|
13
|
+
CLIColorize.default_color = :red
|
|
14
|
+
RENDER_OPTIONS = { :fields => [:category,:command,:description] }
|
|
15
|
+
|
|
16
|
+
# Add this generator to our candle
|
|
17
|
+
Candle::Generators.add_generator(:help, self)
|
|
18
|
+
|
|
19
|
+
# Define the source root
|
|
20
|
+
def self.source_root; File.expand_path(File.dirname(__FILE__)); end
|
|
21
|
+
def self.banner; "candle help"; end
|
|
22
|
+
|
|
23
|
+
# Include related modules
|
|
24
|
+
include Thor::Actions
|
|
25
|
+
include Candle::Generators::Actions
|
|
26
|
+
|
|
27
|
+
desc "Description:\n\n\tcandle help screen"
|
|
28
|
+
argument :name, :default => ""
|
|
29
|
+
|
|
30
|
+
def create_help
|
|
31
|
+
@developer = "eiffel"
|
|
32
|
+
@created_on = Date.today.to_s
|
|
33
|
+
puts colorize( "Candle Version: #{Candle::Version::STRING}", { :foreground => :red, :background => :white, :config => :underline } )
|
|
34
|
+
puts
|
|
35
|
+
puts "Candle is a wax iOS code generators tool."
|
|
36
|
+
puts
|
|
37
|
+
puts colorize("Generator Options")
|
|
38
|
+
opt = [{ :category => "generators", :command => "candle blank todo", :description => "generate a wax blank iOS project"}
|
|
39
|
+
]
|
|
40
|
+
View.render(opt, RENDER_OPTIONS)
|
|
41
|
+
puts
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end # Search
|
|
45
|
+
end # Generators
|
|
46
|
+
end # Candle
|
|
47
|
+
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require 'thor'
|
|
2
|
+
require 'hirb'
|
|
3
|
+
require 'thor/group'
|
|
4
|
+
require 'thor/actions'
|
|
5
|
+
require 'active_support/core_ext/string'
|
|
6
|
+
require 'active_support/inflector'
|
|
7
|
+
require 'date'
|
|
8
|
+
require File.dirname(__FILE__) + '/actions'
|
|
9
|
+
require File.dirname(__FILE__) + '/../view'
|
|
10
|
+
|
|
11
|
+
module Candle
|
|
12
|
+
module Generators
|
|
13
|
+
class Jam < Thor::Group
|
|
14
|
+
|
|
15
|
+
def self.init_generator
|
|
16
|
+
# Define the source template root
|
|
17
|
+
def self.source_root; File.expand_path(File.dirname(__FILE__)); end
|
|
18
|
+
def self.banner; "candle #{self.to_s.downcase.intern} [name]"; end
|
|
19
|
+
|
|
20
|
+
# Include related modules
|
|
21
|
+
include Thor::Actions
|
|
22
|
+
include Candle::Generators::Actions
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.parseTemplate(data)
|
|
26
|
+
eval(data)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
desc "Description:\n\n\tthis should not be used, only acts as Parent Class"
|
|
30
|
+
|
|
31
|
+
argument :name, :desc => "The name of your #{self.to_s.downcase.intern}"
|
|
32
|
+
|
|
33
|
+
class_option :root, :desc => "The root destination", :aliases => '-r', :default => ".", :type => :string
|
|
34
|
+
class_option :destroy, :aliases => '-d', :default => false, :type => :boolean
|
|
35
|
+
|
|
36
|
+
def in_app_root?
|
|
37
|
+
# File.exist?('Classes')
|
|
38
|
+
Dir.glob("*.xcodeproj").count >= 1
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def create_jam
|
|
42
|
+
valid_constant?(options["#{self.to_s.downcase.intern}"] || name)
|
|
43
|
+
@jam_name = (options["#{self.to_s.downcase.intern}"] || name).gsub(/\W/, "_").downcase
|
|
44
|
+
@developer = "#{`whoami`.strip}"
|
|
45
|
+
@created_on = Date.today.to_s
|
|
46
|
+
self.destination_root = options[:root]
|
|
47
|
+
project = options["#{self.to_s.downcase.intern}"]
|
|
48
|
+
self.behavior = :revoke if options[:destroy]
|
|
49
|
+
|
|
50
|
+
#empty_directory "#{@jam_name}"
|
|
51
|
+
|
|
52
|
+
# View.render(options)
|
|
53
|
+
# say (<<-TEXT).gsub(/ {10}/,'')
|
|
54
|
+
#
|
|
55
|
+
# =================================================================
|
|
56
|
+
# Your #{@jam_name} has been generated.
|
|
57
|
+
# =================================================================
|
|
58
|
+
#
|
|
59
|
+
# TEXT
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
class << self
|
|
63
|
+
# The methods below define the JAM DSL.
|
|
64
|
+
attr_reader :stable, :unstable
|
|
65
|
+
|
|
66
|
+
def self.attr_rw(*attrs)
|
|
67
|
+
attrs.each do |attr|
|
|
68
|
+
class_eval %Q{
|
|
69
|
+
def #{attr}(val=nil)
|
|
70
|
+
val.nil? ? @#{attr} : @#{attr} = val
|
|
71
|
+
end
|
|
72
|
+
}
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
attr_rw :version, :homepage, :author, :email, :data
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end # Jam
|
|
79
|
+
end # Generators
|
|
80
|
+
end # Candle
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
waxClass{"AppDelegate", protocols = {"UIApplicationDelegate"}}
|
|
2
|
+
|
|
3
|
+
-- Well done! You are almost ready to run a lua app on your iPhone!
|
|
4
|
+
--
|
|
5
|
+
-- Just run the app (⌘↵) in the simulator or on a device!
|
|
6
|
+
-- You will see a dull, bland "hello world" app (it is your job to spice it up.)
|
|
7
|
+
--
|
|
8
|
+
-- If your prefer using TextMate to edit the Lua code just type
|
|
9
|
+
-- 'rake tm' from the command line to setup a wax TextMate project.
|
|
10
|
+
--
|
|
11
|
+
-- What's next?
|
|
12
|
+
-- 1. Check out some of the example apps to learn how to do
|
|
13
|
+
-- more complicated apps.
|
|
14
|
+
-- 2. Then you start writing your app!
|
|
15
|
+
-- 3. Let us know if you need any help at http://groups.google.com/group/iphonewax
|
|
16
|
+
|
|
17
|
+
function applicationDidFinishLaunching(self, application)
|
|
18
|
+
local frame = UIScreen:mainScreen():bounds()
|
|
19
|
+
self.window = UIWindow:initWithFrame(frame)
|
|
20
|
+
self.window:setBackgroundColor(UIColor:colorWithRed_green_blue_alpha(0.196, 0.725, 0.702, 1))
|
|
21
|
+
|
|
22
|
+
local label = UILabel:initWithFrame(CGRect(0, 100, 320, 40))
|
|
23
|
+
label:setFont(UIFont:boldSystemFontOfSize(30))
|
|
24
|
+
label:setColor(UIColor:whiteColor())
|
|
25
|
+
label:setBackgroundColor(UIColor:colorWithRed_green_blue_alpha(0.173, 0.651, 0.627, 1))
|
|
26
|
+
label:setText("Hello Lua!")
|
|
27
|
+
label:setTextAlignment(UITextAlignmentCenter)
|
|
28
|
+
self.window:addSubview(label)
|
|
29
|
+
|
|
30
|
+
self.window:makeKeyAndVisible()
|
|
31
|
+
|
|
32
|
+
puts("")
|
|
33
|
+
puts("-------------------------------------------------")
|
|
34
|
+
puts("- You can print stuff to the console like this! -")
|
|
35
|
+
puts("-------------------------------------------------")
|
|
36
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
describe["Some Test"] = function()
|
|
2
|
+
it["can test!"] = function()
|
|
3
|
+
expect(1).should_be(1)
|
|
4
|
+
expect(1).should_not_be(2)
|
|
5
|
+
expect("hi mystery person123").should_match("person%d+")
|
|
6
|
+
expect(string.match).should_exist()
|
|
7
|
+
expect(string.crazy).should_not_exist()
|
|
8
|
+
|
|
9
|
+
local func = function() empty.nothing() end
|
|
10
|
+
expect(func).should_error()
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Many protocols will work from wax out of the box. But some need to be preloaded.
|
|
2
|
+
// If the protocol you are using isn't found, just add the protocol to this object
|
|
3
|
+
//
|
|
4
|
+
// This seems to be a bug, or there is a runtime method I'm unaware of
|
|
5
|
+
|
|
6
|
+
#import <UIKit/UIKit.h>
|
|
7
|
+
|
|
8
|
+
@interface ProtocolLoader : NSObject <UIApplicationDelegate, UIWebViewDelegate, UIActionSheetDelegate, UIAlertViewDelegate, UISearchBarDelegate, UITextViewDelegate, UITabBarControllerDelegate, UISearchDisplayDelegate> {}
|
|
9
|
+
@end
|
|
10
|
+
|
|
11
|
+
@implementation ProtocolLoader
|
|
12
|
+
@end
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# ---------------------
|
|
4
|
+
# Builds xcode projects
|
|
5
|
+
# ---------------------
|
|
6
|
+
|
|
7
|
+
require 'optparse'
|
|
8
|
+
require 'ostruct'
|
|
9
|
+
require 'fileutils'
|
|
10
|
+
require 'open3'
|
|
11
|
+
require 'stringio'
|
|
12
|
+
|
|
13
|
+
$stdout.sync = true
|
|
14
|
+
|
|
15
|
+
class Hammer
|
|
16
|
+
@args = {"-configuration" => "Debug"}
|
|
17
|
+
@settings = {}
|
|
18
|
+
|
|
19
|
+
@should_run_headless = false
|
|
20
|
+
@should_run = false
|
|
21
|
+
@verbose = false
|
|
22
|
+
@device = "iphone"
|
|
23
|
+
|
|
24
|
+
def self.setup
|
|
25
|
+
opts = OptionParser.new do |opts|
|
|
26
|
+
opts.banner = "Description: Builds an iPhone app and optionaly will run it in the simulator"
|
|
27
|
+
opts.banner = "Usage: hammer [options]"
|
|
28
|
+
opts.on("-h", "--help", "Help stuff") do
|
|
29
|
+
puts opts
|
|
30
|
+
exit
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
opts.on("-c", "--configuration ARG", "Debug? Release?") do |v|
|
|
34
|
+
@args["-configuration"] = v
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
opts.on("-o", "--outputname ARG", "Name of the executable") do |v|
|
|
38
|
+
v.gsub!(/\.app$/, "") # .app is automatically added by xcode
|
|
39
|
+
@settings["CONFIGURATION_BUILD_DIR"]= "."
|
|
40
|
+
@settings["PRODUCT_NAME"] = v
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
opts.on("-h", "--headless", "Just runs the app from the command line, no simulator") do
|
|
44
|
+
@should_run_headless = true
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
opts.on("-r", "--run", "Run the app in the simulator") do
|
|
48
|
+
@should_run = true
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
opts.on("-d", "--device ARG", "Choose what device to run on (iphone/ipad)") do |v|
|
|
53
|
+
@device = v
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
opts.on("-s", "--sdk ARG", "Choose he SDK. Use --showsdks to see options.") do |v|
|
|
57
|
+
v = "iphonesimulator#{v}" if v =~ /^[\d\.]+/ # if only the version is given... assume user wants a simulator build
|
|
58
|
+
@args["-sdk"] = v
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
opts.on("-v", "--verbose", "blah blah blah.") do |v|
|
|
62
|
+
@verbose = v
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
opts.on("--showsdks", "Lists available SDKS.") do
|
|
66
|
+
output = `xcodebuild -showsdks`
|
|
67
|
+
sdks = output.scan(/-sdk (.*?$)/m)
|
|
68
|
+
puts "Availible sdks:"
|
|
69
|
+
sdks.each {|sdk| puts " #{sdk}"}
|
|
70
|
+
|
|
71
|
+
exit
|
|
72
|
+
end
|
|
73
|
+
end.parse!
|
|
74
|
+
|
|
75
|
+
# if no sdk given, default to the most recent simulator build
|
|
76
|
+
if !@args["-sdk"]
|
|
77
|
+
output = `xcodebuild -showsdks`
|
|
78
|
+
sdks = output.scan(/-sdk (.*?$)/m).map {|a| a.join}
|
|
79
|
+
|
|
80
|
+
if @device !~ /pad/i # remove sdk version 3.2, it is ipad only
|
|
81
|
+
sdks.reject! {|a| a =~ /3.2$/}
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
@args["-sdk"] = sdks.find_all {|sdk| sdk =~ /iphonesimulator/}.sort.last
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def self.build # Build the app
|
|
89
|
+
extra_args = ARGV
|
|
90
|
+
|
|
91
|
+
extra_args += ["build"] if extra_args.empty?
|
|
92
|
+
arg_string = @args.collect {|k, v| v ? "#{k} #{v}" : k}.join(" ")
|
|
93
|
+
setting_string = @settings.collect {|k, v| v ? "#{k}=#{v}" : k}.join(" ")
|
|
94
|
+
cmd = "xcodebuild #{arg_string} #{setting_string} #{extra_args.join(' ')}"
|
|
95
|
+
puts cmd if @verbose
|
|
96
|
+
|
|
97
|
+
output = `#{cmd}`
|
|
98
|
+
successful = ($? == 0)
|
|
99
|
+
|
|
100
|
+
if @verbose or not successful
|
|
101
|
+
puts output
|
|
102
|
+
if not successful
|
|
103
|
+
puts("** BUILD FAILED **")
|
|
104
|
+
exit 1
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Take on the builds ENV
|
|
109
|
+
output.scan(/^\s*(\w+)=(.*?)$/).each {|k,v| ENV[k] = v}
|
|
110
|
+
|
|
111
|
+
return output
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def self.headless
|
|
115
|
+
return if not @should_run_headless
|
|
116
|
+
if ENV["PLATFORM_NAME"] !~ /simulator/
|
|
117
|
+
puts "Can only be run on the simulator not #{ENV["PLATFORM_NAME"]}"
|
|
118
|
+
exit 1
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
`/usr/bin/killall "iPhone Simulator" 2> /dev/null` #make sure the simulator is killed
|
|
122
|
+
|
|
123
|
+
# See http://developer.apple.com/technotes/tn2004/tn2124.html for an explanation of these environment variables.
|
|
124
|
+
ENV["DYLD_ROOT_PATH"] = ENV["SDKROOT"]
|
|
125
|
+
ENV["DYLD_FRAMEWORK_PATH"] = ENV["CONFIGURATION_BUILD_DIR"]
|
|
126
|
+
ENV["IPHONE_SIMULATOR_ROOT"] = ENV["SDKROOT"]
|
|
127
|
+
ENV["CFFIXED_USER_HOME"] = ENV["TEMP_FILES_DIR"] + "/iPhone Simulator User Dir"
|
|
128
|
+
|
|
129
|
+
FileUtils.rm_rf(ENV["CFFIXED_USER_HOME"]) if File.exists?(ENV["CFFIXED_USER_HOME"])
|
|
130
|
+
FileUtils.mkdir_p(ENV["CFFIXED_USER_HOME"] + "/Documents")
|
|
131
|
+
|
|
132
|
+
system("#{self.app_path}/#{ENV['EXECUTABLE_NAME']} -RegisterForSystemEvents")
|
|
133
|
+
|
|
134
|
+
exit 0
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def self.run
|
|
138
|
+
return if not @should_run
|
|
139
|
+
`/usr/bin/killall "iPhone Simulator" 2> /dev/null` #make sure the simulator is killed
|
|
140
|
+
sdk_version = @args["-sdk"][/([\d\.]+)/, 1]
|
|
141
|
+
cmd = "wax/bin/waxsim -d #{@device} -s #{sdk_version} #{self.app_path} #{File.expand_path('.')}"
|
|
142
|
+
puts cmd
|
|
143
|
+
system cmd
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def self.app_path
|
|
147
|
+
return "#{ENV['TARGET_BUILD_DIR']}/#{ENV['EXECUTABLE_FOLDER_PATH']}"
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
Hammer.setup
|
|
152
|
+
|
|
153
|
+
Hammer.build
|
|
154
|
+
|
|
155
|
+
Hammer.headless
|
|
156
|
+
|
|
157
|
+
Hammer.run
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require 'xml'
|
|
5
|
+
require 'erb'
|
|
6
|
+
|
|
7
|
+
PROJECT_DIR = Dir.pwd
|
|
8
|
+
XML.indent_tree_output = true
|
|
9
|
+
XML.default_tree_indent_string = "\t"
|
|
10
|
+
|
|
11
|
+
class LuaClass
|
|
12
|
+
attr :class_name
|
|
13
|
+
attr :superclass_name
|
|
14
|
+
attr :outlets
|
|
15
|
+
attr :actions
|
|
16
|
+
|
|
17
|
+
def self.all
|
|
18
|
+
lua_files = Dir["#{PROJECT_DIR}/**/*.lua"]
|
|
19
|
+
lua_files.map {|f| parse(open(f).read)}.compact
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.parse(string)
|
|
23
|
+
if string =~ /waxClass[{(\s]+(.*?)[})\s]+$/
|
|
24
|
+
arguments = $1.split(/\s*,\s*/).map {|a| a.sub(/^['"]([^'"]+).*/, "\\1")}
|
|
25
|
+
|
|
26
|
+
class_name = arguments[0]
|
|
27
|
+
superclass_name = arguments[1]
|
|
28
|
+
superclass_name = nil if arguments[1] and arguments[1] =~ /=/ # Don't want no protocols!
|
|
29
|
+
|
|
30
|
+
return new(class_name, superclass_name, string)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
return nil
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def initialize(class_name, superclass_name, contents)
|
|
37
|
+
@class_name = class_name
|
|
38
|
+
@superclass_name = superclass_name
|
|
39
|
+
@outlets = contents.scan(/IBOutlet\s+[\s"'(]+([^"']+)[\s)"']/).map {|o| o[0]}
|
|
40
|
+
@actions = contents.scan(/function\s+(\w+).*?--\s*IBA/i).map {|o| o[0]}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def to_xml
|
|
44
|
+
@@template ||= DATA.read
|
|
45
|
+
|
|
46
|
+
xml = ERB.new(@@template, 0, "-").result(binding)
|
|
47
|
+
doc = XML::Parser.string(xml, :encoding => XML::Encoding::UTF_8, :options => XML::Parser::Options::NOBLANKS).parse
|
|
48
|
+
doc.root
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# A bunch of helper methods
|
|
53
|
+
def xib_files
|
|
54
|
+
xibs = Dir["#{PROJECT_DIR}/**/*.xib"]
|
|
55
|
+
xibs.reject! {|f| f =~ /^#{Regexp.escape PROJECT_DIR}\/wax/} # Don't include any of the xibs in the wax folder
|
|
56
|
+
|
|
57
|
+
xibs
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
classes_as_xml = LuaClass.all.map {|o| o.to_xml}
|
|
61
|
+
|
|
62
|
+
for xib_file in xib_files
|
|
63
|
+
puts(xib_file)
|
|
64
|
+
doc = XML::Document.file(xib_file, :encoding => XML::Encoding::UTF_8, :options => XML::Parser::Options::NOBLANKS)
|
|
65
|
+
ib_classes = doc.find("//object[@key='IBDocument.Classes']").first
|
|
66
|
+
|
|
67
|
+
doc.find("//object[@key='referencedPartialClassDescriptions']").each {|e| e.remove!}
|
|
68
|
+
class_descriptions = XML::Node.new("object")
|
|
69
|
+
class_descriptions["class"] = "NSMutableArray"
|
|
70
|
+
class_descriptions["key"] = "referencedPartialClassDescriptions"
|
|
71
|
+
|
|
72
|
+
encoding_node = XML::Node.new("bool")
|
|
73
|
+
encoding_node['key'] = "EncodedWithXMLCoder"
|
|
74
|
+
encoding_node.content = "YES"
|
|
75
|
+
class_descriptions << encoding_node
|
|
76
|
+
|
|
77
|
+
ib_classes << class_descriptions
|
|
78
|
+
|
|
79
|
+
class_descriptions.find("object[@class='IBPartialClassDescription']").each {|e| e.remove!}
|
|
80
|
+
classes_as_xml.each {|e| class_descriptions << e.copy(true)}
|
|
81
|
+
doc.save(xib_file)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
__END__
|
|
86
|
+
<object class="IBPartialClassDescription">
|
|
87
|
+
<string key="className"><%= @class_name %></string>
|
|
88
|
+
<string key="superclassName"><%= @superclass_name or "NSObject" %></string>
|
|
89
|
+
|
|
90
|
+
<%- if @outlets.any? -%>
|
|
91
|
+
<object class="NSMutableDictionary" key="outlets">
|
|
92
|
+
<bool key="EncodedWithXMLCoder">YES</bool>
|
|
93
|
+
<object class="NSArray" key="dict.sortedKeys">
|
|
94
|
+
<bool key="EncodedWithXMLCoder">YES</bool>
|
|
95
|
+
<%- for outlet in @outlets -%>
|
|
96
|
+
<string><%= outlet %></string>
|
|
97
|
+
<%- end -%>
|
|
98
|
+
</object>
|
|
99
|
+
<object class="NSMutableArray" key="dict.values">
|
|
100
|
+
<bool key="EncodedWithXMLCoder">YES</bool>
|
|
101
|
+
<%- for outlet in @outlets -%>
|
|
102
|
+
<string>id</string>
|
|
103
|
+
<%- end -%>
|
|
104
|
+
</object>
|
|
105
|
+
</object>
|
|
106
|
+
<%- end -%>
|
|
107
|
+
|
|
108
|
+
<%- if @actions.any? -%>
|
|
109
|
+
<object class="NSMutableDictionary" key="actions">
|
|
110
|
+
<bool key="EncodedWithXMLCoder">YES</bool>
|
|
111
|
+
<object class="NSArray" key="dict.sortedKeys">
|
|
112
|
+
<bool key="EncodedWithXMLCoder">YES</bool>
|
|
113
|
+
<%- for action in @actions -%>
|
|
114
|
+
<string><%= action %>:</string>
|
|
115
|
+
<%- end -%>
|
|
116
|
+
</object>
|
|
117
|
+
<object class="NSMutableArray" key="dict.values">
|
|
118
|
+
<bool key="EncodedWithXMLCoder">YES</bool>
|
|
119
|
+
<%- for action in actions -%>
|
|
120
|
+
<string>id</string>
|
|
121
|
+
<%- end -%>
|
|
122
|
+
</object>
|
|
123
|
+
</object>
|
|
124
|
+
<%- end -%>
|
|
125
|
+
|
|
126
|
+
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
|
127
|
+
<string key="majorKey">IBUserSource</string>
|
|
128
|
+
<string key="minorKey"/>
|
|
129
|
+
</object>
|
|
130
|
+
</object>
|
|
131
|
+
|