rabbit 0.6.3 → 0.6.4

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/NEWS.en CHANGED
@@ -2,7 +2,93 @@
2
2
 
3
3
  = NEWS.en
4
4
 
5
- $Id: NEWS.en 1331 2009-12-16 13:09:53Z kou $
5
+ $Id: NEWS.en 1358 2010-01-29 14:01:18Z kou $
6
+
7
+ == Changes 0.6.4 from 0.6.3: 2009-12-16
8
+
9
+ Rabbit had been included in Debian official packages! [Youhei
10
+ SASAKI]
11
+
12
+ === Improvements
13
+
14
+ * Added --keep-above option: Rabbit is always shown top of
15
+ windows.
16
+ * Added --source-filename option that adds source link to
17
+ output HTML.
18
+ * Added a directory in source file into theme load path.
19
+ * Supported a single theme file in the same directory of
20
+ source file. [zunda]
21
+ * Improved PDF file detection.
22
+
23
+ ==== Theme
24
+
25
+ * Added:
26
+ * per-slide-background-image:
27
+ Uses background image per slide. A background
28
+ image is specified by slide property:
29
+
30
+ = target slide
31
+
32
+ ...
33
+
34
+ == properties
35
+
36
+ : background-image
37
+ my-picture.png
38
+ : background-image-ralative-height
39
+ 95
40
+
41
+ Supported options are same as image options in slide.
42
+ Options name should be started with "background-image-".
43
+
44
+ e.g.: "background-image-relative-height" for
45
+ "relative-height" option.
46
+
47
+ * per-slide-background-color:
48
+ Uses background color per slide. A background color is
49
+ specified by slide property:
50
+
51
+ = target slide
52
+
53
+ ...
54
+
55
+ == properties
56
+
57
+ : background-color
58
+ black
59
+
60
+ Color can be specified as color name, "black", or RGB
61
+ values "#RRGGBBAA".
62
+
63
+ * Changed:
64
+ * default-slide:
65
+ Supports title foreground color and shadow color
66
+ change per slide. They are specified by slide
67
+ property:
68
+
69
+ = target slide
70
+
71
+ ...
72
+
73
+ == properties
74
+
75
+ : headline-color
76
+ red
77
+ : headline-shadow-color
78
+ gray
79
+
80
+ === Fixes
81
+
82
+ * Fixed a bug that empty title with
83
+ @lightning_talk_as_large_as_possible = true crashes.
84
+ [kdmsnr]
85
+ * Added workaround for Ruby 1.8.7 p249.
86
+
87
+ === Thanks
88
+
89
+ * zunda
90
+ * kdmsnr
91
+ * Youhei SASAKI
6
92
 
7
93
  == Changes 0.6.3 from 0.6.2: 2009-12-16
8
94
 
data/NEWS.ja CHANGED
@@ -2,7 +2,93 @@
2
2
 
3
3
  = NEWS.ja
4
4
 
5
- $Id: NEWS.ja 1330 2009-12-16 13:07:47Z kou $
5
+ $Id: NEWS.ja 1358 2010-01-29 14:01:18Z kou $
6
+
7
+ == 0.6.3から0.6.4の変更点: 2010-01-29
8
+
9
+ Debianオフィシャルパッケージになりました![佐々木さん]
10
+
11
+ === 改良
12
+
13
+ * 常にウィンドウを最全面に表示する--keep-aboveオプションの追加。
14
+ * HTML出力時にソースへのリンクを追加する--source-filename
15
+ オプションの追加。
16
+ * ソースと同じディレクトリがテーマの検索パスに含まれるよう
17
+ になった。
18
+ * ソースと同じディレクトリにテーマを置けるようになった。
19
+ [zundaさん]
20
+ * PDFファイルの検出率向上。
21
+
22
+ ==== テーマ
23
+
24
+ * 追加
25
+ * per-slide-background-image:
26
+ スライド毎に背景画像を指定できるようになります。画像は
27
+ スライドプロパティで指定します。
28
+
29
+ = 対象となるスライド
30
+
31
+ ...
32
+
33
+ == プロパティ
34
+
35
+ : background-image
36
+ my-picture.png
37
+ : background-image-ralative-height
38
+ 95
39
+
40
+ スライド内で画像を指定する時と同じオプションを指定でき
41
+ ます。オプションを指定する場合はプロパティ名を
42
+ 「background-image-」からはじめてください。
43
+
44
+ 例えば、「relative-height」オプションを指定する場合は
45
+ 「background-image-relative-height」スライドオプション
46
+ になります。
47
+
48
+ * per-slide-background-color:
49
+ スライド毎に背景色を指定できるようになります。色は
50
+ スライドプロパティで指定します。
51
+
52
+ = 対象となるスライド
53
+
54
+ ...
55
+
56
+ == プロパティ
57
+
58
+ : background-color
59
+ black
60
+
61
+ 色はテーマ内での指定方法と同様に「black」など色の名前
62
+ でも「#RRGGBBAA」というようにRGB値でも指定できます。
63
+
64
+ * 変更
65
+ * default-slide:
66
+ スライドプロパティでスライド毎にタイトルの前景色と影の
67
+ 色を変更できるようになりました。
68
+
69
+ = 対象となるスライド
70
+
71
+ ...
72
+
73
+ == プロパティ
74
+
75
+ : headline-color
76
+ red
77
+ : headline-shadow-color
78
+ gray
79
+
80
+ === 修正
81
+
82
+ * タイトルがないときに
83
+ @lightning_talk_as_large_as_possible = trueを指定すると
84
+ 落ちる問題を修正。[kdmsnrさん]
85
+ * Ruby 1.8.7 p249で動かない問題を修正。
86
+
87
+ === 感謝
88
+
89
+ * zundaさん
90
+ * kdmsnrさん
91
+ * 佐々木さん
6
92
 
7
93
  == 0.6.2から0.6.3の変更点: 2009-12-16
8
94
 
data/README.en CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  = README.en
4
4
 
5
- $Id: README.en 1309 2009-10-17 09:18:27Z kou $
5
+ $Id: README.en 1357 2010-01-29 13:50:12Z kou $
6
6
 
7
7
  == Name
8
8
 
@@ -642,6 +642,7 @@ sample/theme-bench-en.rab.
642
642
  Rabbit searches for themes by using ruby's $LOAD_PATH. If you make
643
643
  a theme, place it into
644
644
  ((|PATH_OF_INCLUDED_IN_$LOAD_PATH/rabbit/theme/THEME_NAME/THEME_NAME.rb|))
645
+ or ((|DIRECTORY_OF_SOURCE_FILE/THEME_NAME.rb|)).
645
646
 
646
647
  === How do I write a theme?
647
648
 
@@ -836,3 +837,4 @@ page from XXX.rd.
836
837
  * Kazuhiro NISHIYAMA: Reported a bug.
837
838
  * Masaki Suketa: Reported bugs related Ruby 1.9.
838
839
  * kdmsnr: Reported a bug.
840
+ * Youhei SASAKI: The official Debian package maintainer.
data/README.ja CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  = README.ja
4
4
 
5
- $Id: README.ja 1309 2009-10-17 09:18:27Z kou $
5
+ $Id: README.ja 1355 2010-01-29 13:48:57Z kou $
6
6
 
7
7
  == 名前
8
8
 
@@ -661,8 +661,9 @@ inline verbatimとして記述します.詳しくはsample/rabbit.rdを見
661
661
  === 置き場所
662
662
 
663
663
  テーマはrubyの$LOAD_PATHから検索されます.新しくテーマを作成
664
- した場合は((|$LOAD_PATHに含まれているパス/rabbit/theme/テー
665
- マ名/テーマ名.rb|))に置いてください.
664
+ した場合は((|$LOAD_PATHに含まれているパス/rabbit/theme/テーマ
665
+ 名/テーマ名.rb|))あるいは((|ソースがあるディレクトリ/テーマ
666
+ 名.rb|))に置いてください.
666
667
 
667
668
  === 書き方
668
669
 
@@ -871,3 +872,4 @@ XXX.rdから1ページに8枚のスライドが入ったPDF(XXX_multi.pdf)
871
872
  * 西山さん: バグレポートしてくれました。
872
873
  * 助田さん: Ruby 1.9関連のバグを報告してくれました。
873
874
  * kdmsnrさん: バグレポートしてくれました。
875
+ * 佐々木さん: Debianパッケージのメンテナンスをしてくれます。
data/bin/rabbit CHANGED
@@ -63,6 +63,8 @@ def parse_args(args=ARGV, logger=nil)
63
63
  options.migemo_dictionary_name = "migemo-dict"
64
64
  options.use_gl = false
65
65
  options.show_native_window_id = false
66
+ options.keep_above = false
67
+ options.source_filename = nil
66
68
 
67
69
 
68
70
  opts.banner = "#{opts.banner} [SOURCE_INFOS]"
@@ -209,6 +211,12 @@ def parse_args(args=ARGV, logger=nil)
209
211
  options.rss_base_uri = uri
210
212
  end
211
213
 
214
+ opts.on("--source-filename=FILENAME",
215
+ _("Specify source filenam as [FILENAME]."),
216
+ "(#{options.source_filename})") do |filename|
217
+ options.source_filename = filename
218
+ end
219
+
212
220
  opts.category _("Print")
213
221
 
214
222
  opts.on("-p", "--print",
@@ -495,6 +503,14 @@ def parse_args(args=ARGV, logger=nil)
495
503
  options.use_gl = bool
496
504
  end
497
505
 
506
+ opts.category _("Display")
507
+
508
+ opts.on("--[no-]keep-above",
509
+ _("Specify whether to keep above window."),
510
+ "(#{options.keep_above})") do |bool|
511
+ options.keep_above = bool
512
+ end
513
+
498
514
  opts.category _("Others")
499
515
 
500
516
  opts.on("--[no-]show-native-window-id",
@@ -557,6 +573,7 @@ def setup_image_info(target, options)
557
573
  target.output_html = options.output_html
558
574
  target.output_index_html = options.output_index_html
559
575
  target.rss_base_uri = options.rss_base_uri
576
+ target.source_filename = options.source_filename
560
577
  end
561
578
 
562
579
  def setup_print_info(target, options)
@@ -684,6 +701,7 @@ def do_display(options, logger)
684
701
  canvas = make_canvas(options, logger, Rabbit::Renderer::Display)
685
702
  frame = Rabbit::Frame.new(logger, canvas)
686
703
  frame.geometry = options.geometry
704
+ frame.force_keep_above = options.keep_above
687
705
  setup_paper_size(canvas, options)
688
706
  setup_image_info(canvas, options)
689
707
  setup_print_info(canvas, options)
data/lib/rabbit/canvas.rb CHANGED
@@ -130,6 +130,7 @@ module Rabbit
130
130
 
131
131
  attr_accessor :saved_image_type, :rss_base_uri
132
132
  attr_accessor :output_html, :output_index_html
133
+ attr_accessor :source_filename
133
134
  attr_accessor :migemo_dictionary_search_path, :migemo_dictionary_name
134
135
  attr_accessor :font_resolution_ratio
135
136
 
@@ -145,7 +146,8 @@ module Rabbit
145
146
  @apply_theme_request_queue = []
146
147
  @auto_redraw_timer = nil
147
148
  @output_html = false
148
- @rss_base_uri = true
149
+ @rss_base_uri = nil
150
+ @source_filename = nil
149
151
  @migemo_dictionary_search_path = []
150
152
  @migemo_dictionary_name = nil
151
153
  @limit_time = nil
@@ -387,6 +389,7 @@ module Rabbit
387
389
  @output_index_html,
388
390
  @rss_base_uri)
389
391
  generator.pdf_filename = filename if /\.pdf/i =~ filename.to_s
392
+ generator.source_filename = @source_filename
390
393
  generator.save
391
394
  end
392
395
  end
@@ -459,7 +459,7 @@ module Rabbit
459
459
 
460
460
  def _draw(canvas, x, y, w, h, simulation)
461
461
  around_draw_procs = @around_draw_procs.dup
462
- around_draw_procs.concat(slide.waited_draw_procs(self))
462
+ around_draw_procs.concat(slide.waited_draw_procs(self)) if slide
463
463
  _draw_rec(canvas, x, y, w, h, simulation, around_draw_procs)
464
464
  end
465
465
 
@@ -112,6 +112,7 @@ module Rabbit
112
112
  private
113
113
  def setup_draw_parameters(prop)
114
114
  @draw_parameters = {}
115
+
115
116
  @draw_parameters[:reflect] = {} if true_value?(prop["reflect"])
116
117
  [:ratio, :alpha].each do |key|
117
118
  name = "reflect_#{key}"
@@ -120,6 +121,9 @@ module Rabbit
120
121
  @draw_parameters[:reflect] ||= {}
121
122
  @draw_parameters[:reflect][key] = Float(value)
122
123
  end
124
+
125
+ alpha = prop["alpha"]
126
+ @draw_parameters[:alpha] = Float(alpha) if alpha
123
127
  end
124
128
 
125
129
  def draw_image(canvas, x, y, w, h, simulation)
@@ -180,6 +180,18 @@ module Rabbit
180
180
  @original_width, @original_height = layout.pixel_size
181
181
  @first_line_width = @original_width / layout.line_count
182
182
  @first_line_height = @original_height / layout.line_count
183
+ setup_layout(layout, w)
184
+ width, height = layout.pixel_size
185
+ if layout.width != -1 and
186
+ (layout.alignment == Pango::Layout::ALIGN_CENTER or
187
+ layout.alignment == Pango::Layout::ALIGN_RIGHT)
188
+ width = layout.width / Pango::SCALE
189
+ end
190
+ @width, @height = width, height
191
+ @layout = layout
192
+ end
193
+
194
+ def setup_layout(layout, w)
183
195
  if @wrap_mode
184
196
  layout.set_width(w * Pango::SCALE)
185
197
  layout.set_wrap(@wrap_mode)
@@ -191,16 +203,8 @@ module Rabbit
191
203
  layout.set_spacing(@spacing)
192
204
  layout.justify = @justify
193
205
  layout.context_changed
194
- width, height = layout.pixel_size
195
- if layout.width != -1 and
196
- (layout.alignment == Pango::Layout::ALIGN_CENTER or
197
- layout.alignment == Pango::Layout::ALIGN_RIGHT)
198
- width = layout.width / Pango::SCALE
199
- end
200
- @width, @height = width, height
201
- @layout = layout
202
206
  end
203
-
207
+
204
208
  def markup(str)
205
209
  t = str
206
210
  @prop.each do |name, formatter|
@@ -234,6 +238,19 @@ module Rabbit
234
238
  end
235
239
 
236
240
  def draw_layout(canvas, x, y)
241
+ shadow_color = self["shadow-color"]
242
+ if shadow_color
243
+ shadow_foreground = Format::Foreground.new(shadow_color)
244
+ shadow_text = markup(shadow_foreground.format(text))
245
+ shadow_layout = canvas.make_layout(shadow_text)
246
+ setup_layout(shadow_layout, @layout.width / Pango::SCALE)
247
+ line_height = shadow_layout.pixel_size[1] / shadow_layout.line_count
248
+ shadow_x = self["shadow-x"] || (line_height * 0.08)
249
+ shadow_y = self["shadow-y"] || (line_height * 0.06)
250
+ canvas.draw_layout(shadow_layout, x + shadow_x, y + shadow_y,
251
+ shadow_color)
252
+ end
253
+
237
254
  color = prop_get("foreground")
238
255
  color = color.value if color
239
256
  canvas.draw_layout(@layout, x, y, color)
@@ -241,6 +258,7 @@ module Rabbit
241
258
 
242
259
  def dynamic_font_size_computation(proc_name, compute_max_size,
243
260
  &make_params)
261
+ return if text.empty?
244
262
  computed = false
245
263
  min_width = nil
246
264
  add_pre_draw_proc(proc_name) do |canvas, x, y, w, h, simulation|
data/lib/rabbit/frame.rb CHANGED
@@ -27,12 +27,13 @@ module Rabbit
27
27
  def_delegators(:@canvas, :rss_base_uri=, :use_gl?, :use_gl=)
28
28
 
29
29
  attr_reader :window, :logger
30
- attr_accessor :geometry
30
+ attr_accessor :geometry, :force_keep_above
31
31
 
32
32
  def initialize(logger, canvas)
33
33
  @logger = logger
34
34
  @canvas = canvas
35
35
  @geometry = nil
36
+ @force_keep_above = nil
36
37
  end
37
38
 
38
39
  def destroyed?
@@ -101,7 +102,11 @@ module Rabbit
101
102
  @fullscreen = false
102
103
  @iconify = false
103
104
  @main_window = main_window
104
- @window.keep_above = true unless @main_window
105
+ if @main_window
106
+ @window.keep_above = @force_keep_above unless @force_keep_above.nil?
107
+ else
108
+ @window.keep_above = true
109
+ end
105
110
  @window.show
106
111
  @canvas.post_init_gui
107
112
  end
@@ -131,6 +136,15 @@ module Rabbit
131
136
  set_window_signal_destroy
132
137
  end
133
138
 
139
+ def update_keep_above(keep_above=nil)
140
+ if @main_window
141
+ keep_above = @force_keep_above unless @force_keep_above.nil?
142
+ @window.keep_above = keep_above unless keep_above.nil?
143
+ else
144
+ @window.keep_above = true
145
+ end
146
+ end
147
+
134
148
  def set_window_signal_window_state_event
135
149
  @window.signal_connect("window_state_event") do |widget, event|
136
150
  if event.changed_mask.fullscreen?
@@ -139,7 +153,7 @@ module Rabbit
139
153
  @window.keep_above = true
140
154
  @canvas.fullscreened
141
155
  else
142
- @window.keep_above = !@main_window
156
+ update_keep_above(false)
143
157
  @canvas.unfullscreened
144
158
  end
145
159
  @window.present
@@ -235,6 +249,7 @@ module Rabbit
235
249
  def_null_methods(:icon, :icon=, :set_icon)
236
250
  def_null_methods(:icon_list, :icon_list=, :set_icon_list)
237
251
  def_null_methods(:update_title, :geometry, :geometry=)
252
+ def_null_methods(:force_keep_above, :force_keep_above=)
238
253
 
239
254
  def_null_methods(:fullscreen?, :quit)
240
255
 
@@ -23,7 +23,7 @@ module Rabbit
23
23
  erb = File.open(template_path) {|f| ERB.new(f.read, nil, "-")}
24
24
  erb.def_method(self, "to_html", template_path)
25
25
 
26
- attr_accessor :pdf_filename
26
+ attr_accessor :pdf_filename, :source_filename
27
27
  def initialize(canvas, base_name, image_type,
28
28
  output_html, output_index_html, rss_base_uri)
29
29
  @canvas = canvas
@@ -38,6 +38,7 @@ module Rabbit
38
38
  @output_html = output_html
39
39
  @output_index_html = output_index_html
40
40
  @pdf_filename = nil
41
+ @source_filename = nil
41
42
  FileUtils.mkdir_p(to_filename_encoding(@base_dir))
42
43
  end
43
44
 
@@ -292,7 +293,7 @@ module Rabbit
292
293
  img
293
294
  else
294
295
  href = next_href(slide_number)
295
- "<a href=\"#{href}\">\n#{img}\n</a>"
296
+ "<a href=\"#{href}\">#{img}</a>"
296
297
  end
297
298
  end
298
299
 
@@ -397,6 +398,10 @@ module Rabbit
397
398
  result << HTML.a_link("<a href=\"#{h(@pdf_filename)}\">",
398
399
  h(_("PDF")), false)
399
400
  end
401
+ if @source_filename
402
+ result << HTML.a_link("<a href=\"#{h(@source_filename)}\">",
403
+ h(_("Source")), false)
404
+ end
400
405
  unless result.empty?
401
406
  result = "<div class=\"navi\">\n#{result}\n</div>"
402
407
  end
@@ -11,7 +11,7 @@ module Rabbit
11
11
  unshift_loader(self)
12
12
  class << self
13
13
  def match?(source)
14
- /\A%PDF-1\.\d\z/ =~ source.read.split(/\r?\n/, 2)[0]
14
+ /\A%PDF-1\.\d\s/m =~ source.read
15
15
  end
16
16
  end
17
17
 
data/lib/rabbit/rabbit.rb CHANGED
@@ -8,7 +8,7 @@ require "rabbit/gettext"
8
8
 
9
9
  module Rabbit
10
10
 
11
- VERSION = "0.6.3"
11
+ VERSION = "0.6.4"
12
12
 
13
13
  TMP_DIR_NAME = ".tmp"
14
14
 
@@ -300,8 +300,12 @@ module Rabbit
300
300
 
301
301
  def draw_slide(slide, simulation, &block)
302
302
  super do |*args|
303
- block.call(*args)
304
- magnify {block.call(*args)} unless simulation
303
+ # block.call(*args)
304
+ # magnify {block.call(*args)} unless simulation
305
+ ## the below codes are workaround for
306
+ ## http://redmine.ruby-lang.org/issues/show/2600
307
+ yield(*args)
308
+ magnify {yield(*args)} unless simulation
305
309
  end
306
310
  end
307
311
 
@@ -608,6 +608,18 @@ module Rabbit
608
608
  def entity(key)
609
609
  Parser::Ext::Entity::TABLE[key]
610
610
  end
611
+
612
+ def base_directory
613
+ canvas.full_path(".")
614
+ end
615
+
616
+ def theme_load_path
617
+ super + [base_directory].compact
618
+ end
619
+
620
+ def image_load_path
621
+ super + [base_directory].compact
622
+ end
611
623
  end
612
624
  end
613
625
  end
@@ -3,11 +3,10 @@
3
3
  match(Slide) do |slides|
4
4
  slides.each do |slide|
5
5
  slide.margin_set(@margin_top, @margin_right, @margin_bottom, @margin_left)
6
- slide.headline.hide if slide.hide_title?
7
6
  end
8
7
  end
9
8
 
10
- match(Slide, HeadLine) do
9
+ match(Slide, HeadLine) do |headlines|
11
10
  name = "head-line"
12
11
 
13
12
  delete_post_draw_proc_by_name(name)
@@ -21,6 +20,15 @@ match(Slide, HeadLine) do
21
20
  end
22
21
  [x, y, w, h]
23
22
  end
23
+
24
+ headlines.each do |headline|
25
+ slide = headline.slide
26
+ headline.hide if slide.hide_title?
27
+ color = slide["headline-color"]
28
+ headline.prop_set("foreground", color) if color
29
+ shadow_color = slide["headline-shadow-color"]
30
+ headline["shadow-color"] = shadow_color if shadow_color
31
+ end
24
32
  end
25
33
 
26
34
  match(Slide, Body) do |bodies|
@@ -47,11 +47,10 @@ module Rabbit
47
47
  attr_reader :dependencies, :parameters
48
48
  attr_accessor :logger
49
49
 
50
- def initialize(theme_dir, type)
50
+ def initialize(theme_dir, name)
51
51
  @logger = nil
52
52
  @theme_dir = theme_dir
53
- @type = type
54
- @name = File.basename(@theme_dir)
53
+ @name = name
55
54
  @title = @name
56
55
  @category = nil
57
56
  @abstract = nil
@@ -68,7 +67,7 @@ module Rabbit
68
67
  def property_editable?
69
68
  File.writable?(property_file)
70
69
  end
71
-
70
+
72
71
  def theme_file
73
72
  File.join(@theme_dir, "#{@name}.rb")
74
73
  end
@@ -80,7 +79,7 @@ module Rabbit
80
79
  def have_file?(target)
81
80
  File.exist?(full_path(target))
82
81
  end
83
-
82
+
84
83
  def full_path(target)
85
84
  File.join(@theme_dir, target)
86
85
  end
@@ -90,7 +89,7 @@ module Rabbit
90
89
  end
91
90
 
92
91
  def image_theme?
93
- @type == :image
92
+ false
94
93
  end
95
94
 
96
95
  def files
@@ -104,7 +103,7 @@ module Rabbit
104
103
  def property_file
105
104
  File.join(@theme_dir, "#{PROPERTY_BASE_NAME}.rb")
106
105
  end
107
-
106
+
108
107
  def parse_property
109
108
  file = property_file
110
109
  if File.exist?(file)
@@ -117,5 +116,39 @@ module Rabbit
117
116
  end
118
117
  end
119
118
  end
119
+
120
+ class DirectoryEntry < Entry
121
+ def initialize(theme_dir)
122
+ super(theme_dir, File.basename(theme_dir))
123
+ end
124
+ end
125
+
126
+ class ImageDirectoryEntry < DirectoryEntry
127
+ def image_theme?
128
+ true
129
+ end
130
+ end
131
+
132
+ class SingleFileEntry < Entry
133
+ def initialize(theme_dir, name)
134
+ super(theme_dir, name)
135
+ end
136
+
137
+ def property_editable?
138
+ false
139
+ end
140
+
141
+ def files
142
+ []
143
+ end
144
+
145
+ def have_file?(target)
146
+ name == target
147
+ end
148
+
149
+ private
150
+ def parse_property
151
+ end
152
+ end
120
153
  end
121
154
  end