limelight 0.2.1-java → 0.3.0-java
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/bin/ll.bat +1 -1
- data/lib/i4jruntime.jar +0 -0
- data/lib/junit-4.4.jar +0 -0
- data/lib/limelight.jar +0 -0
- data/lib/limelight/animation.rb +3 -3
- data/lib/limelight/builtin/players.rb +2 -1
- data/lib/limelight/builtin/players/combo_box.rb +8 -2
- data/lib/limelight/builtin/players/image.rb +47 -0
- data/lib/limelight/builtin/styles.rb +1 -1
- data/lib/limelight/casting_director.rb +70 -39
- data/lib/limelight/commands/command.rb +150 -0
- data/lib/limelight/commands/create_command.rb +79 -0
- data/lib/limelight/commands/freeze_command.rb +113 -0
- data/lib/limelight/commands/open_command.rb +49 -0
- data/lib/limelight/commands/pack_command.rb +45 -0
- data/lib/limelight/dsl/build_exception.rb +51 -0
- data/lib/limelight/dsl/menu_bar.rb +71 -0
- data/lib/limelight/dsl/production_builder.rb +71 -0
- data/lib/limelight/dsl/prop_builder.rb +155 -0
- data/lib/limelight/dsl/stage_builder.rb +105 -0
- data/lib/limelight/dsl/styles_builder.rb +134 -0
- data/lib/limelight/file_loader.rb +46 -0
- data/lib/limelight/gems.rb +45 -0
- data/lib/limelight/java_couplings.rb +7 -2
- data/lib/limelight/java_util.rb +2 -15
- data/lib/limelight/main.rb +7 -5
- data/lib/limelight/producer.rb +87 -66
- data/lib/limelight/production.rb +42 -4
- data/lib/limelight/prop.rb +84 -70
- data/lib/limelight/scene.rb +75 -20
- data/lib/limelight/specs/spec_helper.rb +58 -0
- data/lib/limelight/stage.rb +11 -6
- data/lib/limelight/string.rb +35 -0
- data/lib/limelight/studio.rb +29 -0
- data/lib/limelight/templates/production_templater.rb +42 -0
- data/lib/limelight/templates/scene_templater.rb +41 -0
- data/lib/limelight/templates/sources/freezing/limelight_init.rb.template +5 -0
- data/lib/limelight/templates/sources/production/init.rb.template +15 -0
- data/lib/limelight/templates/sources/production/production.rb.template +9 -0
- data/lib/limelight/templates/sources/production/stages.rb.template +17 -0
- data/lib/limelight/templates/sources/production/styles.rb.template +12 -0
- data/lib/limelight/templates/sources/scene/props.rb.template +6 -0
- data/lib/limelight/templates/sources/scene/styles.rb.template +18 -0
- data/lib/limelight/templates/templater.rb +128 -0
- data/lib/limelight/templates/templater_logger.rb +36 -0
- data/lib/limelight/theater.rb +21 -7
- data/lib/limelight/util.rb +22 -6
- data/lib/limelight/version.rb +2 -2
- data/productions/examples/8thlight.com/styles.rb +1 -1
- data/productions/examples/langstons_ant/html_javascript/ant.html +1 -1
- data/productions/examples/langstons_ant/init.rb +1 -0
- data/productions/examples/langstons_ant/players/log.rb +2 -2
- data/productions/examples/langstons_ant/players/world.rb +0 -26
- data/productions/examples/sandbox.llp +0 -0
- data/productions/examples/sandbox/click_me/players/chromaton.rb +10 -4
- data/productions/examples/sandbox/floaters/players/floater.rb +4 -2
- data/productions/examples/sandbox/gradients/players/spinner.rb +5 -1
- data/productions/examples/sandbox/gradients/players/teaser.rb +2 -2
- data/productions/examples/sandbox/gradients/players/wave.rb +2 -2
- data/productions/examples/sandbox/gradients/players/waves.rb +2 -2
- data/productions/examples/sandbox/header.rb +1 -0
- data/productions/examples/sandbox/images/logo.png +0 -0
- data/productions/examples/sandbox/images_scene/props.rb +25 -0
- data/productions/examples/sandbox/images_scene/styles.rb +30 -0
- data/productions/examples/sandbox/inputs/styles.rb +1 -1
- data/productions/examples/sandbox/scrolling/props.rb +12 -12
- data/productions/examples/sandbox/teaser/players/fader.rb +2 -8
- data/productions/stage_composer/inspector/styles.rb +2 -2
- data/productions/startup/styles.rb +2 -2
- data/spec/builtin/players/button_spec.rb +0 -1
- data/spec/builtin/players/image_spec.rb +41 -0
- data/spec/casting_director_spec.rb +114 -44
- data/spec/commands/command_spec.rb +18 -0
- data/spec/commands/create_command_spec.rb +74 -0
- data/spec/commands/freeze_command_spec.rb +59 -0
- data/spec/commands/open_command_spec.rb +30 -0
- data/spec/commands/pack_command_spec.rb +23 -0
- data/spec/dsl/production_builder_spec.rb +46 -0
- data/spec/{prop_builder_spec.rb → dsl/prop_builder_spec.rb} +80 -24
- data/spec/{stage_builder_spec.rb → dsl/stage_builder_spec.rb} +4 -4
- data/spec/{styles_builder_spec.rb → dsl/styles_builder_spec.rb} +6 -6
- data/spec/{loaders/file_loader_spec.rb → file_loader_spec.rb} +4 -4
- data/spec/gems_spec.rb +83 -0
- data/spec/java_util_spec.rb +1 -17
- data/spec/main_spec.rb +17 -0
- data/spec/producer_spec.rb +89 -79
- data/spec/production_spec.rb +28 -3
- data/spec/prop_spec.rb +82 -16
- data/spec/scene_spec.rb +73 -3
- data/spec/spec_helper.rb +37 -1
- data/spec/stage_spec.rb +10 -1
- data/spec/string_spec.rb +35 -0
- data/spec/studio_spec.rb +14 -0
- data/spec/styles_spec.rb +14 -0
- data/spec/templates/production_templater_spec.rb +44 -0
- data/spec/templates/scene_templater_spec.rb +25 -0
- data/spec/templates/templater_logger_spec.rb +38 -0
- data/spec/templates/templater_spec.rb +104 -0
- data/spec/theater_spec.rb +12 -21
- metadata +75 -23
- data/bin/icons/splash.png +0 -0
- data/lib/limelight/build_exception.rb +0 -48
- data/lib/limelight/commands.rb +0 -52
- data/lib/limelight/loaders/file_scene_loader.rb +0 -49
- data/lib/limelight/menu_bar.rb +0 -68
- data/lib/limelight/production_builder.rb +0 -66
- data/lib/limelight/prop_builder.rb +0 -119
- data/lib/limelight/stage_builder.rb +0 -103
- data/lib/limelight/styles_builder.rb +0 -131
- data/spec/commands_spec.rb +0 -34
- data/spec/production_builder_spec.rb +0 -48
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#- Copyright 2008 8th Light, Inc. All Rights Reserved.
|
|
2
|
+
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
|
3
|
+
|
|
4
|
+
require 'limelight/stage'
|
|
5
|
+
require 'limelight/limelight_exception'
|
|
6
|
+
|
|
7
|
+
module Limelight
|
|
8
|
+
|
|
9
|
+
# A trigger to build/configure Stage objects using the StageBuilder DSL.
|
|
10
|
+
#
|
|
11
|
+
# See Limelight::Stagesbuilder, Limelight::Stagebuilder
|
|
12
|
+
#
|
|
13
|
+
def self.build_stages(theater, &block)
|
|
14
|
+
builder = DSL::StagesBuilder.new(theater)
|
|
15
|
+
builder.instance_eval(&block) if block
|
|
16
|
+
return builder.__stages__
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
module DSL
|
|
20
|
+
|
|
21
|
+
# The basis of the DSL for building Stage objects.
|
|
22
|
+
#
|
|
23
|
+
# stage "inspector" do
|
|
24
|
+
# default_scene "inspector"
|
|
25
|
+
# title "Limelight Composer Inspector"
|
|
26
|
+
# location [0, 0]
|
|
27
|
+
# size [300, 800]
|
|
28
|
+
# end
|
|
29
|
+
#
|
|
30
|
+
# stage "viewer" do
|
|
31
|
+
# title "Limelight Composer Viewer"
|
|
32
|
+
# location [350, 0]
|
|
33
|
+
# size [800, 800]
|
|
34
|
+
# end
|
|
35
|
+
#
|
|
36
|
+
# In this example above, two stages are created for the production. One is named 'inspector' and the other is named
|
|
37
|
+
# 'viewer'. 'inspector' has a default scene that will be loaded on startup. 'viewer' will not contain any scene
|
|
38
|
+
# on startup. Using the DSL, each stage can be configured to set the title, location, size, or any other attribute
|
|
39
|
+
# of a stage.
|
|
40
|
+
#
|
|
41
|
+
# See Limelight::Stage
|
|
42
|
+
#
|
|
43
|
+
class StagesBuilder
|
|
44
|
+
|
|
45
|
+
Limelight::Util.lobotomize(self)
|
|
46
|
+
|
|
47
|
+
attr_reader :__stages__
|
|
48
|
+
|
|
49
|
+
# Constructs a new StagesBuilder. A Theater object is required as a parameter. Each stages created will belong
|
|
50
|
+
# to the Theater passed in.
|
|
51
|
+
#
|
|
52
|
+
def initialize(theater)
|
|
53
|
+
@__theater__ = theater
|
|
54
|
+
@__stages__ = []
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Creates a new stage with the provided name. The block will contain StageBuilder DSL to configure the stage.
|
|
58
|
+
#
|
|
59
|
+
def stage(name, &block)
|
|
60
|
+
stage_builder = StageBuilder.new(@__theater__, name)
|
|
61
|
+
stage_builder.instance_eval(&block) if block
|
|
62
|
+
@__stages__ << stage_builder.__stage__
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# The basis of the DSL for configuring a Stage object.
|
|
68
|
+
#
|
|
69
|
+
class StageBuilder
|
|
70
|
+
|
|
71
|
+
Limelight::Util.lobotomize(self)
|
|
72
|
+
|
|
73
|
+
attr_reader :__stage__
|
|
74
|
+
|
|
75
|
+
def initialize(theater, name) #:nodoc:
|
|
76
|
+
if theater[name]
|
|
77
|
+
@__stage__ = theater[name]
|
|
78
|
+
else
|
|
79
|
+
@__stage__ = theater.add_stage(name)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Specifies the scene that will be displayed on the stage upon opening of the production.
|
|
84
|
+
#
|
|
85
|
+
def default_scene(scene_name)
|
|
86
|
+
@__stage__.default_scene = scene_name
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def method_missing(sym, value) #:nodoc:
|
|
90
|
+
setter_sym = "#{sym}=".to_s
|
|
91
|
+
raise StageBuilderException.new(sym) if !@__stage__.respond_to?(setter_sym)
|
|
92
|
+
@__stage__.send(setter_sym, value)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Exception thrown by StageBuilder in the event of an invalid configuration.
|
|
97
|
+
#
|
|
98
|
+
class StageBuilderException < LimelightException
|
|
99
|
+
def initialize(name)
|
|
100
|
+
super("'#{name}' is not a valid stage property")
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
#- Copyright 2008 8th Light, Inc. All Rights Reserved.
|
|
2
|
+
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
|
3
|
+
require 'limelight/util'
|
|
4
|
+
|
|
5
|
+
module Limelight
|
|
6
|
+
|
|
7
|
+
# A trigger to define Style objects using the StyleBuilder DSL.
|
|
8
|
+
#
|
|
9
|
+
# See Limelight::Stylesbuilder, Limelight::Stylebuilder
|
|
10
|
+
#
|
|
11
|
+
def self.build_styles(style_hash = nil, &block)
|
|
12
|
+
builder = DSL::StylesBuilder.new(style_hash)
|
|
13
|
+
builder.instance_eval(&block) if block
|
|
14
|
+
return builder.__styles__
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
module DSL
|
|
18
|
+
|
|
19
|
+
# The basis of the DSL for building Style objects.
|
|
20
|
+
#
|
|
21
|
+
# Sample StyleBuilder DSL
|
|
22
|
+
#
|
|
23
|
+
# sandbox {
|
|
24
|
+
# width "100%"
|
|
25
|
+
# height "100%"
|
|
26
|
+
# vertical_alignment :top
|
|
27
|
+
# }
|
|
28
|
+
#
|
|
29
|
+
# sample {
|
|
30
|
+
# width 320
|
|
31
|
+
# height 320
|
|
32
|
+
# gradient :on
|
|
33
|
+
# }
|
|
34
|
+
#
|
|
35
|
+
# spinner {
|
|
36
|
+
# extends :sample
|
|
37
|
+
# background_color :green
|
|
38
|
+
# secondary_background_color :blue
|
|
39
|
+
# gradient_angle 0
|
|
40
|
+
# gradient_penetration 100
|
|
41
|
+
# }
|
|
42
|
+
#
|
|
43
|
+
# This exmple builds three styles: sandbox, sample, spinner. Within each style block, the individual attributes of
|
|
44
|
+
# the style may be set.
|
|
45
|
+
#
|
|
46
|
+
# See Limelight::Styles
|
|
47
|
+
#
|
|
48
|
+
class StylesBuilder
|
|
49
|
+
|
|
50
|
+
Limelight::Util.lobotomize(self)
|
|
51
|
+
|
|
52
|
+
attr_reader :__styles__
|
|
53
|
+
|
|
54
|
+
def initialize(style_hash = nil)
|
|
55
|
+
@__styles__ = style_hash || {}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def method_missing(sym, &block) #:nodoc:
|
|
59
|
+
__add_style__(sym.to_s, &block)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def __add_style__(name, &block) #:nodoc:
|
|
63
|
+
builder = StyleBuilder.new(name, self)
|
|
64
|
+
builder.instance_eval(&block) if block
|
|
65
|
+
@__styles__[name] = builder.__style__
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# The basis of the DSL for defining a Style object.
|
|
70
|
+
#
|
|
71
|
+
class StyleBuilder
|
|
72
|
+
|
|
73
|
+
Limelight::Util.lobotomize(self)
|
|
74
|
+
|
|
75
|
+
attr_reader :__style__ #:nodoc:
|
|
76
|
+
|
|
77
|
+
def initialize(name, styles_builder, options = {}) #:nodoc:
|
|
78
|
+
@__name = name
|
|
79
|
+
@__styles_builder = styles_builder
|
|
80
|
+
@__style__ = @__styles_builder.__styles__[name] || Styles::RichStyle.new
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Used to define a hover style. Hover styles are appiled when the mouse passed over a prop using the specified style.
|
|
84
|
+
#
|
|
85
|
+
# spinner {
|
|
86
|
+
# width 50
|
|
87
|
+
# height 50
|
|
88
|
+
# hover {
|
|
89
|
+
# text_color :white
|
|
90
|
+
# }
|
|
91
|
+
# }
|
|
92
|
+
#
|
|
93
|
+
# The text color of props using the 'spinner' style will become white when the mouse hovers over them.
|
|
94
|
+
#
|
|
95
|
+
def hover(&block)
|
|
96
|
+
@__styles_builder.__add_style__("#{@__name}.hover", &block)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Styles may extend other styles.
|
|
100
|
+
#
|
|
101
|
+
# base {
|
|
102
|
+
# background_color :red
|
|
103
|
+
# }
|
|
104
|
+
#
|
|
105
|
+
# cell {
|
|
106
|
+
# extends :base
|
|
107
|
+
# text_color :black
|
|
108
|
+
# }
|
|
109
|
+
#
|
|
110
|
+
# The 'cell' style now has all attributes defined in 'base'. Therefore any prop using the 'cell' style
|
|
111
|
+
# will have a red background. Styles may override attributes aquired through extension.
|
|
112
|
+
#
|
|
113
|
+
def extends(*style_names)
|
|
114
|
+
style_names.each do |style_name|
|
|
115
|
+
extension = @__styles_builder.__styles__[style_name.to_s]
|
|
116
|
+
raise StyleBuilderException.new("Can't extend missing style: '#{style_name}'") if extension.nil?
|
|
117
|
+
@__style__.add_extension(extension)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def method_missing(sym, value) #:nodoc:
|
|
122
|
+
setter_sym = "#{sym}=".to_s
|
|
123
|
+
raise StyleBuilderException.new("'#{sym}' is not a valid style") if !@__style__.respond_to?(setter_sym)
|
|
124
|
+
@__style__.send(setter_sym, value.to_s)
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Exception thrown by StyleBuilder when an error is encountered.
|
|
129
|
+
#
|
|
130
|
+
class StyleBuilderException < Exception
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#- Copyright 2008 8th Light, Inc. All Rights Reserved.
|
|
2
|
+
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
|
3
|
+
|
|
4
|
+
module Limelight
|
|
5
|
+
|
|
6
|
+
class FileLoader #:nodoc:
|
|
7
|
+
|
|
8
|
+
include ResourceLoader
|
|
9
|
+
|
|
10
|
+
attr_reader :root
|
|
11
|
+
|
|
12
|
+
def self.for_root(root)
|
|
13
|
+
loader = new
|
|
14
|
+
loader.reset_on_root(root)
|
|
15
|
+
return loader
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def reset_on_root(root)
|
|
19
|
+
@root = File.expand_path(root)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def path_to(path)
|
|
23
|
+
if (path == File.expand_path(path))
|
|
24
|
+
return path
|
|
25
|
+
else
|
|
26
|
+
return File.expand_path(File.join(@root, path))
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def exists?(path)
|
|
31
|
+
return File.exists?(path_to(path))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
alias :pathTo :path_to
|
|
35
|
+
|
|
36
|
+
def load(path)
|
|
37
|
+
file_to_load = path_to(path)
|
|
38
|
+
raise LimelightException.new("File not found: #{file_to_load}") if not File.exists?(file_to_load)
|
|
39
|
+
return IO.read(file_to_load)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
alias :read :load
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Limelight
|
|
2
|
+
module Gems
|
|
3
|
+
|
|
4
|
+
class << self
|
|
5
|
+
|
|
6
|
+
attr_accessor :current_production
|
|
7
|
+
|
|
8
|
+
def load_path
|
|
9
|
+
@load_path = $: if @load_path.nil?
|
|
10
|
+
return @load_path
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def install(gem_name, paths)
|
|
14
|
+
stack = paths.dup
|
|
15
|
+
while !stack.empty?
|
|
16
|
+
load_path.unshift File.join(current_production.gems_directory, gem_name, stack.pop)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def install_gems_in_production(production)
|
|
21
|
+
self.current_production = production
|
|
22
|
+
|
|
23
|
+
gems_dir = current_production.gems_directory
|
|
24
|
+
if File.exists?(gems_dir) && File.directory?(gems_dir)
|
|
25
|
+
gems = Dir.entries(gems_dir).select { |dir| dir != "." && dir != ".." }
|
|
26
|
+
gems.sort!
|
|
27
|
+
gems.reverse!
|
|
28
|
+
gems.each do |gem_name|
|
|
29
|
+
init_file = File.join(gems_dir, gem_name, 'limelight_init.rb')
|
|
30
|
+
if File.exists?(init_file)
|
|
31
|
+
load init_file
|
|
32
|
+
else
|
|
33
|
+
puts "WARNING: Frozen gem (#{gem_name}) is missing limelight_init.rb file."
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
self.current_production = nil
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
module Limelight #:nodoc:
|
|
5
5
|
|
|
6
6
|
Main = Java::limelight.Main
|
|
7
|
-
|
|
7
|
+
ResourceLoader = Java::limelight.ResourceLoader
|
|
8
8
|
Context = Java::limelight.Context
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
module Background
|
|
11
|
+
Animation = Java::limelight.background.Animation
|
|
12
|
+
end
|
|
10
13
|
|
|
11
14
|
module Styles #:nodoc:
|
|
12
15
|
Style = Java::limelight.styles.Style
|
|
@@ -26,6 +29,7 @@ module Limelight #:nodoc:
|
|
|
26
29
|
module Model #:nodoc:
|
|
27
30
|
Frame = Java::limelight.ui.model.Frame
|
|
28
31
|
Panel = Java::limelight.ui.model.PropPanel
|
|
32
|
+
ImagePanel = Java::limelight.ui.model.ImagePanel
|
|
29
33
|
|
|
30
34
|
module Inputs #:nodoc:
|
|
31
35
|
ButtonPanel = Java::limelight.ui.model.inputs.ButtonPanel
|
|
@@ -42,6 +46,7 @@ module Limelight #:nodoc:
|
|
|
42
46
|
Prop = Java::limelight.ui.api.Prop
|
|
43
47
|
Stage = Java::limelight.ui.api.Stage
|
|
44
48
|
Theater = Java::limelight.ui.api.Theater
|
|
49
|
+
Studio = Java::limelight.ui.api.Studio
|
|
45
50
|
end
|
|
46
51
|
|
|
47
52
|
module Painting #:nodoc:
|
data/lib/limelight/java_util.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
#- Copyright 2008 8th Light, Inc. All Rights Reserved.
|
|
2
2
|
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
|
3
3
|
|
|
4
|
+
require 'limelight/string'
|
|
5
|
+
|
|
4
6
|
class Class
|
|
5
7
|
|
|
6
8
|
# Class level method to creates Java style getters.
|
|
@@ -44,19 +46,4 @@ class Class
|
|
|
44
46
|
end
|
|
45
47
|
|
|
46
48
|
end
|
|
47
|
-
|
|
48
|
-
class String
|
|
49
|
-
|
|
50
|
-
# Converts Ruby style names to Java style camal case.
|
|
51
|
-
#
|
|
52
|
-
# "four_score".camalized # => "FourScore"
|
|
53
|
-
# "and_seven_years".camalized(:lower) # => "andSevenYears"
|
|
54
|
-
#
|
|
55
|
-
def camalized(starting_case = :upper)
|
|
56
|
-
value = self.downcase.gsub(/[_| ]([a-z])/) { |match| match[-1..-1].upcase }
|
|
57
|
-
value = value[0..0].upcase + value[1..-1] if starting_case == :upper
|
|
58
|
-
return value
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
|
62
49
|
|
data/lib/limelight/main.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#- Copyright 2008 8th Light, Inc. All Rights Reserved.
|
|
2
2
|
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
|
3
3
|
|
|
4
|
-
require 'limelight/commands'
|
|
4
|
+
require 'limelight/commands/command'
|
|
5
5
|
|
|
6
6
|
module Limelight
|
|
7
7
|
|
|
@@ -81,7 +81,7 @@ module Limelight
|
|
|
81
81
|
#
|
|
82
82
|
def run(args)
|
|
83
83
|
command_name = args.shift
|
|
84
|
-
command = Commands
|
|
84
|
+
command = Commands[command_name]
|
|
85
85
|
if command
|
|
86
86
|
command.new.run(args)
|
|
87
87
|
else
|
|
@@ -92,12 +92,14 @@ module Limelight
|
|
|
92
92
|
# Prints the usage of the limelight command.
|
|
93
93
|
#
|
|
94
94
|
def usage
|
|
95
|
+
puts ""
|
|
95
96
|
puts "Usage: limelight <command> [options] [params]"
|
|
96
|
-
puts "commands:"
|
|
97
|
-
Commands::
|
|
98
|
-
command = Commands
|
|
97
|
+
puts " commands:"
|
|
98
|
+
Commands::LISTING.keys.sort.each do |key|
|
|
99
|
+
command = Commands[key]
|
|
99
100
|
puts "\t#{key}\t\t#{command.description}"
|
|
100
101
|
end
|
|
102
|
+
exit -1
|
|
101
103
|
end
|
|
102
104
|
end
|
|
103
105
|
|
data/lib/limelight/producer.rb
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
#- Copyright 2008 8th Light, Inc. All Rights Reserved.
|
|
2
2
|
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
|
3
3
|
|
|
4
|
-
require 'limelight/
|
|
5
|
-
require 'limelight/prop_builder'
|
|
6
|
-
require 'limelight/styles_builder'
|
|
7
|
-
require 'limelight/stage_builder'
|
|
8
|
-
require 'limelight/production_builder'
|
|
4
|
+
require 'limelight/file_loader'
|
|
5
|
+
require 'limelight/dsl/prop_builder'
|
|
6
|
+
require 'limelight/dsl/styles_builder'
|
|
7
|
+
require 'limelight/dsl/stage_builder'
|
|
8
|
+
require 'limelight/dsl/production_builder'
|
|
9
9
|
require 'limelight/casting_director'
|
|
10
10
|
require 'limelight/stage'
|
|
11
|
-
require 'limelight/build_exception'
|
|
11
|
+
require 'limelight/dsl/build_exception'
|
|
12
12
|
require 'limelight/theater'
|
|
13
13
|
require 'limelight/production'
|
|
14
|
+
require 'limelight/gems'
|
|
14
15
|
|
|
15
16
|
module Limelight
|
|
16
17
|
|
|
@@ -27,7 +28,7 @@ module Limelight
|
|
|
27
28
|
producer = new(production_name)
|
|
28
29
|
producer.open
|
|
29
30
|
end
|
|
30
|
-
|
|
31
|
+
|
|
31
32
|
attr_reader :loader, :theater, :production
|
|
32
33
|
attr_writer :builtin_styles
|
|
33
34
|
|
|
@@ -35,12 +36,16 @@ module Limelight
|
|
|
35
36
|
# You may also provide an existing Production for which this Producer will interact.
|
|
36
37
|
#
|
|
37
38
|
def initialize(root_path, theater=nil, production=nil)
|
|
38
|
-
if(root_path[-4..-1] == ".
|
|
39
|
+
if (root_path[-4..-1] == ".lll")
|
|
40
|
+
url = IO.read(root_path).strip
|
|
41
|
+
root_path = Limelight::Context.instance.downloader.download(url).absolute_path
|
|
42
|
+
end
|
|
43
|
+
if (root_path[-4..-1] == ".llp")
|
|
39
44
|
root_path = unpack_production(root_path)
|
|
40
45
|
end
|
|
41
|
-
@
|
|
46
|
+
@production = production || Production.new(root_path)
|
|
47
|
+
@loader = @production.root
|
|
42
48
|
@theater = theater.nil? ? Theater.new : theater
|
|
43
|
-
@production = production
|
|
44
49
|
end
|
|
45
50
|
|
|
46
51
|
# Returns the CastingDirector for this Production.
|
|
@@ -50,40 +55,52 @@ module Limelight
|
|
|
50
55
|
return @casting_director
|
|
51
56
|
end
|
|
52
57
|
|
|
53
|
-
#
|
|
54
|
-
# Production, it will be loaded before anything else.
|
|
58
|
+
# Loads the Production without opening it. The Production will be created into memory with all it's stages
|
|
55
59
|
#
|
|
56
|
-
def
|
|
60
|
+
def load(options = {})
|
|
57
61
|
establish_production
|
|
58
|
-
|
|
59
|
-
if
|
|
60
|
-
|
|
62
|
+
Gems.install_gems_in_production(@production)
|
|
63
|
+
Kernel.load(@production.init_file) if ( !options[:ignore_init] && File.exists?(@production.init_file) )
|
|
64
|
+
load_stages if File.exists?(@production.stages_file)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Opens the Production.
|
|
68
|
+
#
|
|
69
|
+
def open()
|
|
70
|
+
load
|
|
71
|
+
if @theater.has_stages?
|
|
72
|
+
@theater.stages.each { |stage| open_scene(stage.default_scene, stage) if stage.default_scene }
|
|
61
73
|
else
|
|
62
|
-
open_scene(
|
|
74
|
+
open_scene(:root, @theater.default_stage)
|
|
63
75
|
end
|
|
64
76
|
@casting_director = nil
|
|
65
77
|
end
|
|
66
78
|
|
|
67
79
|
# Opens the specified Scene onto the Spcified Stage.
|
|
68
80
|
#
|
|
69
|
-
def open_scene(
|
|
70
|
-
|
|
71
|
-
|
|
81
|
+
def open_scene(name, stage)
|
|
82
|
+
path = @production.scene_directory(name)
|
|
83
|
+
scene_name = File.basename(path)
|
|
84
|
+
scene = load_props(:production => @production, :casting_director => casting_director, :path => path, :name => scene_name)
|
|
72
85
|
|
|
73
|
-
|
|
86
|
+
styles = load_styles(scene)
|
|
87
|
+
merge_with_root_styles(styles)
|
|
88
|
+
scene.styles = styles
|
|
74
89
|
|
|
75
90
|
stage.open(scene)
|
|
91
|
+
return scene
|
|
76
92
|
end
|
|
77
93
|
|
|
78
94
|
# Loads the 'stages.rb' file and configures all the Stages in the Production.
|
|
79
95
|
#
|
|
80
96
|
def load_stages
|
|
81
|
-
|
|
97
|
+
stages_file = @production.stages_file
|
|
98
|
+
content = IO.read(stages_file)
|
|
82
99
|
stages = Limelight.build_stages(@theater) do
|
|
83
100
|
begin
|
|
84
101
|
eval content
|
|
85
102
|
rescue Exception => e
|
|
86
|
-
raise BuildException.new(
|
|
103
|
+
raise DSL::BuildException.new(stages_file, content, e)
|
|
87
104
|
end
|
|
88
105
|
end
|
|
89
106
|
return stages
|
|
@@ -91,33 +108,34 @@ module Limelight
|
|
|
91
108
|
|
|
92
109
|
# Loads of the 'props.rb' file for a particular Scene and creates all the Prop objects and Scene.
|
|
93
110
|
#
|
|
94
|
-
def load_props(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
111
|
+
def load_props(options = {})
|
|
112
|
+
scene = Scene.new(options)
|
|
113
|
+
if File.exists?(scene.props_file)
|
|
114
|
+
content = IO.read(scene.props_file)
|
|
115
|
+
options[:build_loader] = @production.root
|
|
116
|
+
return Limelight.build_scene(scene, options) do
|
|
117
|
+
begin
|
|
118
|
+
eval content
|
|
119
|
+
rescue Exception => e
|
|
120
|
+
raise DSL::BuildException.new(scene.props_file, content, e)
|
|
121
|
+
end
|
|
104
122
|
end
|
|
123
|
+
else
|
|
124
|
+
return scene
|
|
105
125
|
end
|
|
106
126
|
end
|
|
107
127
|
|
|
108
128
|
# Loads the specified 'styles.rb' file and created a Hash of Styles.
|
|
109
129
|
#
|
|
110
|
-
def load_styles(
|
|
130
|
+
def load_styles(context)
|
|
111
131
|
styles = builtin_styles
|
|
112
|
-
return styles if
|
|
113
|
-
|
|
114
|
-
return styles if not @loader.exists?(filename)
|
|
115
|
-
content = @loader.load(filename)
|
|
132
|
+
return styles if not File.exists?(context.styles_file)
|
|
133
|
+
content = IO.read(context.styles_file)
|
|
116
134
|
return Limelight.build_styles(styles) do
|
|
117
135
|
begin
|
|
118
136
|
eval content
|
|
119
137
|
rescue Exception => e
|
|
120
|
-
raise BuildException.new(
|
|
138
|
+
raise DSL::BuildException.new(context.styles_file, content, e)
|
|
121
139
|
end
|
|
122
140
|
end
|
|
123
141
|
end
|
|
@@ -125,49 +143,39 @@ module Limelight
|
|
|
125
143
|
# Loads the 'production.rb' file if it exists and configures the Production.
|
|
126
144
|
#
|
|
127
145
|
def establish_production
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
146
|
+
@production.producer = self
|
|
147
|
+
@production.theater = @theater
|
|
148
|
+
|
|
149
|
+
if @production.root.exists?("production.rb")
|
|
150
|
+
content = @production.root.load("production.rb")
|
|
151
|
+
@production = Limelight.build_production(@production) do
|
|
132
152
|
begin
|
|
133
153
|
eval content
|
|
134
154
|
rescue Exception => e
|
|
135
|
-
raise BuildException.new("production.rb", content, e)
|
|
155
|
+
raise DSL::BuildException.new("production.rb", content, e)
|
|
136
156
|
end
|
|
137
157
|
end
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
end
|
|
158
|
+
end
|
|
159
|
+
|
|
141
160
|
end
|
|
142
161
|
|
|
143
162
|
# A production with multiple Scenes may have a 'styles.rb' file in the root directory. This is called the
|
|
144
163
|
# root_style. This method loads the root_styles, if they haven't already been loaded, and returns them.
|
|
145
164
|
#
|
|
146
165
|
def root_styles
|
|
147
|
-
return @root_syles if @root_syles
|
|
148
|
-
if
|
|
149
|
-
@root_styles = load_styles(
|
|
166
|
+
return @root_syles if @root_syles
|
|
167
|
+
if File.exists?(@production.styles_file)
|
|
168
|
+
@root_styles = load_styles(@production)
|
|
150
169
|
else
|
|
151
170
|
@root_styles = {}
|
|
152
171
|
end
|
|
153
172
|
return @root_styles
|
|
154
173
|
end
|
|
155
|
-
|
|
156
|
-
private ###############################################
|
|
157
|
-
|
|
158
|
-
def merge_with_root_styles(styles)
|
|
159
|
-
root_styles.each_pair do |key, value|
|
|
160
|
-
styles[key] = value if !styles.has_key?(key)
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
def unpack_production(production_name)
|
|
165
|
-
packer = Limelight::Util::Packer.new()
|
|
166
|
-
return packer.unpack(production_name)
|
|
167
|
-
end
|
|
168
174
|
|
|
175
|
+
# Returns a hash of all the built-in Limglight Styles
|
|
176
|
+
#
|
|
169
177
|
def builtin_styles
|
|
170
|
-
return @builtin_styles if @builtin_styles
|
|
178
|
+
return @builtin_styles.dup if @builtin_styles
|
|
171
179
|
builtin_styles_file = File.join($LIMELIGHT_LIB, "limelight", "builtin", "styles.rb")
|
|
172
180
|
content = IO.read(builtin_styles_file)
|
|
173
181
|
@builtin_styles = Limelight.build_styles do
|
|
@@ -177,9 +185,22 @@ module Limelight
|
|
|
177
185
|
raise BuildException.new(filename, content, e)
|
|
178
186
|
end
|
|
179
187
|
end
|
|
180
|
-
return @builtin_styles
|
|
188
|
+
return @builtin_styles.dup
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
private ###############################################
|
|
192
|
+
|
|
193
|
+
def merge_with_root_styles(styles)
|
|
194
|
+
root_styles.each_pair do |key, value|
|
|
195
|
+
styles[key] = value if !styles.has_key?(key)
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def unpack_production(production_name)
|
|
200
|
+
packer = Limelight::Util::Packer.new()
|
|
201
|
+
return packer.unpack(production_name)
|
|
181
202
|
end
|
|
182
203
|
|
|
183
204
|
end
|
|
184
|
-
|
|
205
|
+
|
|
185
206
|
end
|