sc-docs 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/Gemfile.lock +7 -10
- data/README.md +3 -7
- data/lib/sc_docs/cli.rb +17 -14
- data/lib/sc_docs/generator.rb +21 -7
- data/lib/sc_docs/templates/docs.sproutcore.com/class.tmpl +395 -399
- data/lib/sc_docs/templates/docs.sproutcore.com/publish.js +172 -172
- data/lib/sc_docs/version.rb +1 -1
- data/vendor/jsdoc/app/plugins/smartdown.js +23 -0
- data/vendor/jsdoc/app/plugins/smartdown/koala.js +46 -0
- data/vendor/jsdoc/app/plugins/smartdown/koala/formatter.js +28 -0
- data/vendor/jsdoc/app/plugins/smartdown/koala/formatters/html.js +29 -0
- data/vendor/jsdoc/app/plugins/smartdown/koala/grammars/javascript.js +36 -0
- data/vendor/jsdoc/app/plugins/smartdown/koala/grammars/ruby.js +39 -0
- data/vendor/jsdoc/app/plugins/smartdown/koala/lexer.js +65 -0
- data/vendor/jsdoc/app/plugins/smartdown/markdown.js +1312 -0
- data/vendor/jsdoc/app/plugins/smartdown/smartdown.js +28 -0
- metadata +12 -5
@@ -1,200 +1,200 @@
|
|
1
1
|
/** Called automatically by JsDoc Toolkit. */
|
2
2
|
function publish(symbolSet) {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
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
|
+
// create the folders and subfolders to hold the output
|
19
|
+
IO.mkPath((publish.conf.outDir+"symbols/src").split("/"));
|
20
|
+
|
21
|
+
// used to allow Link to check the details of things being linked to
|
22
|
+
Link.symbolSet = symbolSet;
|
23
|
+
|
24
|
+
// create the required templates
|
25
|
+
try {
|
26
|
+
var classTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"class.tmpl");
|
27
|
+
var classesTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allclasses.tmpl");
|
28
|
+
}
|
29
|
+
catch(e) {
|
30
|
+
print("Couldn't create the required templates: "+e);
|
31
|
+
quit();
|
32
|
+
}
|
33
|
+
|
34
|
+
// some ustility filters
|
35
|
+
function hasNoParent($) {return ($.memberOf == "")}
|
36
|
+
function isaFile($) {return ($.is("FILE"))}
|
37
|
+
function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace)}
|
38
|
+
|
39
|
+
// get an array version of the symbolset, useful for filtering
|
40
|
+
var symbols = symbolSet.toArray();
|
41
|
+
|
42
|
+
// create the hilited source code files
|
43
|
+
var files = JSDOC.opt.srcFiles;
|
44
|
+
for (var i = 0, l = files.length; i < l; i++) {
|
45
|
+
var file = files[i];
|
46
|
+
var srcDir = publish.conf.outDir + "symbols/src/";
|
47
|
+
makeSrcFile(file, srcDir);
|
48
|
+
}
|
49
|
+
|
50
|
+
// get a list of all the classes in the symbolset
|
51
|
+
var classes = symbols.filter(isaClass).sort(makeSortby("alias"));
|
52
|
+
|
53
|
+
// create a filemap in which outfiles must be to be named uniquely, ignoring case
|
54
|
+
if (JSDOC.opt.u) {
|
55
|
+
var filemapCounts = {};
|
56
|
+
Link.filemap = {};
|
57
|
+
for (var i = 0, l = classes.length; i < l; i++) {
|
58
|
+
var lcAlias = classes[i].alias.toLowerCase();
|
59
|
+
|
60
|
+
if (!filemapCounts[lcAlias]) filemapCounts[lcAlias] = 1;
|
61
|
+
else filemapCounts[lcAlias]++;
|
62
|
+
|
63
|
+
Link.filemap[classes[i].alias] =
|
64
|
+
(filemapCounts[lcAlias] > 1)?
|
65
|
+
lcAlias+"_"+filemapCounts[lcAlias] : lcAlias;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
// create a class index, displayed in the left-hand column of every class page
|
70
|
+
Link.base = "../";
|
71
|
+
publish.classesIndex = classesTemplate.process(classes); // kept in memory
|
72
|
+
|
73
|
+
// create each of the class pages
|
74
|
+
for (var i = 0, l = classes.length; i < l; i++) {
|
75
|
+
var symbol = classes[i];
|
76
|
+
|
77
|
+
symbol.events = symbol.getEvents(); // 1 order matters
|
78
|
+
symbol.methods = symbol.getMethods(); // 2
|
79
|
+
|
80
|
+
var output = "";
|
81
|
+
output = classTemplate.process(symbol);
|
82
|
+
|
83
|
+
IO.saveFile(publish.conf.outDir+"symbols/", ((JSDOC.opt.u)? Link.filemap[symbol.alias] : symbol.alias) + publish.conf.ext, output);
|
84
|
+
}
|
85
|
+
|
86
|
+
// regenerate the index with different relative links, used in the index pages
|
87
|
+
Link.base = "";
|
88
|
+
publish.classesIndex = classesTemplate.process(classes);
|
89
|
+
|
90
|
+
// create the class index page
|
91
|
+
try {
|
92
|
+
var classesindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"index.tmpl");
|
93
|
+
}
|
94
|
+
catch(e) { print(e.message); quit(); }
|
95
|
+
|
96
|
+
var classesIndex = classesindexTemplate.process(classes);
|
97
|
+
IO.saveFile(publish.conf.outDir, "index"+publish.conf.ext, classesIndex);
|
98
|
+
classesindexTemplate = classesIndex = classes = null;
|
99
|
+
|
100
|
+
// create the file index page
|
101
|
+
try {
|
102
|
+
var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl");
|
103
|
+
}
|
104
|
+
catch(e) { print(e.message); quit(); }
|
105
|
+
|
106
|
+
var documentedFiles = symbols.filter(isaFile); // files that have file-level docs
|
107
|
+
var allFiles = []; // not all files have file-level docs, but we need to list every one
|
108
|
+
|
109
|
+
for (var i = 0; i < files.length; i++) {
|
110
|
+
allFiles.push(new JSDOC.Symbol(files[i], [], "FILE", new JSDOC.DocComment("/** */")));
|
111
|
+
}
|
112
|
+
|
113
|
+
for (var i = 0; i < documentedFiles.length; i++) {
|
114
|
+
var offset = files.indexOf(documentedFiles[i].alias);
|
115
|
+
allFiles[offset] = documentedFiles[i];
|
116
|
+
}
|
117
|
+
|
118
|
+
allFiles = allFiles.sort(makeSortby("name"));
|
119
|
+
|
120
|
+
// output the file index page
|
121
|
+
var filesIndex = fileindexTemplate.process(allFiles);
|
122
|
+
IO.saveFile(publish.conf.outDir, "files"+publish.conf.ext, filesIndex);
|
123
|
+
fileindexTemplate = filesIndex = files = null;
|
124
124
|
}
|
125
125
|
|
126
126
|
|
127
127
|
/** Just the first sentence (up to a full stop). Should not break on dotted variable names. */
|
128
128
|
function summarize(desc) {
|
129
|
-
|
130
|
-
|
129
|
+
if (typeof desc != "undefined")
|
130
|
+
return desc.match(/([\w\W]+?\.)[^a-z0-9_$]/i)? RegExp.$1 : desc;
|
131
131
|
}
|
132
132
|
|
133
133
|
/** Make a symbol sorter by some attribute. */
|
134
134
|
function makeSortby(attribute) {
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
135
|
+
return function(a, b) {
|
136
|
+
if (a[attribute] != undefined && b[attribute] != undefined) {
|
137
|
+
a = a[attribute].toLowerCase();
|
138
|
+
b = b[attribute].toLowerCase();
|
139
|
+
if (a < b) return -1;
|
140
|
+
if (a > b) return 1;
|
141
|
+
return 0;
|
142
|
+
}
|
143
|
+
}
|
144
144
|
}
|
145
145
|
|
146
146
|
/** Pull in the contents of an external file at the given path. */
|
147
147
|
function include(path) {
|
148
|
-
|
149
|
-
|
148
|
+
var path = publish.conf.templatesDir+path;
|
149
|
+
return IO.readFile(path);
|
150
150
|
}
|
151
151
|
|
152
152
|
/** Turn a raw source file into a code-hilited page in the docs. */
|
153
153
|
function makeSrcFile(path, srcDir, name) {
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
154
|
+
if (JSDOC.opt.s) return;
|
155
|
+
|
156
|
+
if (!name) {
|
157
|
+
name = path.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_");
|
158
|
+
name = name.replace(/\:/g, "_");
|
159
|
+
}
|
160
|
+
|
161
|
+
var src = {path: path, name:name, charset: IO.encoding, hilited: ""};
|
162
|
+
|
163
|
+
if (defined(JSDOC.PluginManager)) {
|
164
|
+
JSDOC.PluginManager.run("onPublishSrc", src);
|
165
|
+
}
|
166
|
+
|
167
|
+
if (src.hilited) {
|
168
|
+
IO.saveFile(srcDir, name+publish.conf.ext, src.hilited);
|
169
|
+
}
|
170
170
|
}
|
171
171
|
|
172
172
|
/** Build output for displaying function parameters. */
|
173
173
|
function makeSignature(params) {
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
174
|
+
if (!params) return "()";
|
175
|
+
var signature = "("
|
176
|
+
+
|
177
|
+
params.filter(
|
178
|
+
function($) {
|
179
|
+
return $.name.indexOf(".") == -1; // don't show config params in signature
|
180
|
+
}
|
181
|
+
).map(
|
182
|
+
function($) {
|
183
|
+
return $.name;
|
184
|
+
}
|
185
|
+
).join(", ")
|
186
|
+
+
|
187
|
+
")";
|
188
|
+
return signature;
|
189
189
|
}
|
190
190
|
|
191
191
|
/** Find symbol {@link ...} strings in text and turn into html links */
|
192
192
|
function resolveLinks(str, from) {
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
193
|
+
str = str.replace(/\{@link ([^} ]+) ?\}/gi,
|
194
|
+
function(match, symbolName) {
|
195
|
+
return new Link().toSymbol(symbolName);
|
196
|
+
}
|
197
|
+
);
|
198
|
+
|
199
|
+
return str;
|
200
200
|
}
|
data/lib/sc_docs/version.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
IO.include("plugins/smartdown/smartdown.js");
|
2
|
+
|
3
|
+
JSDOC.useSmartdown = false;
|
4
|
+
|
5
|
+
JSDOC.PluginManager.registerPlugin(
|
6
|
+
"JSDOC.smartdown",
|
7
|
+
{
|
8
|
+
onInit: function(opts){
|
9
|
+
if (opts.smartdown) { JSDOC.useSmartdown = true; }
|
10
|
+
},
|
11
|
+
onDocTag: function(docTag) {
|
12
|
+
if (!JSDOC.useSmartdown) { return; }
|
13
|
+
|
14
|
+
var exclude = "type param see inherits lends extends scope link base augments memberOf".split(' ');
|
15
|
+
if (exclude.indexOf(docTag.title) < 0) {
|
16
|
+
var desc = docTag.desc.trim();
|
17
|
+
desc = Smartdown.render(desc);
|
18
|
+
docTag.desc = desc;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
}
|
22
|
+
);
|
23
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
|
2
|
+
// Koala - Core - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
|
3
|
+
/*global IO*/
|
4
|
+
|
5
|
+
var Koala = {
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Version.
|
9
|
+
*/
|
10
|
+
version: '0.0.1',
|
11
|
+
|
12
|
+
lexers: {},
|
13
|
+
formatters: {},
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Render _str_ as _type_, with optional _formatter_
|
20
|
+
* defaulting to HTML. _str_ should be a filename or
|
21
|
+
* extension such as '.js'.
|
22
|
+
*
|
23
|
+
* @param {string} type
|
24
|
+
* @param {string} str
|
25
|
+
* @param {Formatter} formatter
|
26
|
+
* @return {string}
|
27
|
+
* @api public
|
28
|
+
*/
|
29
|
+
|
30
|
+
render: function(type, str, formatter) {
|
31
|
+
var grammar = this.lexers[type];
|
32
|
+
formatter = formatter || this.formatters.HTML;
|
33
|
+
|
34
|
+
if (!grammar) throw new Error("syntax highlighting for `" + type + "' is not supported");
|
35
|
+
return formatter.render(grammar, str);
|
36
|
+
}
|
37
|
+
|
38
|
+
};
|
39
|
+
|
40
|
+
IO.include('plugins/smartdown/koala/formatter.js');
|
41
|
+
IO.include('plugins/smartdown/koala/lexer.js');
|
42
|
+
IO.include('plugins/smartdown/koala/formatters/html.js');
|
43
|
+
IO.include('plugins/smartdown/koala/grammars/javascript.js');
|
44
|
+
IO.include('plugins/smartdown/koala/grammars/ruby.js');
|
45
|
+
|
46
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
// Koala - Formatter - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
|
3
|
+
/*global Koala*/
|
4
|
+
/**
|
5
|
+
* Initialize with formatter function.
|
6
|
+
*/
|
7
|
+
|
8
|
+
Koala.Formatter = function(fn) {
|
9
|
+
if (typeof fn !== 'function') throw new TypeError('Formatter requires a function');
|
10
|
+
this.fn = fn;
|
11
|
+
};
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Render _str_ using the given _lexer_.
|
15
|
+
*
|
16
|
+
* @param {Lexer} lexer
|
17
|
+
* @param {string} str
|
18
|
+
* @return {string}
|
19
|
+
* @api public
|
20
|
+
*/
|
21
|
+
|
22
|
+
Koala.Formatter.prototype.render = function(lexer, str) {
|
23
|
+
var self = this;
|
24
|
+
if (typeof lexer.scan !== 'function') throw new TypeError('Formatter#render() requires a lexer to be passed');
|
25
|
+
return lexer.scan(str).map(function(token){
|
26
|
+
return self.fn.call(self, token[0], token[1]);
|
27
|
+
}).join('');
|
28
|
+
};
|