jsduck 4.0.1 → 4.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +14 -0
- data/esprima/esprima.js +210 -85
- data/jsduck.gemspec +3 -3
- data/lib/jsduck/accessors.rb +10 -8
- data/lib/jsduck/aggregator.rb +7 -7
- data/lib/jsduck/app.rb +24 -164
- data/lib/jsduck/app_data.rb +2 -4
- data/lib/jsduck/assets.rb +5 -2
- data/lib/jsduck/ast.rb +9 -4
- data/lib/jsduck/batch_formatter.rb +54 -0
- data/lib/jsduck/batch_parser.rb +106 -0
- data/lib/jsduck/categories.rb +5 -6
- data/lib/jsduck/class.rb +77 -239
- data/lib/jsduck/class_doc_expander.rb +0 -5
- data/lib/jsduck/class_formatter.rb +14 -10
- data/lib/jsduck/class_name.rb +23 -0
- data/lib/jsduck/class_writer.rb +9 -8
- data/lib/jsduck/doc_ast.rb +5 -6
- data/lib/jsduck/doc_formatter.rb +61 -272
- data/lib/jsduck/enum.rb +4 -4
- data/lib/jsduck/esprima.rb +10 -4
- data/lib/jsduck/examples.rb +5 -5
- data/lib/jsduck/export_writer.rb +62 -0
- data/lib/jsduck/exporter/app.rb +62 -0
- data/lib/jsduck/exporter/examples.rb +58 -0
- data/lib/jsduck/exporter/full.rb +60 -0
- data/lib/jsduck/file_categories.rb +7 -4
- data/lib/jsduck/function_ast.rb +99 -0
- data/lib/jsduck/grouped_asset.rb +27 -16
- data/lib/jsduck/guide_writer.rb +8 -7
- data/lib/jsduck/guides.rb +31 -29
- data/lib/jsduck/icons.rb +12 -1
- data/lib/jsduck/images.rb +3 -3
- data/lib/jsduck/importer.rb +7 -7
- data/lib/jsduck/index_html.rb +20 -6
- data/lib/jsduck/inherit_doc.rb +9 -12
- data/lib/jsduck/inline/example.rb +42 -0
- data/lib/jsduck/inline/img.rb +55 -0
- data/lib/jsduck/inline/link.rb +227 -0
- data/lib/jsduck/inline/video.rb +67 -0
- data/lib/jsduck/inline_examples.rb +7 -7
- data/lib/jsduck/js_parser.rb +5 -4
- data/lib/jsduck/lint.rb +14 -2
- data/lib/jsduck/logger.rb +5 -6
- data/lib/jsduck/members_index.rb +132 -0
- data/lib/jsduck/merger.rb +3 -9
- data/lib/jsduck/options.rb +39 -41
- data/lib/jsduck/override.rb +3 -7
- data/lib/jsduck/relations.rb +9 -9
- data/lib/jsduck/renderer.rb +3 -3
- data/lib/jsduck/return_values.rb +72 -0
- data/lib/jsduck/search_data.rb +16 -20
- data/lib/jsduck/shortener.rb +58 -0
- data/lib/jsduck/signature_renderer.rb +1 -2
- data/lib/jsduck/source/file.rb +98 -0
- data/lib/jsduck/source/file_parser.rb +72 -0
- data/lib/jsduck/source/writer.rb +89 -0
- data/lib/jsduck/tag/aside.rb +1 -1
- data/lib/jsduck/tag/since.rb +1 -1
- data/lib/jsduck/template_dir.rb +2 -2
- data/lib/jsduck/util/html.rb +27 -0
- data/lib/jsduck/util/io.rb +32 -0
- data/lib/jsduck/util/json.rb +60 -0
- data/lib/jsduck/util/null_object.rb +23 -0
- data/lib/jsduck/util/os.rb +14 -0
- data/lib/jsduck/util/parallel.rb +34 -0
- data/lib/jsduck/util/singleton.rb +35 -0
- data/lib/jsduck/util/stdout.rb +33 -0
- data/lib/jsduck/videos.rb +5 -5
- data/lib/jsduck/web_writer.rb +79 -0
- data/lib/jsduck/welcome.rb +6 -6
- data/spec/class_factory.rb +20 -0
- metadata +32 -20
- data/lib/jsduck/api_exporter.rb +0 -48
- data/lib/jsduck/app_exporter.rb +0 -60
- data/lib/jsduck/examples_exporter.rb +0 -56
- data/lib/jsduck/full_exporter.rb +0 -35
- data/lib/jsduck/html.rb +0 -25
- data/lib/jsduck/inline_img.rb +0 -53
- data/lib/jsduck/inline_video.rb +0 -58
- data/lib/jsduck/io.rb +0 -30
- data/lib/jsduck/json_duck.rb +0 -52
- data/lib/jsduck/lexer.rb +0 -251
- data/lib/jsduck/null_object.rb +0 -19
- data/lib/jsduck/os.rb +0 -11
- data/lib/jsduck/parallel_wrap.rb +0 -32
- data/lib/jsduck/source_file.rb +0 -97
- data/lib/jsduck/source_file_parser.rb +0 -70
- data/lib/jsduck/source_writer.rb +0 -87
- data/lib/jsduck/stats.rb +0 -103
- data/lib/jsduck/stdout.rb +0 -31
data/lib/jsduck/welcome.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require 'jsduck/null_object'
|
2
|
-
require 'jsduck/io'
|
1
|
+
require 'jsduck/util/null_object'
|
2
|
+
require 'jsduck/util/io'
|
3
3
|
|
4
4
|
module JsDuck
|
5
5
|
|
@@ -9,18 +9,18 @@ module JsDuck
|
|
9
9
|
if filename
|
10
10
|
Welcome.new(filename)
|
11
11
|
else
|
12
|
-
NullObject.new(:to_html => "")
|
12
|
+
Util::NullObject.new(:to_html => "")
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
# Parses welcome HTML file with content for welcome page.
|
17
17
|
def initialize(filename)
|
18
|
-
@html =
|
18
|
+
@html = Util::IO.read(filename)
|
19
19
|
end
|
20
20
|
|
21
21
|
# Returns the HTML
|
22
|
-
def to_html
|
23
|
-
"<div id='welcome-content' style='
|
22
|
+
def to_html(style="")
|
23
|
+
"<div id='welcome-content' style='#{style}'>#{@html}</div>"
|
24
24
|
end
|
25
25
|
|
26
26
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "jsduck/class"
|
2
|
+
|
3
|
+
# A helper for easy creation of classes in tests
|
4
|
+
#
|
5
|
+
# Allows simplified members hashes to be used.
|
6
|
+
module Helper
|
7
|
+
class ClassFactory
|
8
|
+
def self.create(cfg)
|
9
|
+
cfg[:members].each do |m|
|
10
|
+
m[:tagname] = :property unless m[:tagname]
|
11
|
+
m[:owner] = cfg[:name]
|
12
|
+
m[:meta] = {} unless m[:meta]
|
13
|
+
m[:meta][:static] = true if m[:static]
|
14
|
+
m[:id] = JsDuck::Class.member_id(m)
|
15
|
+
end
|
16
|
+
|
17
|
+
JsDuck::Class.new(cfg)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsduck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-09-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rdiscount
|
@@ -150,17 +150,18 @@ files:
|
|
150
150
|
- jsduck.gemspec
|
151
151
|
- lib/jsduck/accessors.rb
|
152
152
|
- lib/jsduck/aggregator.rb
|
153
|
-
- lib/jsduck/api_exporter.rb
|
154
153
|
- lib/jsduck/app.rb
|
155
154
|
- lib/jsduck/app_data.rb
|
156
|
-
- lib/jsduck/app_exporter.rb
|
157
155
|
- lib/jsduck/assets.rb
|
158
156
|
- lib/jsduck/ast.rb
|
159
157
|
- lib/jsduck/auto_categories.rb
|
158
|
+
- lib/jsduck/batch_formatter.rb
|
159
|
+
- lib/jsduck/batch_parser.rb
|
160
160
|
- lib/jsduck/categories.rb
|
161
161
|
- lib/jsduck/class.rb
|
162
162
|
- lib/jsduck/class_doc_expander.rb
|
163
163
|
- lib/jsduck/class_formatter.rb
|
164
|
+
- lib/jsduck/class_name.rb
|
164
165
|
- lib/jsduck/class_writer.rb
|
165
166
|
- lib/jsduck/css_lexer.rb
|
166
167
|
- lib/jsduck/css_parser.rb
|
@@ -172,48 +173,47 @@ files:
|
|
172
173
|
- lib/jsduck/esprima.rb
|
173
174
|
- lib/jsduck/evaluator.rb
|
174
175
|
- lib/jsduck/examples.rb
|
175
|
-
- lib/jsduck/
|
176
|
+
- lib/jsduck/export_writer.rb
|
177
|
+
- lib/jsduck/exporter/app.rb
|
178
|
+
- lib/jsduck/exporter/examples.rb
|
179
|
+
- lib/jsduck/exporter/full.rb
|
176
180
|
- lib/jsduck/file_categories.rb
|
177
|
-
- lib/jsduck/
|
181
|
+
- lib/jsduck/function_ast.rb
|
178
182
|
- lib/jsduck/grouped_asset.rb
|
179
183
|
- lib/jsduck/guide_writer.rb
|
180
184
|
- lib/jsduck/guides.rb
|
181
|
-
- lib/jsduck/html.rb
|
182
185
|
- lib/jsduck/icons.rb
|
183
186
|
- lib/jsduck/images.rb
|
184
187
|
- lib/jsduck/importer.rb
|
185
188
|
- lib/jsduck/index_html.rb
|
186
189
|
- lib/jsduck/inherit_doc.rb
|
190
|
+
- lib/jsduck/inline/example.rb
|
191
|
+
- lib/jsduck/inline/img.rb
|
192
|
+
- lib/jsduck/inline/link.rb
|
193
|
+
- lib/jsduck/inline/video.rb
|
187
194
|
- lib/jsduck/inline_examples.rb
|
188
|
-
- lib/jsduck/inline_img.rb
|
189
|
-
- lib/jsduck/inline_video.rb
|
190
|
-
- lib/jsduck/io.rb
|
191
195
|
- lib/jsduck/js_parser.rb
|
192
|
-
- lib/jsduck/json_duck.rb
|
193
|
-
- lib/jsduck/lexer.rb
|
194
196
|
- lib/jsduck/lint.rb
|
195
197
|
- lib/jsduck/logger.rb
|
198
|
+
- lib/jsduck/members_index.rb
|
196
199
|
- lib/jsduck/merger.rb
|
197
200
|
- lib/jsduck/meta_tag.rb
|
198
201
|
- lib/jsduck/meta_tag_loader.rb
|
199
202
|
- lib/jsduck/meta_tag_registry.rb
|
200
203
|
- lib/jsduck/meta_tag_renderer.rb
|
201
|
-
- lib/jsduck/null_object.rb
|
202
204
|
- lib/jsduck/option_parser.rb
|
203
205
|
- lib/jsduck/options.rb
|
204
|
-
- lib/jsduck/os.rb
|
205
206
|
- lib/jsduck/override.rb
|
206
|
-
- lib/jsduck/parallel_wrap.rb
|
207
207
|
- lib/jsduck/relations.rb
|
208
208
|
- lib/jsduck/renderer.rb
|
209
|
+
- lib/jsduck/return_values.rb
|
209
210
|
- lib/jsduck/search_data.rb
|
210
211
|
- lib/jsduck/serializer.rb
|
212
|
+
- lib/jsduck/shortener.rb
|
211
213
|
- lib/jsduck/signature_renderer.rb
|
212
|
-
- lib/jsduck/
|
213
|
-
- lib/jsduck/
|
214
|
-
- lib/jsduck/
|
215
|
-
- lib/jsduck/stats.rb
|
216
|
-
- lib/jsduck/stdout.rb
|
214
|
+
- lib/jsduck/source/file.rb
|
215
|
+
- lib/jsduck/source/file_parser.rb
|
216
|
+
- lib/jsduck/source/writer.rb
|
217
217
|
- lib/jsduck/tag/abstract.rb
|
218
218
|
- lib/jsduck/tag/aside.rb
|
219
219
|
- lib/jsduck/tag/author.rb
|
@@ -235,10 +235,22 @@ files:
|
|
235
235
|
- lib/jsduck/tag/template.rb
|
236
236
|
- lib/jsduck/template_dir.rb
|
237
237
|
- lib/jsduck/type_parser.rb
|
238
|
+
- lib/jsduck/util/html.rb
|
239
|
+
- lib/jsduck/util/io.rb
|
240
|
+
- lib/jsduck/util/json.rb
|
241
|
+
- lib/jsduck/util/null_object.rb
|
242
|
+
- lib/jsduck/util/os.rb
|
243
|
+
- lib/jsduck/util/parallel.rb
|
244
|
+
- lib/jsduck/util/singleton.rb
|
245
|
+
- lib/jsduck/util/stdout.rb
|
238
246
|
- lib/jsduck/videos.rb
|
247
|
+
- lib/jsduck/web_writer.rb
|
239
248
|
- lib/jsduck/welcome.rb
|
249
|
+
- spec/class_factory.rb
|
240
250
|
- template-min/README.md
|
251
|
+
- template-min/Mobile_Detect.php
|
241
252
|
- template-min/template.html
|
253
|
+
- template-min/index-template.html
|
242
254
|
- template-min/eg-iframe.html
|
243
255
|
- template-min/resources/images/component-m.png
|
244
256
|
- template-min/resources/images/expandcollapse.png
|
data/lib/jsduck/api_exporter.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'jsduck/json_duck'
|
2
|
-
require 'jsduck/class'
|
3
|
-
|
4
|
-
module JsDuck
|
5
|
-
|
6
|
-
# Exporter for simple JSON format listing only class name and names
|
7
|
-
# of all of its members.
|
8
|
-
#
|
9
|
-
# It produces the following structure:
|
10
|
-
#
|
11
|
-
# {
|
12
|
-
# :name => "Panel",
|
13
|
-
# :members => {
|
14
|
-
# :cfg => ["width", "height", "title"],
|
15
|
-
# :method => ["getWidth", "setWidth"],
|
16
|
-
# ...
|
17
|
-
# },
|
18
|
-
# :statics => { ... }
|
19
|
-
# }
|
20
|
-
#
|
21
|
-
class ApiExporter
|
22
|
-
def initialize(relations, opts)
|
23
|
-
# All params ignored, they're present to be compatible with
|
24
|
-
# other exporters.
|
25
|
-
end
|
26
|
-
|
27
|
-
# Returns hash of class name and member names
|
28
|
-
def export(cls)
|
29
|
-
{
|
30
|
-
:name => cls[:name],
|
31
|
-
:members => export_members(cls, :members),
|
32
|
-
:statics => export_members(cls, :statics),
|
33
|
-
}
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
def export_members(cls, context)
|
39
|
-
h = {}
|
40
|
-
Class.default_members_hash.each_key do |type|
|
41
|
-
h[type] = cls.members(type, context).map {|m| m[:name] }
|
42
|
-
end
|
43
|
-
h
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
data/lib/jsduck/app_exporter.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'jsduck/full_exporter'
|
2
|
-
require 'jsduck/renderer'
|
3
|
-
require 'jsduck/doc_formatter'
|
4
|
-
|
5
|
-
module JsDuck
|
6
|
-
|
7
|
-
# Exports data for Docs app.
|
8
|
-
class AppExporter < FullExporter
|
9
|
-
def initialize(relations, opts)
|
10
|
-
super(relations, opts)
|
11
|
-
@renderer = Renderer.new(opts)
|
12
|
-
end
|
13
|
-
|
14
|
-
# Returns compacted class data hash which contains an additional
|
15
|
-
# :html field with full HTML to show on class overview page.
|
16
|
-
def export(cls)
|
17
|
-
data = super(cls)
|
18
|
-
data[:html] = @renderer.render(data)
|
19
|
-
return compact(data)
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
# removes extra data from export
|
25
|
-
def compact(cls)
|
26
|
-
cls.delete(:doc)
|
27
|
-
cls[:members] = compact_members_group(cls[:members])
|
28
|
-
cls[:statics] = compact_members_group(cls[:statics])
|
29
|
-
cls[:files] = compact_files(cls[:files])
|
30
|
-
cls
|
31
|
-
end
|
32
|
-
|
33
|
-
def compact_members_group(group)
|
34
|
-
c_group = {}
|
35
|
-
group.each_pair do |type, members|
|
36
|
-
c_group[type] = members.map {|m| compact_member(m) }
|
37
|
-
end
|
38
|
-
c_group
|
39
|
-
end
|
40
|
-
|
41
|
-
def compact_member(m)
|
42
|
-
m_copy = {}
|
43
|
-
[:name, :tagname, :owner, :meta, :id].each do |key|
|
44
|
-
m_copy[key] = m[key]
|
45
|
-
end
|
46
|
-
m_copy
|
47
|
-
end
|
48
|
-
|
49
|
-
# Remove full path from filename for privacy considerations as the
|
50
|
-
# path can reveal information about the system where JSDuck was
|
51
|
-
# run. The docs app doesn't need to have this information.
|
52
|
-
def compact_files(files)
|
53
|
-
files.map do |f|
|
54
|
-
{:filename => File.basename(f[:filename]), :href => f[:href]}
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
require 'jsduck/inline_examples'
|
2
|
-
|
3
|
-
module JsDuck
|
4
|
-
|
5
|
-
# Exporter for inline examples.
|
6
|
-
#
|
7
|
-
# It produces the following structure:
|
8
|
-
#
|
9
|
-
# {
|
10
|
-
# :type => :class, # can also be :guide
|
11
|
-
# :name => "Panel",
|
12
|
-
# :examples => [
|
13
|
-
# {:code => "bla bla", :options => {}},
|
14
|
-
# {:code => "bla bla", :options => {"raw" => true}},
|
15
|
-
# ...
|
16
|
-
# ]
|
17
|
-
# }
|
18
|
-
#
|
19
|
-
class ExamplesExporter
|
20
|
-
def initialize(relations, opts)
|
21
|
-
# All params ignored, they're present to be compatible with
|
22
|
-
# other exporters.
|
23
|
-
@inline_examples = InlineExamples.new
|
24
|
-
end
|
25
|
-
|
26
|
-
# Returns hash of class name and inline examples
|
27
|
-
def export(cls)
|
28
|
-
examples = @inline_examples.extract(cls[:doc])
|
29
|
-
if examples.length > 0
|
30
|
-
{
|
31
|
-
:type => :class,
|
32
|
-
:name => cls[:name],
|
33
|
-
:examples => examples,
|
34
|
-
}
|
35
|
-
else
|
36
|
-
nil
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Returns hash of guide name and inline examples
|
41
|
-
def export_guide(guide)
|
42
|
-
examples = @inline_examples.extract(guide[:html] || "")
|
43
|
-
if examples.length > 0
|
44
|
-
{
|
45
|
-
:type => :guide,
|
46
|
-
:name => guide["name"],
|
47
|
-
:examples => examples,
|
48
|
-
}
|
49
|
-
else
|
50
|
-
nil
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
data/lib/jsduck/full_exporter.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'jsduck/class'
|
2
|
-
|
3
|
-
module JsDuck
|
4
|
-
|
5
|
-
# Exporter for all the class docs.
|
6
|
-
class FullExporter
|
7
|
-
def initialize(relations, opts)
|
8
|
-
@relations = relations
|
9
|
-
# opts parameter is here just for compatibility with other exporters
|
10
|
-
end
|
11
|
-
|
12
|
-
# Returns all data in Class object as hash.
|
13
|
-
def export(cls)
|
14
|
-
h = cls.to_hash
|
15
|
-
h[:members] = {}
|
16
|
-
Class.default_members_hash.each_key do |key|
|
17
|
-
h[:members][key] = cls.members(key)
|
18
|
-
h[:statics][key] = cls.members(key, :statics)
|
19
|
-
end
|
20
|
-
h[:component] = cls.inherits_from?("Ext.Component")
|
21
|
-
h[:superclasses] = cls.superclasses.collect {|c| c.full_name }
|
22
|
-
h[:subclasses] = @relations.subclasses(cls).collect {|c| c.full_name }
|
23
|
-
h[:mixedInto] = @relations.mixed_into(cls).collect {|c| c.full_name }
|
24
|
-
|
25
|
-
h[:mixins] = cls.deps(:mixins).collect {|c| c.full_name }
|
26
|
-
h[:parentMixins] = cls.parent_deps(:mixins).collect {|c| c.full_name }
|
27
|
-
h[:requires] = cls.deps(:requires).collect {|c| c.full_name }
|
28
|
-
h[:uses] = cls.deps(:uses).collect {|c| c.full_name }
|
29
|
-
|
30
|
-
h
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
data/lib/jsduck/html.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'cgi'
|
2
|
-
|
3
|
-
module JsDuck
|
4
|
-
|
5
|
-
# Helpers for dealing with HTML
|
6
|
-
class HTML
|
7
|
-
|
8
|
-
# Strips tags from HTML text
|
9
|
-
def self.strip_tags(html)
|
10
|
-
html.gsub(/<.*?>/, "")
|
11
|
-
end
|
12
|
-
|
13
|
-
# Escapes HTML, replacing < with < ...
|
14
|
-
def self.escape(html)
|
15
|
-
CGI.escapeHTML(html)
|
16
|
-
end
|
17
|
-
|
18
|
-
# Unescapes HTML, replacing < with < ...
|
19
|
-
def self.unescape(html)
|
20
|
-
CGI.unescapeHTML(html)
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
data/lib/jsduck/inline_img.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'jsduck/html'
|
2
|
-
require 'jsduck/logger'
|
3
|
-
|
4
|
-
module JsDuck
|
5
|
-
|
6
|
-
# Implementation of inline tag {@img}
|
7
|
-
class InlineImg
|
8
|
-
# Base path to prefix images from {@img} tags.
|
9
|
-
# Defaults to no prefix.
|
10
|
-
attr_accessor :base_path
|
11
|
-
|
12
|
-
# This will hold list of all image paths gathered from {@img} tags.
|
13
|
-
attr_accessor :images
|
14
|
-
|
15
|
-
def initialize(opts={})
|
16
|
-
@tpl = opts[:img_tpl] || '<img src="%u" alt="%a"/>'
|
17
|
-
|
18
|
-
@re = /\{@img\s+(\S*?)(?:\s+(.+?))?\}/m
|
19
|
-
|
20
|
-
@base_path = nil
|
21
|
-
@images = []
|
22
|
-
end
|
23
|
-
|
24
|
-
# Takes StringScanner instance.
|
25
|
-
#
|
26
|
-
# Looks for inline tag at the current scan pointer position, when
|
27
|
-
# found, moves scan pointer forward and performs the apporpriate
|
28
|
-
# replacement.
|
29
|
-
def replace(input)
|
30
|
-
if input.check(@re)
|
31
|
-
input.scan(@re).sub(@re) { apply_tpl($1, $2) }
|
32
|
-
else
|
33
|
-
false
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# applies the image template
|
38
|
-
def apply_tpl(url, alt_text)
|
39
|
-
@images << url
|
40
|
-
@tpl.gsub(/(%\w)/) do
|
41
|
-
case $1
|
42
|
-
when '%u'
|
43
|
-
@base_path ? (@base_path + "/" + url) : url
|
44
|
-
when '%a'
|
45
|
-
HTML.escape(alt_text||"")
|
46
|
-
else
|
47
|
-
$1
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|