distil 0.8.4 → 0.10.0
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/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
|