distil 0.8.4 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/distil.gemspec +5 -2
- data/lib/configurable.rb +36 -0
- data/lib/file-set.rb +17 -10
- data/lib/filters/css-filter.rb +1 -1
- data/lib/filters/jsl-dependency-filter.rb +2 -2
- data/lib/project.rb +3 -3
- data/lib/source-file.rb +4 -9
- data/lib/target.rb +19 -6
- data/lib/task.rb +24 -15
- data/lib/tasks/copy-task.rb +0 -4
- data/lib/tasks/css-task.rb +1 -7
- data/lib/tasks/javascript-task.rb +84 -8
- data/lib/tasks/multiple-output-task.rb +10 -10
- data/lib/tasks/output-task.rb +10 -7
- data/lib/tasks/single-output-task.rb +26 -18
- data/lib/tasks/test-task.rb +0 -4
- data/vendor/jsdoc-extras/templates/classlist/all-classes.tmpl +7 -0
- data/vendor/jsdoc-extras/templates/classlist/publish.js +43 -0
- data/vendor/jsdoc-toolkit/app/lib/JSDOC/JsPlate.js +0 -2
- data/vendor/jsdoc-toolkit/app/lib/JSDOC/Parser.js +3 -1
- data/vendor/jsdoc-toolkit/app/lib/JSDOC/SymbolSet.js +4 -2
- data/vendor/jsdoc-toolkit/app/lib/JSDOC/Walker.js +10 -2
- data/vendor/jsdoc-toolkit/app/lib/JSDOC.js +4 -2
- data/vendor/jsdoc-toolkit/app/test/multi_methods.js +25 -0
- metadata +5 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.10.0
|
data/distil.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{distil}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.10.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jeff Watkins"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-03-26}
|
13
13
|
s.default_executable = %q{distil}
|
14
14
|
s.description = %q{A build tool for Javascript and CSS that takes advantage of best-of-breed helper applications Javascript Lint and JSDoc Toolkit}
|
15
15
|
s.executables = ["distil"]
|
@@ -54,6 +54,8 @@ Gem::Specification.new do |s|
|
|
54
54
|
"vendor/extconf.rb",
|
55
55
|
"vendor/jsdoc-extras/plugins/distil-plugin.js",
|
56
56
|
"vendor/jsdoc-extras/plugins/interface-plugin.js",
|
57
|
+
"vendor/jsdoc-extras/templates/classlist/all-classes.tmpl",
|
58
|
+
"vendor/jsdoc-extras/templates/classlist/publish.js",
|
57
59
|
"vendor/jsdoc-extras/templates/coherent/all-classes.tmpl",
|
58
60
|
"vendor/jsdoc-extras/templates/coherent/allclasses.tmpl",
|
59
61
|
"vendor/jsdoc-extras/templates/coherent/allfiles.tmpl",
|
@@ -138,6 +140,7 @@ Gem::Specification.new do |s|
|
|
138
140
|
"vendor/jsdoc-toolkit/app/test/memberof3.js",
|
139
141
|
"vendor/jsdoc-toolkit/app/test/memberof_constructor.js",
|
140
142
|
"vendor/jsdoc-toolkit/app/test/module.js",
|
143
|
+
"vendor/jsdoc-toolkit/app/test/multi_methods.js",
|
141
144
|
"vendor/jsdoc-toolkit/app/test/name.js",
|
142
145
|
"vendor/jsdoc-toolkit/app/test/namespace_nested.js",
|
143
146
|
"vendor/jsdoc-toolkit/app/test/nocode.js",
|
data/lib/configurable.rb
CHANGED
@@ -66,6 +66,42 @@ class Configurable
|
|
66
66
|
s
|
67
67
|
end
|
68
68
|
|
69
|
+
def self.class_attr(name)
|
70
|
+
if (@class_attributes.nil?)
|
71
|
+
@class_attributes=[name]
|
72
|
+
else
|
73
|
+
@class_attributes<<name
|
74
|
+
end
|
75
|
+
|
76
|
+
class_eval %(
|
77
|
+
def self.#{name}(*rest)
|
78
|
+
if (rest.length>0)
|
79
|
+
@#{name}= rest[0]
|
80
|
+
else
|
81
|
+
@#{name}
|
82
|
+
end
|
83
|
+
end
|
84
|
+
def self.#{name}=(value)
|
85
|
+
@#{name}= value
|
86
|
+
end
|
87
|
+
def #{name}
|
88
|
+
@#{name} || self.class.#{name}
|
89
|
+
end
|
90
|
+
def #{name}=(value)
|
91
|
+
@#{name}=value
|
92
|
+
end
|
93
|
+
)
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.inherited(subclass)
|
98
|
+
super(subclass)
|
99
|
+
(@class_attributes||[]).each { |a|
|
100
|
+
instance_var = "@#{a}"
|
101
|
+
subclass.instance_variable_set(instance_var, instance_variable_get(instance_var))
|
102
|
+
}
|
103
|
+
end
|
104
|
+
|
69
105
|
# option name, [type], [default], [options]
|
70
106
|
def self.option(name, *rest)
|
71
107
|
|
data/lib/file-set.rb
CHANGED
@@ -22,17 +22,24 @@ class FileSet
|
|
22
22
|
next if ('.'==f[/^\./])
|
23
23
|
include_file(File.join(full_path, f))
|
24
24
|
}
|
25
|
-
|
26
|
-
if (File.exists?(full_path))
|
27
|
-
source_file= SourceFile.from_path(full_path)
|
28
|
-
else
|
29
|
-
source_file= Project.current.find_file(file)
|
30
|
-
return if (!source_file)
|
31
|
-
end
|
32
|
-
|
33
|
-
return if (@files.include?(source_file))
|
34
|
-
@files << source_file
|
25
|
+
return
|
35
26
|
end
|
27
|
+
|
28
|
+
files= Dir.glob(full_path)
|
29
|
+
if (files.length>0)
|
30
|
+
files.each { |f|
|
31
|
+
source_file= SourceFile.from_path(f)
|
32
|
+
next if (@files.include?(source_file))
|
33
|
+
@files << source_file
|
34
|
+
}
|
35
|
+
return
|
36
|
+
end
|
37
|
+
|
38
|
+
# file not found by globbing (would also find explicit reference)
|
39
|
+
source_file= Project.current.find_file(file)
|
40
|
+
return if (!source_file)
|
41
|
+
return if (@files.include?(source_file))
|
42
|
+
@files << source_file
|
36
43
|
end
|
37
44
|
|
38
45
|
def each
|
data/lib/filters/css-filter.rb
CHANGED
@@ -3,7 +3,7 @@ $jsl_import_regex= /\/\*jsl:import\s+([^\*]*)\*\//
|
|
3
3
|
class JslDependencyFilter < Filter
|
4
4
|
|
5
5
|
def handles_file(file)
|
6
|
-
return ["
|
6
|
+
return ["js"].include?(file.content_type)
|
7
7
|
end
|
8
8
|
|
9
9
|
def preprocess_content(file, content)
|
@@ -25,7 +25,7 @@ class JslDependencyFilter < Filter
|
|
25
25
|
else
|
26
26
|
dependency= Project.current.find_file($1)
|
27
27
|
if (dependency)
|
28
|
-
file.add_dependency
|
28
|
+
file.add_dependency dependency
|
29
29
|
else
|
30
30
|
file.error "Missing import file: #{$1}", line_num
|
31
31
|
end
|
data/lib/project.rb
CHANGED
@@ -118,7 +118,7 @@ class Project < Configurable
|
|
118
118
|
# build or get each project
|
119
119
|
projects.each { |project|
|
120
120
|
|
121
|
-
if (project.key?("folder") && !File.directory?(project["folder"]))
|
121
|
+
if (project.key?("folder") && !File.directory?(project["folder"]) && !File.symlink?(project["folder"]))
|
122
122
|
if (project["url"])
|
123
123
|
url= project["url"]
|
124
124
|
system "svn co #{url} #{project["folder"]}"
|
@@ -155,10 +155,10 @@ class Project < Configurable
|
|
155
155
|
value.is_a?(Hash) && value.has_key?("enabled") && !value["enabled"])
|
156
156
|
|
157
157
|
puts
|
158
|
-
puts "#{project_name}
|
158
|
+
puts "#{project_name} #{section}:"
|
159
159
|
puts
|
160
160
|
|
161
|
-
task= Task.by_name(section)
|
161
|
+
task= Task.by_name(section) || Task.by_product_name(section)
|
162
162
|
if (task)
|
163
163
|
new_value= Hash.new
|
164
164
|
new_value[section]= value
|
data/lib/source-file.rb
CHANGED
@@ -15,15 +15,6 @@ class SourceFile
|
|
15
15
|
@@file_cache[@full_path]= self
|
16
16
|
end
|
17
17
|
|
18
|
-
@@root_folder= FileUtils.pwd
|
19
|
-
def self.root_folder
|
20
|
-
@@root_folder
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.root_folder=(new_root_folder)
|
24
|
-
@@root_folder= File.expand_path(new_root_folder)
|
25
|
-
end
|
26
|
-
|
27
18
|
def self.extension
|
28
19
|
end
|
29
20
|
|
@@ -46,6 +37,10 @@ class SourceFile
|
|
46
37
|
@@file_types << subclass
|
47
38
|
end
|
48
39
|
|
40
|
+
def self.file_types
|
41
|
+
@@file_types
|
42
|
+
end
|
43
|
+
|
49
44
|
@@file_cache= Hash.new
|
50
45
|
def self.from_path(filepath)
|
51
46
|
full_path= File.expand_path(filepath)
|
data/lib/target.rb
CHANGED
@@ -12,21 +12,34 @@ class Target < Configurable
|
|
12
12
|
@@current= self
|
13
13
|
@project= project
|
14
14
|
@target_name= name
|
15
|
+
|
16
|
+
@warning_count=0
|
17
|
+
@error_count=0
|
15
18
|
|
16
19
|
@tasks= []
|
17
20
|
|
18
21
|
@extras.each { |task_name, task_settings|
|
19
22
|
next if (tasks && !tasks.include?(task_name))
|
23
|
+
|
24
|
+
if (task_settings.is_a?(Array) || task_settings.is_a?(String))
|
25
|
+
task_settings= { "include"=>task_settings }
|
26
|
+
end
|
27
|
+
|
20
28
|
t= Task.by_name(task_name)
|
21
|
-
if (t.nil?)
|
22
|
-
|
29
|
+
if (!t.nil?)
|
30
|
+
@tasks << t.new(self, task_settings)
|
31
|
+
next
|
32
|
+
end
|
33
|
+
|
34
|
+
t= Task.by_product_name(task_name)
|
35
|
+
if (!t.nil?)
|
36
|
+
task_settings["output_name"]= task_name[/(.*)\.#{t.output_type}$/,1]
|
37
|
+
@tasks << t.new(self, task_settings)
|
23
38
|
next
|
24
39
|
end
|
25
|
-
@tasks << t.new(self, task_settings)
|
26
|
-
}
|
27
40
|
|
28
|
-
|
29
|
-
|
41
|
+
error("Unknown task: #{task_name}")
|
42
|
+
}
|
30
43
|
end
|
31
44
|
|
32
45
|
@@current=nil
|
data/lib/task.rb
CHANGED
@@ -8,11 +8,9 @@ class Task < Configurable
|
|
8
8
|
attr_reader :included_files, :assets
|
9
9
|
|
10
10
|
option :remove_prefix
|
11
|
-
|
11
|
+
option_alias :remove_prefix, :source_folder
|
12
|
+
|
12
13
|
def initialize(target, settings)
|
13
|
-
if (settings.is_a?(Array) || settings.is_a?(String))
|
14
|
-
settings= { "include"=>settings }
|
15
|
-
end
|
16
14
|
super(settings, target)
|
17
15
|
|
18
16
|
@target= target
|
@@ -22,10 +20,6 @@ class Task < Configurable
|
|
22
20
|
@files_to_exclude= []
|
23
21
|
@assets= Set.new
|
24
22
|
@probed= Set.new
|
25
|
-
|
26
|
-
if (remove_prefix)
|
27
|
-
SourceFile.root_folder= remove_prefix
|
28
|
-
end
|
29
23
|
end
|
30
24
|
|
31
25
|
@@tasks= []
|
@@ -37,6 +31,11 @@ class Task < Configurable
|
|
37
31
|
@@tasks
|
38
32
|
end
|
39
33
|
|
34
|
+
@@task_aliases= Hash.new
|
35
|
+
def self.task_name_alias(name)
|
36
|
+
@@task_aliases[name]= self
|
37
|
+
end
|
38
|
+
|
40
39
|
@@task_index= nil
|
41
40
|
def self.task_index
|
42
41
|
return @@task_index if @@task_index
|
@@ -49,21 +48,30 @@ class Task < Configurable
|
|
49
48
|
end
|
50
49
|
|
51
50
|
def self.by_name(taskname)
|
52
|
-
self.task_index[taskname]
|
51
|
+
self.task_index[taskname] || @@task_aliases[taskname]
|
53
52
|
end
|
54
53
|
|
55
|
-
def self.
|
54
|
+
def self.by_product_name(productname)
|
55
|
+
@@tasks.select { |t|
|
56
|
+
next if !t.respond_to?(:output_type)
|
57
|
+
return t if productname[/\.#{t.output_type}$/]
|
58
|
+
}
|
56
59
|
nil
|
57
60
|
end
|
58
61
|
|
62
|
+
def self.task_name
|
63
|
+
s= (self.to_s)[/(.*)Task/,1]
|
64
|
+
s && !s.empty? ? s.downcase : nil
|
65
|
+
end
|
66
|
+
|
59
67
|
def task_name
|
60
68
|
self.class.task_name
|
61
69
|
end
|
62
|
-
|
70
|
+
|
63
71
|
def handles_file?(file)
|
64
72
|
false
|
65
73
|
end
|
66
|
-
|
74
|
+
|
67
75
|
# Do a simple token substitution. Tokens begin and end with @.
|
68
76
|
def replace_tokens(string, params)
|
69
77
|
return string.gsub(/(\n[\t ]*)?@([^@ \t\r\n]*)@/) { |m|
|
@@ -96,11 +104,10 @@ class Task < Configurable
|
|
96
104
|
def find_files
|
97
105
|
@probed= Set.new
|
98
106
|
@included_files= []
|
107
|
+
|
99
108
|
@files_to_include.each { |i| include_file(i) }
|
100
109
|
|
101
|
-
files= @included_files.map { |f|
|
102
|
-
f.to_s
|
103
|
-
}
|
110
|
+
# files= @included_files.map { |f| f.to_s }
|
104
111
|
end
|
105
112
|
|
106
113
|
def products
|
@@ -183,6 +190,8 @@ class Task < Configurable
|
|
183
190
|
end
|
184
191
|
|
185
192
|
def build_assets
|
193
|
+
FileUtils.mkdir_p(output_folder)
|
194
|
+
|
186
195
|
if ("release"==mode)
|
187
196
|
copy_assets
|
188
197
|
else
|
data/lib/tasks/copy-task.rb
CHANGED
data/lib/tasks/css-task.rb
CHANGED
@@ -2,13 +2,7 @@ require "#{$script_dir}/tasks/single-output-task.rb"
|
|
2
2
|
|
3
3
|
class CssTask < SingleOutputTask
|
4
4
|
|
5
|
-
|
6
|
-
"css"
|
7
|
-
end
|
8
|
-
|
9
|
-
def output_type
|
10
|
-
"css"
|
11
|
-
end
|
5
|
+
output_type "css"
|
12
6
|
|
13
7
|
# CssTask handles files that end in .css
|
14
8
|
def handles_file?(file_name)
|
@@ -14,22 +14,46 @@ class JavascriptTask < SingleOutputTask
|
|
14
14
|
option :jsdoc_plugins, "#{$vendor_dir}/jsdoc-extras/plugins"
|
15
15
|
option :doc_folder, "doc"
|
16
16
|
option :generate_docs, false
|
17
|
+
option :generate_import, false
|
18
|
+
option :class_list, ""
|
19
|
+
option :class_list_template, "#{$vendor_dir}/jsdoc-extras/templates/classlist"
|
20
|
+
|
21
|
+
output_type "js"
|
17
22
|
|
18
|
-
|
19
|
-
"js"
|
20
|
-
end
|
21
|
-
|
22
|
-
def output_type
|
23
|
-
"js"
|
24
|
-
end
|
23
|
+
task_name_alias "js"
|
25
24
|
|
26
25
|
def initialize(target, options)
|
27
26
|
super(target, options)
|
28
27
|
@concatenation_join_string = "\n/*jsl:ignore*/;/*jsl:end*/\n"
|
29
28
|
|
29
|
+
if (!class_list.empty?)
|
30
|
+
@products << File.join(output_folder, class_list)
|
31
|
+
end
|
32
|
+
|
30
33
|
if (generate_docs)
|
31
34
|
@products << File.join(doc_folder, "index.html")
|
32
35
|
end
|
36
|
+
|
37
|
+
type= output_extension
|
38
|
+
return if (!type)
|
39
|
+
|
40
|
+
if (!output_name.empty?)
|
41
|
+
target_name= "#{output_name}"
|
42
|
+
prefix= "#{output_folder}/"
|
43
|
+
else
|
44
|
+
target_name= "#{target.target_name}".downcase
|
45
|
+
prefix= "#{output_folder}/#{project_name}"
|
46
|
+
if ("all"==target_name)
|
47
|
+
target_name= ""
|
48
|
+
else
|
49
|
+
prefix= "#{prefix}-"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
if (generate_import)
|
54
|
+
@name_import= "#{prefix}#{target_name}-import#{type}"
|
55
|
+
@products << @name_import
|
56
|
+
end
|
33
57
|
end
|
34
58
|
|
35
59
|
# JsTask handles files that end in .js
|
@@ -58,6 +82,7 @@ class JavascriptTask < SingleOutputTask
|
|
58
82
|
}
|
59
83
|
|
60
84
|
@included_files.each { |f|
|
85
|
+
next if "js"!=f.content_type
|
61
86
|
tmp << "+process #{f}\n"
|
62
87
|
}
|
63
88
|
|
@@ -89,8 +114,44 @@ class JavascriptTask < SingleOutputTask
|
|
89
114
|
|
90
115
|
end
|
91
116
|
|
117
|
+
def generate_class_list()
|
118
|
+
tmp= Tempfile.new("jsdoc.conf")
|
119
|
+
|
120
|
+
template= File.read(@options.jsdoc_conf)
|
121
|
+
doc_files= @included_files.map { |f|
|
122
|
+
p= f.file_path || f.relative_to_folder(options.remove_prefix||"")
|
123
|
+
"\"#{p}\""
|
124
|
+
}
|
125
|
+
|
126
|
+
class_list_output= File.join(output_folder, class_list)
|
127
|
+
|
128
|
+
conf= replace_tokens(template, {
|
129
|
+
"DOC_FILES"=>doc_files.join(",\n"),
|
130
|
+
"DOC_OUTPUT_DIR"=>output_folder,
|
131
|
+
"DOC_TEMPLATE_DIR"=>class_list_template,
|
132
|
+
"DOC_PLUGINS_DIR"=>jsdoc_plugins
|
133
|
+
})
|
134
|
+
|
135
|
+
tmp << conf
|
136
|
+
tmp.close()
|
137
|
+
|
138
|
+
command= "#{$jsdoc_command} -c=#{tmp.path}"
|
139
|
+
|
140
|
+
stdin, stdout, stderr= Open3.popen3(command)
|
141
|
+
stdin.close
|
142
|
+
output= stdout.read
|
143
|
+
errors= stderr.read
|
144
|
+
|
145
|
+
tmp.delete
|
146
|
+
|
147
|
+
puts errors
|
148
|
+
puts output
|
149
|
+
end
|
150
|
+
|
92
151
|
def document_files()
|
93
|
-
|
152
|
+
|
153
|
+
generate_class_list() if (!class_list.empty?)
|
154
|
+
|
94
155
|
return if (!generate_docs)
|
95
156
|
return if (!File.exists?($jsdoc_command))
|
96
157
|
|
@@ -133,5 +194,20 @@ class JavascriptTask < SingleOutputTask
|
|
133
194
|
"LOAD_SCRIPTS" => @debug
|
134
195
|
})
|
135
196
|
end
|
197
|
+
|
198
|
+
def finish
|
199
|
+
super
|
200
|
+
return if (!generate_import)
|
201
|
+
|
202
|
+
File.delete(@name_import) if (File.exists?(@name_import))
|
203
|
+
|
204
|
+
File.open(@name_import, "w") { |f|
|
205
|
+
f.write(notice_text)
|
206
|
+
|
207
|
+
@included_files.each { |inc|
|
208
|
+
f.puts "/*jsl:import #{inc.relative_to_folder(output_folder)}*/"
|
209
|
+
}
|
210
|
+
}
|
211
|
+
end
|
136
212
|
|
137
213
|
end
|
@@ -36,11 +36,11 @@ class MultipleOutputTask < OutputTask
|
|
36
36
|
|
37
37
|
type= output_extension
|
38
38
|
@included_files.each { |file|
|
39
|
-
basename= file.basename("
|
40
|
-
name_concat= "#{@prefix}#{basename}-uncompressed
|
41
|
-
name_min= "#{@prefix}#{basename}
|
42
|
-
name_gz= "#{@prefix}#{basename}
|
43
|
-
name_debug= "#{@prefix}#{basename}-debug
|
39
|
+
basename= file.basename("#{type}")
|
40
|
+
name_concat= "#{@prefix}#{basename}-uncompressed#{type}"
|
41
|
+
name_min= "#{@prefix}#{basename}#{type}"
|
42
|
+
name_gz= "#{@prefix}#{basename}#{type}.gz"
|
43
|
+
name_debug= "#{@prefix}#{basename}-debug#{type}"
|
44
44
|
@products.concat([name_concat, name_min, name_gz, name_debug])
|
45
45
|
}
|
46
46
|
@products
|
@@ -81,11 +81,11 @@ class MultipleOutputTask < OutputTask
|
|
81
81
|
type= output_extension
|
82
82
|
return if (!type)
|
83
83
|
|
84
|
-
basename= file.basename("
|
85
|
-
name_concat= "#{@prefix}#{basename}-uncompressed
|
86
|
-
name_min= "#{@prefix}#{basename}
|
87
|
-
name_gz= "#{@prefix}#{basename}
|
88
|
-
name_debug= "#{@prefix}#{basename}-debug
|
84
|
+
basename= file.basename("#{type}")
|
85
|
+
name_concat= "#{@prefix}#{basename}-uncompressed#{type}"
|
86
|
+
name_min= "#{@prefix}#{basename}#{type}"
|
87
|
+
name_gz= "#{@prefix}#{basename}#{type}.gz"
|
88
|
+
name_debug= "#{@prefix}#{basename}-debug#{type}"
|
89
89
|
|
90
90
|
# puts "Finish: #{file}"
|
91
91
|
# puts " #{name_concat}"
|
data/lib/tasks/output-task.rb
CHANGED
@@ -16,16 +16,19 @@ class OutputTask < Task
|
|
16
16
|
FileUtils.mkdir_p(output_folder)
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
end
|
19
|
+
class_attr :output_type
|
20
|
+
class_attr :content_type
|
22
21
|
|
23
|
-
def
|
24
|
-
|
22
|
+
def self.content_type(*rest)
|
23
|
+
if (rest.length>0)
|
24
|
+
@content_type= rest[0]
|
25
|
+
else
|
26
|
+
@content_type || output_type
|
27
|
+
end
|
25
28
|
end
|
26
29
|
|
27
30
|
def output_extension
|
28
|
-
output_type
|
31
|
+
output_type && ".#{output_type}"
|
29
32
|
end
|
30
33
|
|
31
34
|
def products
|
@@ -36,7 +39,7 @@ class OutputTask < Task
|
|
36
39
|
# Run the Y!UI Compressor
|
37
40
|
buffer= ""
|
38
41
|
|
39
|
-
IO.popen("java -jar #{$compressor} --type #{
|
42
|
+
IO.popen("java -jar #{$compressor} --type #{content_type}", "r+") { |pipe|
|
40
43
|
pipe.puts(source)
|
41
44
|
pipe.close_write
|
42
45
|
buffer= pipe.read
|
@@ -2,25 +2,31 @@ require "#{$script_dir}/tasks/output-task.rb"
|
|
2
2
|
|
3
3
|
class SingleOutputTask < OutputTask
|
4
4
|
|
5
|
+
option :output_name, ""
|
6
|
+
|
5
7
|
def initialize(target, options)
|
6
8
|
super(target, options)
|
7
9
|
|
8
10
|
type= output_extension
|
9
11
|
return if (!type)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
if ("all"==target_name)
|
15
|
-
target_name= ""
|
12
|
+
|
13
|
+
if (!output_name.empty?)
|
14
|
+
target_name= "#{output_name}"
|
15
|
+
prefix= "#{output_folder}/"
|
16
16
|
else
|
17
|
-
|
17
|
+
target_name= "#{target.target_name}".downcase
|
18
|
+
prefix= "#{output_folder}/#{project_name}"
|
19
|
+
if ("all"==target_name)
|
20
|
+
target_name= ""
|
21
|
+
else
|
22
|
+
prefix= "#{prefix}-"
|
23
|
+
end
|
18
24
|
end
|
19
25
|
|
20
|
-
@name_concat= "#{prefix}#{target_name}-uncompressed
|
21
|
-
@name_min= "#{prefix}#{target_name}
|
22
|
-
@name_gz= "#{prefix}#{target_name}
|
23
|
-
@name_debug= "#{prefix}#{target_name}-debug
|
26
|
+
@name_concat= "#{prefix}#{target_name}-uncompressed#{type}"
|
27
|
+
@name_min= "#{prefix}#{target_name}#{type}"
|
28
|
+
@name_gz= "#{prefix}#{target_name}#{type}.gz"
|
29
|
+
@name_debug= "#{prefix}#{target_name}-debug#{type}"
|
24
30
|
|
25
31
|
@concatenation_join_string= ""
|
26
32
|
@products= [@name_concat, @name_min, @name_gz, @name_debug]
|
@@ -29,14 +35,16 @@ class SingleOutputTask < OutputTask
|
|
29
35
|
@debug = ""
|
30
36
|
end
|
31
37
|
|
38
|
+
def process_file(file)
|
39
|
+
if (!@concat.empty?)
|
40
|
+
@concat << @concatenation_join_string||""
|
41
|
+
end
|
42
|
+
@concat << file.filtered_content(options)
|
43
|
+
@debug << file.debug_content(options)
|
44
|
+
end
|
45
|
+
|
32
46
|
def process_files
|
33
|
-
@included_files.each { |f|
|
34
|
-
if (!@concat.empty?)
|
35
|
-
@concat << @concatenation_join_string||""
|
36
|
-
end
|
37
|
-
@concat << f.filtered_content(options)
|
38
|
-
@debug << f.debug_content(options)
|
39
|
-
}
|
47
|
+
@included_files.each { |f| process_file(f) }
|
40
48
|
end
|
41
49
|
|
42
50
|
def finish
|
data/lib/tasks/test-task.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
/** Called automatically by JsDoc Toolkit. */
|
2
|
+
function publish(symbolSet) {
|
3
|
+
publish.conf = { // trailing slash expected for dirs
|
4
|
+
ext: ".html",
|
5
|
+
outDir: JSDOC.opt.d || SYS.pwd+"../out/jsdoc/",
|
6
|
+
templatesDir: JSDOC.opt.t || SYS.pwd+"../templates/jsdoc/",
|
7
|
+
symbolsDir: "symbols/",
|
8
|
+
srcDir: "symbols/src/"
|
9
|
+
};
|
10
|
+
|
11
|
+
// is source output is suppressed, just display the links to the source file
|
12
|
+
if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) {
|
13
|
+
Link.prototype._makeSrcLink = function(srcFilePath) {
|
14
|
+
return "<"+srcFilePath+">";
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
// used to allow Link to check the details of things being linked to
|
19
|
+
Link.symbolSet = symbolSet;
|
20
|
+
|
21
|
+
// create the required templates
|
22
|
+
try {
|
23
|
+
var classesTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"all-classes.tmpl");
|
24
|
+
}
|
25
|
+
catch(e) {
|
26
|
+
print("Couldn't create the required templates: "+e);
|
27
|
+
quit();
|
28
|
+
}
|
29
|
+
|
30
|
+
// some ustility filters
|
31
|
+
function hasNoParent($) {return (!$.memberOf);}
|
32
|
+
function isaFile($) {return ($.is("FILE"));}
|
33
|
+
function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace) && '_global_'!=$.alias;}
|
34
|
+
|
35
|
+
// get an array version of the symbolset, useful for filtering
|
36
|
+
var symbols = symbolSet.toArray();
|
37
|
+
|
38
|
+
// get a list of all the classes in the symbolset
|
39
|
+
var classes = symbols.filter(isaClass);
|
40
|
+
var classesIndex = classesTemplate.process(classes);
|
41
|
+
|
42
|
+
IO.saveFile(publish.conf.outDir, 'classes.js', classesIndex);
|
43
|
+
}
|
@@ -94,8 +94,6 @@ JSDOC.JsPlate.prototype.process = function(data, compact) {
|
|
94
94
|
if (e.lineNumber-2 >= 0) print("line "+(e.lineNumber-1)+": "+lines[e.lineNumber-2]);
|
95
95
|
print("line "+e.lineNumber+": "+lines[e.lineNumber-1]);
|
96
96
|
print("");
|
97
|
-
|
98
|
-
print(this.code);
|
99
97
|
}
|
100
98
|
|
101
99
|
if (compact) { // patch by mcbain.asm
|
@@ -52,12 +52,14 @@ if (JSDOC.opt.S) {
|
|
52
52
|
}
|
53
53
|
}
|
54
54
|
|
55
|
-
// if a symbol alias is documented more than once the
|
55
|
+
// if a symbol alias is documented more than once the first one with the user docs wins
|
56
56
|
if (JSDOC.Parser.symbols.hasSymbol(symbol.alias)) {
|
57
57
|
var oldSymbol = JSDOC.Parser.symbols.getSymbol(symbol.alias);
|
58
58
|
if (oldSymbol.comment.isUserComment) {
|
59
|
+
if (JSDOC.opt.m) return;
|
59
60
|
if (symbol.comment.isUserComment) { // old and new are both documented
|
60
61
|
LOG.warn("The symbol '"+symbol.alias+"' is documented more than once.");
|
62
|
+
return;
|
61
63
|
}
|
62
64
|
else { // old is documented but new isn't
|
63
65
|
return;
|
@@ -16,8 +16,9 @@ JSDOC.SymbolSet.prototype.hasSymbol = function(alias) {
|
|
16
16
|
}
|
17
17
|
|
18
18
|
JSDOC.SymbolSet.prototype.addSymbol = function(symbol) {
|
19
|
-
if (this.hasSymbol(symbol.alias)) {
|
19
|
+
if (JSDOC.opt.a && this.hasSymbol(symbol.alias)) {
|
20
20
|
LOG.warn("Overwriting symbol documentation for: "+symbol.alias + ".");
|
21
|
+
this.deleteSymbol(symbol.alias);
|
21
22
|
}
|
22
23
|
this._index.set(symbol.alias, symbol);
|
23
24
|
}
|
@@ -111,11 +112,11 @@ if (/#$/.test(borrows[i].alias)) {
|
|
111
112
|
JSDOC.SymbolSet.prototype.resolveMemberOf = function() {
|
112
113
|
for (var p = this._index.first(); p; p = this._index.next()) {
|
113
114
|
var symbol = p.value;
|
115
|
+
|
114
116
|
if (symbol.is("FILE") || symbol.is("GLOBAL")) continue;
|
115
117
|
|
116
118
|
// the memberOf value was provided in the @memberOf tag
|
117
119
|
else if (symbol.memberOf) {
|
118
|
-
|
119
120
|
// like foo.bar is a memberOf foo
|
120
121
|
if (symbol.alias.indexOf(symbol.memberOf) == 0) {
|
121
122
|
var memberMatch = new RegExp("^("+symbol.memberOf+")[.#-]?(.+)$");
|
@@ -142,6 +143,7 @@ JSDOC.SymbolSet.prototype.resolveMemberOf = function() {
|
|
142
143
|
// the memberOf must be calculated
|
143
144
|
else {
|
144
145
|
var parts = symbol.alias.match(/^(.*[.#-])([^.#-]+)$/);
|
146
|
+
|
145
147
|
if (parts) {
|
146
148
|
symbol.memberOf = parts[1];
|
147
149
|
symbol.name = parts[2];
|
@@ -182,6 +182,15 @@ JSDOC.Walker.prototype.step = function() {
|
|
182
182
|
}
|
183
183
|
// foo = function() {}
|
184
184
|
else if (this.ts.look(1).is("ASSIGN") && this.ts.look(2).is("FUNCTION")) {
|
185
|
+
var constructs;
|
186
|
+
var isConstructor = false;
|
187
|
+
if (doc && (constructs = doc.getTag("constructs")) && constructs.length) {
|
188
|
+
if (constructs[0].desc) {
|
189
|
+
name = constructs[0].desc;
|
190
|
+
isConstructor = true;
|
191
|
+
}
|
192
|
+
}
|
193
|
+
|
185
194
|
var isInner;
|
186
195
|
if (this.ts.look(-1).is("VAR") || this.isInner) {
|
187
196
|
if (doc && doc.getTag("memberOf").length > 0) {
|
@@ -204,6 +213,7 @@ JSDOC.Walker.prototype.step = function() {
|
|
204
213
|
symbol = new JSDOC.Symbol(name, params, "FUNCTION", doc);
|
205
214
|
|
206
215
|
if (isInner) symbol.isInner = true;
|
216
|
+
if (isConstructor) symbol.isa = "CONSTRUCTOR";
|
207
217
|
|
208
218
|
if (this.ts.look(1).is("JSDOC")) {
|
209
219
|
var inlineReturn = ""+this.ts.look(1).data;
|
@@ -260,8 +270,6 @@ JSDOC.Walker.prototype.step = function() {
|
|
260
270
|
if (this.lastDoc) doc = this.lastDoc;
|
261
271
|
params = JSDOC.Walker.onParamList(this.ts.balance("LEFT_PAREN"));
|
262
272
|
|
263
|
-
if (/(^|#)constructor$/.test(name)) JSDOC.PluginManager.run("onConstructorDefined", doc);
|
264
|
-
|
265
273
|
if (doc && doc.getTag("constructs").length) {
|
266
274
|
name = name.replace(/\.prototype(\.|$)/, "#");
|
267
275
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/**
|
2
2
|
@overview
|
3
|
-
@date $Date:
|
4
|
-
@version $Revision:
|
3
|
+
@date $Date: 2010-01-10 10:49:48 -0800 (Sun, 10 Jan 2010) $
|
4
|
+
@version $Revision: 829 $
|
5
5
|
@location $HeadURL: http://jsdoc-toolkit.googlecode.com/svn/trunk/jsdoc-toolkit/app/lib/JSDOC.js $
|
6
6
|
@name JSDOC.js
|
7
7
|
*/
|
@@ -27,6 +27,7 @@ JSDOC.opt = Opt.get(
|
|
27
27
|
e: "encoding",
|
28
28
|
"E[]": "exclude",
|
29
29
|
h: "help",
|
30
|
+
m: "multiple",
|
30
31
|
n: "nocode",
|
31
32
|
o: "out",
|
32
33
|
p: "private",
|
@@ -58,6 +59,7 @@ JSDOC.usage = function() {
|
|
58
59
|
print(" -e=<ENCODING> or --encoding=<ENCODING>\n Use this encoding to read and write files.\n");
|
59
60
|
print(" -E=\"REGEX\" or --exclude=\"REGEX\"\n Multiple. Exclude files based on the supplied regex.\n");
|
60
61
|
print(" -h or --help\n Show this message and exit.\n");
|
62
|
+
print(" -m or --multiples\n Don't warn about symbols being documented more than once.\n");
|
61
63
|
print(" -n or --nocode\n Ignore all code, only document comments with @name tags.\n");
|
62
64
|
print(" -o=<PATH> or --out=<PATH>\n Print log messages to a file (defaults to stdout).\n");
|
63
65
|
print(" -p or --private\n Include symbols tagged as private, underscored and inner symbols.\n");
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
/**
|
3
|
+
Get the entire flavor.
|
4
|
+
@name flavor^3
|
5
|
+
@function
|
6
|
+
@returns {Object} The entire flavor hash.
|
7
|
+
*/
|
8
|
+
/**
|
9
|
+
Get a named flavor.
|
10
|
+
@name flavor^2
|
11
|
+
@function
|
12
|
+
@param {String} name The name of the flavor to get.
|
13
|
+
@returns {String} The value of that flavor.
|
14
|
+
*/
|
15
|
+
/**
|
16
|
+
Set the flavor.
|
17
|
+
@param {String} name The name of the flavor to set.
|
18
|
+
@param {String} value The value of the flavor.
|
19
|
+
@returns {String} The value of that flavor.
|
20
|
+
*/
|
21
|
+
function flavor(name, value) {
|
22
|
+
if (arguments.length > 1) flavor[name] = value;
|
23
|
+
else if (arguments.length == 1) return flavor[name];
|
24
|
+
else return flavor;
|
25
|
+
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: distil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Watkins
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-03-26 00:00:00 -07:00
|
13
13
|
default_executable: distil
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -61,6 +61,8 @@ files:
|
|
61
61
|
- vendor/extconf.rb
|
62
62
|
- vendor/jsdoc-extras/plugins/distil-plugin.js
|
63
63
|
- vendor/jsdoc-extras/plugins/interface-plugin.js
|
64
|
+
- vendor/jsdoc-extras/templates/classlist/all-classes.tmpl
|
65
|
+
- vendor/jsdoc-extras/templates/classlist/publish.js
|
64
66
|
- vendor/jsdoc-extras/templates/coherent/all-classes.tmpl
|
65
67
|
- vendor/jsdoc-extras/templates/coherent/allclasses.tmpl
|
66
68
|
- vendor/jsdoc-extras/templates/coherent/allfiles.tmpl
|
@@ -145,6 +147,7 @@ files:
|
|
145
147
|
- vendor/jsdoc-toolkit/app/test/memberof3.js
|
146
148
|
- vendor/jsdoc-toolkit/app/test/memberof_constructor.js
|
147
149
|
- vendor/jsdoc-toolkit/app/test/module.js
|
150
|
+
- vendor/jsdoc-toolkit/app/test/multi_methods.js
|
148
151
|
- vendor/jsdoc-toolkit/app/test/name.js
|
149
152
|
- vendor/jsdoc-toolkit/app/test/namespace_nested.js
|
150
153
|
- vendor/jsdoc-toolkit/app/test/nocode.js
|