sc-docs 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. data/.gitignore +4 -0
  2. data/.gitmodules +3 -0
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock +48 -0
  5. data/LICENSE +21 -0
  6. data/README.md +59 -0
  7. data/bin/sc-docs +5 -0
  8. data/lib/sc_docs.rb +3 -0
  9. data/lib/sc_docs/cli.rb +54 -0
  10. data/lib/sc_docs/docs/Buildfile +8 -0
  11. data/lib/sc_docs/docs/README +8 -0
  12. data/lib/sc_docs/docs/apps/docs/Buildfile +15 -0
  13. data/lib/sc_docs/docs/apps/docs/controllers/classes.js +27 -0
  14. data/lib/sc_docs/docs/apps/docs/controllers/search_controller.js +62 -0
  15. data/lib/sc_docs/docs/apps/docs/controllers/selected_class.js +143 -0
  16. data/lib/sc_docs/docs/apps/docs/core.js +148 -0
  17. data/lib/sc_docs/docs/apps/docs/main.js +41 -0
  18. data/lib/sc_docs/docs/apps/docs/models/class.js +63 -0
  19. data/lib/sc_docs/docs/apps/docs/models/entity.js +29 -0
  20. data/lib/sc_docs/docs/apps/docs/models/method.js +79 -0
  21. data/lib/sc_docs/docs/apps/docs/models/property.js +48 -0
  22. data/lib/sc_docs/docs/apps/docs/resources/images/method_icon.png +0 -0
  23. data/lib/sc_docs/docs/apps/docs/resources/images/property_icon.png +0 -0
  24. data/lib/sc_docs/docs/apps/docs/resources/loading.rhtml +9 -0
  25. data/lib/sc_docs/docs/apps/docs/resources/main_page.css +156 -0
  26. data/lib/sc_docs/docs/apps/docs/resources/main_page.js +91 -0
  27. data/lib/sc_docs/docs/apps/docs/resources/templates/details.handlebars +81 -0
  28. data/lib/sc_docs/docs/apps/docs/resources/templates/extensions/signature.js +0 -0
  29. data/lib/sc_docs/docs/apps/docs/system/jquery_ui.js +62 -0
  30. data/lib/sc_docs/docs/apps/docs/system/showdown.js +1297 -0
  31. data/lib/sc_docs/docs/apps/docs/theme.js +29 -0
  32. data/lib/sc_docs/docs/apps/docs/views/detail_list.js +24 -0
  33. data/lib/sc_docs/docs/apps/docs/views/master_list.js +35 -0
  34. data/lib/sc_docs/docs/apps/docs/views/methods_collection.js +80 -0
  35. data/lib/sc_docs/docs/apps/docs/views/properties_collection.js +9 -0
  36. data/lib/sc_docs/generator.rb +145 -0
  37. data/lib/sc_docs/server.rb +21 -0
  38. data/lib/sc_docs/templates/docs.sproutcore.com/allclasses.tmpl +31 -0
  39. data/lib/sc_docs/templates/docs.sproutcore.com/allfiles.tmpl +66 -0
  40. data/lib/sc_docs/templates/docs.sproutcore.com/class.tmpl +437 -0
  41. data/lib/sc_docs/templates/docs.sproutcore.com/index.tmpl +52 -0
  42. data/lib/sc_docs/templates/docs.sproutcore.com/output/css/api.css +619 -0
  43. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/apidocs.jpg +0 -0
  44. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/apidocs.png +0 -0
  45. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/clearinput.png +0 -0
  46. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/cross.png +0 -0
  47. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/ddiagonal.png +0 -0
  48. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/diagonal.png +0 -0
  49. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/docbullet.jpg +0 -0
  50. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/docbullet.png +0 -0
  51. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/glow.png +0 -0
  52. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/logo.png +0 -0
  53. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/pixels.png +0 -0
  54. data/lib/sc_docs/templates/docs.sproutcore.com/output/img/search.png +0 -0
  55. data/lib/sc_docs/templates/docs.sproutcore.com/output/js/api.js +134 -0
  56. data/lib/sc_docs/templates/docs.sproutcore.com/output/js/jquery-bbq.js +18 -0
  57. data/lib/sc_docs/templates/docs.sproutcore.com/output/js/lib/jquery-1.5.1.min.js +16 -0
  58. data/lib/sc_docs/templates/docs.sproutcore.com/output/js/lib/modernizr-1.7.min.js +2 -0
  59. data/lib/sc_docs/templates/docs.sproutcore.com/output/js/plugin.js +1 -0
  60. data/lib/sc_docs/templates/docs.sproutcore.com/output/js/script.js +5 -0
  61. data/lib/sc_docs/templates/docs.sproutcore.com/publish.js +200 -0
  62. data/lib/sc_docs/templates/docs.sproutcore.com/static/default.css +300 -0
  63. data/lib/sc_docs/templates/docs.sproutcore.com/static/header.html +19 -0
  64. data/lib/sc_docs/templates/docs.sproutcore.com/static/index.html +19 -0
  65. data/lib/sc_docs/templates/docs.sproutcore.com/symbol.tmpl +35 -0
  66. data/lib/sc_docs/templates/sc_fixture/publish.js +632 -0
  67. data/lib/sc_docs/version.rb +4 -0
  68. data/sc_docs.gemspec +27 -0
  69. data/vendor/jsdoc/README.txt +109 -0
  70. data/vendor/jsdoc/app/frame.js +33 -0
  71. data/vendor/jsdoc/app/frame/Chain.js +102 -0
  72. data/vendor/jsdoc/app/frame/Dumper.js +144 -0
  73. data/vendor/jsdoc/app/frame/Hash.js +84 -0
  74. data/vendor/jsdoc/app/frame/Link.js +173 -0
  75. data/vendor/jsdoc/app/frame/Namespace.js +10 -0
  76. data/vendor/jsdoc/app/frame/Opt.js +134 -0
  77. data/vendor/jsdoc/app/frame/Reflection.js +26 -0
  78. data/vendor/jsdoc/app/frame/String.js +93 -0
  79. data/vendor/jsdoc/app/frame/Testrun.js +129 -0
  80. data/vendor/jsdoc/app/handlers/FOODOC.js +26 -0
  81. data/vendor/jsdoc/app/handlers/XMLDOC.js +26 -0
  82. data/vendor/jsdoc/app/handlers/XMLDOC/DomReader.js +159 -0
  83. data/vendor/jsdoc/app/handlers/XMLDOC/XMLDoc.js +16 -0
  84. data/vendor/jsdoc/app/handlers/XMLDOC/XMLParse.js +292 -0
  85. data/vendor/jsdoc/app/lib/JSDOC.js +106 -0
  86. data/vendor/jsdoc/app/lib/JSDOC/DocComment.js +204 -0
  87. data/vendor/jsdoc/app/lib/JSDOC/DocTag.js +294 -0
  88. data/vendor/jsdoc/app/lib/JSDOC/JsDoc.js +140 -0
  89. data/vendor/jsdoc/app/lib/JSDOC/JsPlate.js +109 -0
  90. data/vendor/jsdoc/app/lib/JSDOC/Lang.js +144 -0
  91. data/vendor/jsdoc/app/lib/JSDOC/Parser.js +146 -0
  92. data/vendor/jsdoc/app/lib/JSDOC/PluginManager.js +33 -0
  93. data/vendor/jsdoc/app/lib/JSDOC/Symbol.js +644 -0
  94. data/vendor/jsdoc/app/lib/JSDOC/SymbolSet.js +243 -0
  95. data/vendor/jsdoc/app/lib/JSDOC/TextStream.js +41 -0
  96. data/vendor/jsdoc/app/lib/JSDOC/Token.js +18 -0
  97. data/vendor/jsdoc/app/lib/JSDOC/TokenReader.js +332 -0
  98. data/vendor/jsdoc/app/lib/JSDOC/TokenStream.js +133 -0
  99. data/vendor/jsdoc/app/lib/JSDOC/Util.js +32 -0
  100. data/vendor/jsdoc/app/lib/JSDOC/Walker.js +507 -0
  101. data/vendor/jsdoc/app/main.js +111 -0
  102. data/vendor/jsdoc/app/plugins/commentSrcJson.js +20 -0
  103. data/vendor/jsdoc/app/plugins/frameworkPrototype.js +16 -0
  104. data/vendor/jsdoc/app/plugins/functionCall.js +10 -0
  105. data/vendor/jsdoc/app/plugins/publishSrcHilite.js +62 -0
  106. data/vendor/jsdoc/app/plugins/symbolLink.js +10 -0
  107. data/vendor/jsdoc/app/plugins/tagParamConfig.js +31 -0
  108. data/vendor/jsdoc/app/plugins/tagSynonyms.js +43 -0
  109. data/vendor/jsdoc/app/run.js +297 -0
  110. data/vendor/jsdoc/app/t/TestDoc.js +144 -0
  111. data/vendor/jsdoc/app/t/runner.js +13 -0
  112. data/vendor/jsdoc/app/test.js +342 -0
  113. data/vendor/jsdoc/app/test/addon.js +24 -0
  114. data/vendor/jsdoc/app/test/anon_inner.js +14 -0
  115. data/vendor/jsdoc/app/test/augments.js +31 -0
  116. data/vendor/jsdoc/app/test/augments2.js +26 -0
  117. data/vendor/jsdoc/app/test/borrows.js +46 -0
  118. data/vendor/jsdoc/app/test/borrows2.js +23 -0
  119. data/vendor/jsdoc/app/test/config.js +22 -0
  120. data/vendor/jsdoc/app/test/constructs.js +18 -0
  121. data/vendor/jsdoc/app/test/encoding.js +10 -0
  122. data/vendor/jsdoc/app/test/encoding_other.js +12 -0
  123. data/vendor/jsdoc/app/test/event.js +54 -0
  124. data/vendor/jsdoc/app/test/exports.js +14 -0
  125. data/vendor/jsdoc/app/test/functions_anon.js +39 -0
  126. data/vendor/jsdoc/app/test/functions_nested.js +33 -0
  127. data/vendor/jsdoc/app/test/global.js +13 -0
  128. data/vendor/jsdoc/app/test/globals.js +25 -0
  129. data/vendor/jsdoc/app/test/ignore.js +10 -0
  130. data/vendor/jsdoc/app/test/inner.js +16 -0
  131. data/vendor/jsdoc/app/test/jsdoc_test.js +477 -0
  132. data/vendor/jsdoc/app/test/lend.js +33 -0
  133. data/vendor/jsdoc/app/test/memberof.js +19 -0
  134. data/vendor/jsdoc/app/test/memberof2.js +38 -0
  135. data/vendor/jsdoc/app/test/memberof3.js +33 -0
  136. data/vendor/jsdoc/app/test/memberof_constructor.js +17 -0
  137. data/vendor/jsdoc/app/test/module.js +17 -0
  138. data/vendor/jsdoc/app/test/multi_methods.js +25 -0
  139. data/vendor/jsdoc/app/test/name.js +19 -0
  140. data/vendor/jsdoc/app/test/namespace_nested.js +23 -0
  141. data/vendor/jsdoc/app/test/nocode.js +13 -0
  142. data/vendor/jsdoc/app/test/oblit_anon.js +20 -0
  143. data/vendor/jsdoc/app/test/overview.js +20 -0
  144. data/vendor/jsdoc/app/test/param_inline.js +37 -0
  145. data/vendor/jsdoc/app/test/params_optional.js +8 -0
  146. data/vendor/jsdoc/app/test/prototype.js +17 -0
  147. data/vendor/jsdoc/app/test/prototype_nested.js +9 -0
  148. data/vendor/jsdoc/app/test/prototype_oblit.js +13 -0
  149. data/vendor/jsdoc/app/test/prototype_oblit_constructor.js +24 -0
  150. data/vendor/jsdoc/app/test/public.js +10 -0
  151. data/vendor/jsdoc/app/test/scripts/code.js +5 -0
  152. data/vendor/jsdoc/app/test/scripts/notcode.txt +5 -0
  153. data/vendor/jsdoc/app/test/shared.js +42 -0
  154. data/vendor/jsdoc/app/test/shared2.js +2 -0
  155. data/vendor/jsdoc/app/test/shortcuts.js +22 -0
  156. data/vendor/jsdoc/app/test/static_this.js +13 -0
  157. data/vendor/jsdoc/app/test/synonyms.js +31 -0
  158. data/vendor/jsdoc/app/test/tosource.js +23 -0
  159. data/vendor/jsdoc/app/test/variable_redefine.js +14 -0
  160. data/vendor/jsdoc/changes.txt +127 -0
  161. data/vendor/jsdoc/conf/sample.conf +31 -0
  162. metadata +240 -0
@@ -0,0 +1,33 @@
1
+ /**
2
+ @namespace Holds functionality related to running plugins.
3
+ */
4
+ JSDOC.PluginManager = {
5
+ }
6
+
7
+ /**
8
+ @param name A unique name that identifies that plugin.
9
+ @param handlers A collection of named functions. The names correspond to hooks in the core code.
10
+ */
11
+ JSDOC.PluginManager.registerPlugin = function(/**String*/name, /**Object*/handlers) {
12
+ if (!defined(JSDOC.PluginManager.plugins))
13
+ /** The collection of all plugins. Requires a unique name for each.
14
+ */
15
+ JSDOC.PluginManager.plugins = {};
16
+
17
+
18
+ JSDOC.PluginManager.plugins[name] = handlers;
19
+ }
20
+
21
+ /**
22
+ @param hook The name of the hook that is being caught.
23
+ @param target Any object. This will be passed as the only argument to the handler whose
24
+ name matches the hook name. Handlers cannot return a value, so must modify the target
25
+ object to have an effect.
26
+ */
27
+ JSDOC.PluginManager.run = function(/**String*/hook, /**Mixed*/target) {
28
+ for (var name in JSDOC.PluginManager.plugins) {
29
+ if (defined(JSDOC.PluginManager.plugins[name][hook])) {
30
+ JSDOC.PluginManager.plugins[name][hook](target);
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,644 @@
1
+ if (typeof JSDOC == "undefined") JSDOC = {};
2
+
3
+ /**
4
+ Create a new Symbol.
5
+ @class Represents a symbol in the source code.
6
+ */
7
+ JSDOC.Symbol = function() {
8
+ this.init();
9
+ if (arguments.length) this.populate.apply(this, arguments);
10
+ }
11
+
12
+ JSDOC.Symbol.count = 0;
13
+
14
+ JSDOC.Symbol.prototype.init = function() {
15
+ this._name = "";
16
+ this._params = [];
17
+ this.$args = [];
18
+ this.addOn = "";
19
+ this.alias = "";
20
+ this.augments = [];
21
+ this.author = "";
22
+ this.classDesc = "";
23
+ this.comment = {};
24
+ this.defaultValue = undefined;
25
+ this.deprecated = "";
26
+ this.desc = "";
27
+ this.example = [];
28
+ this.exceptions = [];
29
+ this.fires = [];
30
+ this.id = JSDOC.Symbol.count++;
31
+ this.inherits = [];
32
+ this.inheritsFrom = [];
33
+ this.isa = "OBJECT";
34
+ this.isConstant = false;
35
+ this.isEvent = false;
36
+ this.isIgnored = false;
37
+ this.isInner = false;
38
+ this.isNamespace = false;
39
+ this.isPrivate = false;
40
+ this.isStatic = false;
41
+ this.memberOf = "";
42
+ this.methods = [];
43
+ this.properties = [];
44
+ this.requires = [];
45
+ this.returns = [];
46
+ this.see = [];
47
+ this.since = "";
48
+ this.srcFile = {};
49
+ this.type = "";
50
+ this.version = "";
51
+ }
52
+
53
+ JSDOC.Symbol.prototype.serialize = function() {
54
+ var keys = [];
55
+ for (var p in this) {
56
+ keys.push (p);
57
+ }
58
+ keys = keys.sort();
59
+
60
+ var out = "";
61
+ for (var i in keys) {
62
+ if (typeof this[keys[i]] == "function") continue;
63
+ out += keys[i]+" => "+Dumper.dump(this[keys[i]])+",\n";
64
+ }
65
+ return "\n{\n" + out + "}\n";
66
+ }
67
+
68
+ JSDOC.Symbol.prototype.clone = function() {
69
+ var clone = new JSDOC.Symbol();
70
+ clone.populate.apply(clone, this.$args); // repopulate using the original arguments
71
+ clone.srcFile = this.srcFile; // not the current srcFile, the one when the original was made
72
+ return clone;
73
+ }
74
+
75
+ JSDOC.Symbol.prototype.__defineSetter__("name",
76
+ function(n) { n = n.replace(/^_global_[.#-]/, ""); n = n.replace(/\.prototype\.?/g, '#'); this._name = n; }
77
+ );
78
+ JSDOC.Symbol.prototype.__defineGetter__("name",
79
+ function() { return this._name; }
80
+ );
81
+ JSDOC.Symbol.prototype.__defineSetter__("params",
82
+ function(v) {
83
+ for (var i = 0, l = v.length; i < l; i++) {
84
+ if (v[i].constructor != JSDOC.DocTag) { // may be a generic object parsed from signature, like {type:..., name:...}
85
+ this._params[i] = new JSDOC.DocTag("param"+((v[i].type)?" {"+v[i].type+"}":"")+" "+v[i].name);
86
+ }
87
+ else {
88
+ this._params[i] = v[i];
89
+ }
90
+ }
91
+ }
92
+ );
93
+ JSDOC.Symbol.prototype.__defineGetter__("params",
94
+ function() { return this._params; }
95
+ );
96
+
97
+ JSDOC.Symbol.prototype.getEvents = function() {
98
+ var events = [];
99
+ for (var i = 0, l = this.methods.length; i < l; i++) {
100
+ if (this.methods[i].isEvent) {
101
+ this.methods[i].name = this.methods[i].name.replace("event:", "");
102
+ events.push(this.methods[i]);
103
+ }
104
+ }
105
+ return events;
106
+ }
107
+
108
+ JSDOC.Symbol.prototype.getMethods = function() {
109
+ var nonEvents = [];
110
+ for (var i = 0, l = this.methods.length; i < l; i++) {
111
+ if (!this.methods[i].isEvent) {
112
+ nonEvents.push(this.methods[i]);
113
+ }
114
+ }
115
+ return nonEvents;
116
+ }
117
+
118
+
119
+ JSDOC.Symbol.prototype.populate = function(
120
+ /** String */ name,
121
+ /** Object[] */ params,
122
+ /** String */ isa,
123
+ /** JSDOC.DocComment */ comment
124
+ ) {
125
+ this.$args = arguments;
126
+
127
+ this.name = name;
128
+ this.alias = this.name;
129
+
130
+ this.params = params;
131
+ this.isa = (isa == "VIRTUAL")? "OBJECT":isa;
132
+ this.comment = comment || new JSDOC.DocComment("");
133
+ this.srcFile = JSDOC.Symbol.srcFile;
134
+
135
+ if (this.is("FILE") && !this.alias) this.alias = this.srcFile;
136
+
137
+ this.setTags();
138
+
139
+ if (typeof JSDOC.PluginManager != "undefined") {
140
+ JSDOC.PluginManager.run("onSymbol", this);
141
+ }
142
+ }
143
+
144
+ JSDOC.Symbol.prototype.setTags = function() {
145
+ // @author
146
+ var authors = this.comment.getTag("author");
147
+ if (authors.length) {
148
+ this.author = authors.map(function($){return $.desc;}).join(", ");
149
+ }
150
+
151
+ /*t:
152
+ plan(34, "testing JSDOC.Symbol");
153
+
154
+ requires("../lib/JSDOC/DocComment.js");
155
+ requires("../frame/String.js");
156
+ requires("../lib/JSDOC/DocTag.js");
157
+
158
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@author Joe Smith*"+"/"));
159
+ is(sym.author, "Joe Smith", "@author tag, author is found.");
160
+ */
161
+
162
+ // @desc
163
+ var descs = this.comment.getTag("desc");
164
+ if (descs.length) {
165
+ this.desc = descs.map(function($){return $.desc;}).join("\n"); // multiple descriptions are concatenated into one
166
+ }
167
+
168
+ /*t:
169
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@desc This is a description.*"+"/"));
170
+ is(sym.desc, "This is a description.", "@desc tag, description is found.");
171
+ */
172
+
173
+ // @overview
174
+ if (this.is("FILE")) {
175
+ if (!this.alias) this.alias = this.srcFile;
176
+
177
+ var overviews = this.comment.getTag("overview");
178
+ if (overviews.length) {
179
+ this.desc = [this.desc].concat(overviews.map(function($){return $.desc;})).join("\n");
180
+ }
181
+ }
182
+
183
+ /*t:
184
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@overview This is an overview.*"+"/"));
185
+ is(sym.desc, "\nThis is an overview.", "@overview tag, description is found.");
186
+ */
187
+
188
+ // @since
189
+ var sinces = this.comment.getTag("since");
190
+ if (sinces.length) {
191
+ this.since = sinces.map(function($){return $.desc;}).join(", ");
192
+ }
193
+
194
+ /*t:
195
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@since 1.01*"+"/"));
196
+ is(sym.since, "1.01", "@since tag, description is found.");
197
+ */
198
+
199
+ // @constant
200
+ if (this.comment.getTag("constant").length) {
201
+ this.isConstant = true;
202
+ }
203
+
204
+ /*t:
205
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@constant*"+"/"));
206
+ is(sym.isConstant, true, "@constant tag, isConstant set.");
207
+ */
208
+
209
+ // @version
210
+ var versions = this.comment.getTag("version");
211
+ if (versions.length) {
212
+ this.version = versions.map(function($){return $.desc;}).join(", ");
213
+ }
214
+
215
+ /*t:
216
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@version 2.0x*"+"/"));
217
+ is(sym.version, "2.0x", "@version tag, version is found.");
218
+ */
219
+
220
+ // @deprecated
221
+ var deprecateds = this.comment.getTag("deprecated");
222
+ if (deprecateds.length) {
223
+ this.deprecated = deprecateds.map(function($){return $.desc;}).join("\n");
224
+ }
225
+
226
+ /*t:
227
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@deprecated Use other method.*"+"/"));
228
+ is(sym.deprecated, "Use other method.", "@deprecated tag, desc is found.");
229
+ */
230
+
231
+ // @example
232
+ var examples = this.comment.getTag("example");
233
+ if (examples.length) {
234
+ this.example = examples.map(
235
+ // trim trailing whitespace
236
+ function($) {
237
+ $.desc = $.desc.replace(/\s+$/, "");
238
+ return $;
239
+ }
240
+ );
241
+ }
242
+
243
+ /*t:
244
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@example This\n is an example. \n*"+"/"));
245
+ isnt(typeof sym.example[0], "undefined", "@example tag, creates sym.example array.");
246
+ is(sym.example[0], "This\n is an example.", "@example tag, desc is found.");
247
+ */
248
+
249
+ // @see
250
+ var sees = this.comment.getTag("see");
251
+ if (sees.length) {
252
+ var thisSee = this.see;
253
+ sees.map(function($){thisSee.push($.desc);});
254
+ }
255
+
256
+ /*t:
257
+ var sym = new JSDOC.Symbol("foo", [], "FILE", new JSDOC.DocComment("/**@see The other thing.*"+"/"));
258
+ is(sym.see, "The other thing.", "@see tag, desc is found.");
259
+ */
260
+
261
+ // @class
262
+ var classes = this.comment.getTag("class");
263
+ if (classes.length) {
264
+ this.isa = "CONSTRUCTOR";
265
+ this.classDesc = classes[0].desc; // desc can't apply to the constructor as there is none.
266
+ }
267
+
268
+ /*t:
269
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@class This describes the class.*"+"/"));
270
+ is(sym.isa, "CONSTRUCTOR", "@class tag, makes symbol a constructor.");
271
+ is(sym.classDesc, "This describes the class.", "@class tag, class description is found.");
272
+ */
273
+
274
+ // @namespace
275
+ var namespaces = this.comment.getTag("namespace");
276
+ if (namespaces.length) {
277
+ this.classDesc = namespaces[0].desc;
278
+ this.isNamespace = true;
279
+ }
280
+
281
+ /*t:
282
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@namespace This describes the namespace.*"+"/"));
283
+ is(sym.classDesc, "This describes the namespace.", "@namespace tag, class description is found.");
284
+ */
285
+
286
+ // @param
287
+ var params = this.comment.getTag("param");
288
+ if (params.length) {
289
+ // user-defined params overwrite those with same name defined by the parser
290
+ var thisParams = this.params;
291
+
292
+ if (thisParams.length == 0) { // none exist yet, so just bung all these user-defined params straight in
293
+ this.params = params;
294
+ }
295
+ else { // need to overlay these user-defined params on to existing parser-defined params
296
+ for (var i = 0, l = params.length; i < l; i++) {
297
+ if (thisParams[i]) {
298
+ if (params[i].type) thisParams[i].type = params[i].type;
299
+ thisParams[i].name = params[i].name;
300
+ thisParams[i].desc = params[i].desc;
301
+ thisParams[i].isOptional = params[i].isOptional;
302
+ thisParams[i].defaultValue = params[i].defaultValue;
303
+ }
304
+ else thisParams[i] = params[i];
305
+ }
306
+ }
307
+ }
308
+
309
+ /*t:
310
+ var sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.*"+"/"));
311
+ is(sym.params.length, 1, "parser defined param is found.");
312
+
313
+ sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages*"+"/"));
314
+ is(sym.params.length, 1, "user defined param is found.");
315
+ is(sym.params[0].type, "array", "user defined param type is found.");
316
+ is(sym.params[0].name, "pages", "user defined param name is found.");
317
+
318
+ sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/"));
319
+ is(sym.params.length, 1, "user defined param overwrites parser defined param.");
320
+ is(sym.params[0].type, "string", "user defined param type overwrites parser defined param type.");
321
+ is(sym.params[0].name, "uid", "user defined param name overwrites parser defined param name.");
322
+
323
+ sym = new JSDOC.Symbol("foo", [{type: "array", name: "pages"}, {type: "number", name: "count"}], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {string} uid*"+"/"));
324
+ is(sym.params.length, 2, "user defined params overlay parser defined params.");
325
+ is(sym.params[1].type, "number", "user defined param type overlays parser defined param type.");
326
+ is(sym.params[1].name, "count", "user defined param name overlays parser defined param name.");
327
+
328
+ sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**Description.\n@param {array} pages The pages description.*"+"/"));
329
+ is(sym.params.length, 1, "user defined param with description is found.");
330
+ is(sym.params[0].desc, "The pages description.", "user defined param description is found.");
331
+ */
332
+
333
+ // @constructor
334
+ if (this.comment.getTag("constructor").length) {
335
+ this.isa = "CONSTRUCTOR";
336
+ }
337
+
338
+ /*t:
339
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@constructor*"+"/"));
340
+ is(sym.isa, "CONSTRUCTOR", "@constructor tag, makes symbol a constructor.");
341
+ */
342
+
343
+ // @static
344
+ if (this.comment.getTag("static").length) {
345
+ this.isStatic = true;
346
+ if (this.isa == "CONSTRUCTOR") {
347
+ this.isNamespace = true;
348
+ }
349
+ }
350
+
351
+ /*t:
352
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@static\n@constructor*"+"/"));
353
+ is(sym.isStatic, true, "@static tag, makes isStatic true.");
354
+ is(sym.isNamespace, true, "@static and @constructor tag, makes isNamespace true.");
355
+ */
356
+
357
+ // @inner
358
+ if (this.comment.getTag("inner").length) {
359
+ this.isInner = true;
360
+ this.isStatic = false;
361
+ }
362
+
363
+ /*t:
364
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@inner*"+"/"));
365
+ is(sym.isStatic, false, "@inner tag, makes isStatic false.");
366
+ is(sym.isInner, true, "@inner makes isInner true.");
367
+ */
368
+
369
+ // @name
370
+ var names = this.comment.getTag("name");
371
+ if (names.length) {
372
+ this.name = names[0].desc;
373
+ }
374
+
375
+ /*t:
376
+ // todo
377
+ */
378
+
379
+ // @field
380
+ if (this.comment.getTag("field").length) {
381
+ this.isa = "OBJECT";
382
+ }
383
+
384
+ /*t:
385
+ var sym = new JSDOC.Symbol("foo", [], "FUNCTION", new JSDOC.DocComment("/**@field*"+"/"));
386
+ is(sym.isa, "OBJECT", "@field tag, makes symbol an object.");
387
+ */
388
+
389
+ // @function
390
+ if (this.comment.getTag("function").length) {
391
+ this.isa = "FUNCTION";
392
+ if (/event:/.test(this.alias)) this.isEvent = true;
393
+ }
394
+
395
+ /*t:
396
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@function*"+"/"));
397
+ is(sym.isa, "FUNCTION", "@function tag, makes symbol a function.");
398
+ */
399
+
400
+ // @event
401
+ var events = this.comment.getTag("event");
402
+ if (events.length) {
403
+ this.isa = "FUNCTION";
404
+ this.isEvent = true;
405
+ if (!/event:/.test(this.alias))
406
+ this.alias = this.alias.replace(/^(.*[.#-])([^.#-]+)$/, "$1event:$2");
407
+ }
408
+
409
+ /*t:
410
+ var sym = new JSDOC.Symbol("foo", [], "OBJECT", new JSDOC.DocComment("/**@event*"+"/"));
411
+ is(sym.isa, "FUNCTION", "@event tag, makes symbol a function.");
412
+ is(sym.isEvent, true, "@event makes isEvent true.");
413
+ */
414
+
415
+ // @fires
416
+ var fires = this.comment.getTag("fires");
417
+ if (fires.length) {
418
+ for (var i = 0; i < fires.length; i++) {
419
+ this.fires.push(fires[i].desc);
420
+ }
421
+ }
422
+
423
+ /*t:
424
+ // todo
425
+ */
426
+
427
+ // @property
428
+ var properties = this.comment.getTag("property");
429
+ if (properties.length) {
430
+ thisProperties = this.properties;
431
+ for (var i = 0; i < properties.length; i++) {
432
+ var property = new JSDOC.Symbol(this.alias+"#"+properties[i].name, [], "OBJECT", new JSDOC.DocComment("/**"+properties[i].desc+"*/"));
433
+ // TODO: shouldn't the following happen in the addProperty method of Symbol?
434
+ if (properties[i].type) property.type = properties[i].type;
435
+ if (properties[i].defaultValue) property.defaultValue = properties[i].defaultValue;
436
+ this.addProperty(property);
437
+ if (!JSDOC.Parser.symbols.getSymbolByName(property.name))
438
+ JSDOC.Parser.addSymbol(property);
439
+ }
440
+ }
441
+
442
+ /*t:
443
+ // todo
444
+ */
445
+
446
+ // @return
447
+ var returns = this.comment.getTag("return");
448
+ if (returns.length) { // there can be many return tags in a single doclet
449
+ this.returns = returns;
450
+ this.type = returns.map(function($){return $.type}).join(", ");
451
+ }
452
+
453
+ /*t:
454
+ // todo
455
+ */
456
+
457
+ // @exception
458
+ this.exceptions = this.comment.getTag("throws");
459
+
460
+ /*t:
461
+ // todo
462
+ */
463
+
464
+ // @requires
465
+ var requires = this.comment.getTag("requires");
466
+ if (requires.length) {
467
+ this.requires = requires.map(function($){return $.desc});
468
+ }
469
+
470
+ /*t:
471
+ // todo
472
+ */
473
+
474
+ // @type
475
+ var types = this.comment.getTag("type");
476
+ if (types.length) {
477
+ this.type = types[0].desc; //multiple type tags are ignored
478
+ }
479
+
480
+ /*t:
481
+ // todo
482
+ */
483
+
484
+ // @private
485
+ if (this.comment.getTag("private").length || this.isInner) {
486
+ this.isPrivate = true;
487
+ }
488
+
489
+ // @ignore
490
+ if (this.comment.getTag("ignore").length) {
491
+ this.isIgnored = true;
492
+ }
493
+
494
+ /*t:
495
+ // todo
496
+ */
497
+
498
+ // @inherits ... as ...
499
+ var inherits = this.comment.getTag("inherits");
500
+ if (inherits.length) {
501
+ for (var i = 0; i < inherits.length; i++) {
502
+ if (/^\s*([a-z$0-9_.#:-]+)(?:\s+as\s+([a-z$0-9_.#:-]+))?/i.test(inherits[i].desc)) {
503
+ var inAlias = RegExp.$1;
504
+ var inAs = RegExp.$2 || inAlias;
505
+
506
+ if (inAlias) inAlias = inAlias.replace(/\.prototype\.?/g, "#");
507
+
508
+ if (inAs) {
509
+ inAs = inAs.replace(/\.prototype\.?/g, "#");
510
+ inAs = inAs.replace(/^this\.?/, "#");
511
+ }
512
+
513
+ if (inAs.indexOf(inAlias) != 0) { //not a full namepath
514
+ var joiner = ".";
515
+ if (this.alias.charAt(this.alias.length-1) == "#" || inAs.charAt(0) == "#") {
516
+ joiner = "";
517
+ }
518
+ inAs = this.alias + joiner + inAs;
519
+ }
520
+ }
521
+ this.inherits.push({alias: inAlias, as: inAs});
522
+ }
523
+ }
524
+
525
+ /*t:
526
+ // todo
527
+ */
528
+
529
+ // @augments
530
+ this.augments = this.comment.getTag("augments");
531
+
532
+ // @default
533
+ var defaults = this.comment.getTag("default");
534
+ if (defaults.length) {
535
+ if (this.is("OBJECT")) {
536
+ this.defaultValue = defaults[0].desc;
537
+ }
538
+ }
539
+
540
+ /*t:
541
+ // todo
542
+ */
543
+
544
+ // @memberOf
545
+ var memberOfs = this.comment.getTag("memberOf");
546
+ if (memberOfs.length) {
547
+ this.memberOf = memberOfs[0].desc;
548
+ this.memberOf = this.memberOf.replace(/\.prototype\.?/g, "#");
549
+ }
550
+
551
+ /*t:
552
+ // todo
553
+ */
554
+
555
+ // @public
556
+ if (this.comment.getTag("public").length) {
557
+ this.isPrivate = false;
558
+ }
559
+
560
+ /*t:
561
+ // todo
562
+ */
563
+
564
+ if (JSDOC.PluginManager) {
565
+ JSDOC.PluginManager.run("onSetTags", this);
566
+ }
567
+ }
568
+
569
+ JSDOC.Symbol.prototype.is = function(what) {
570
+ return this.isa === what;
571
+ }
572
+
573
+ JSDOC.Symbol.prototype.isBuiltin = function() {
574
+ return JSDOC.Lang.isBuiltin(this.alias);
575
+ }
576
+
577
+ JSDOC.Symbol.prototype.setType = function(/**String*/comment, /**Boolean*/overwrite) {
578
+ if (!overwrite && this.type) return;
579
+ var typeComment = JSDOC.DocComment.unwrapComment(comment);
580
+ this.type = typeComment;
581
+ }
582
+
583
+ JSDOC.Symbol.prototype.inherit = function(symbol) {
584
+ if (!this.hasMember(symbol.name) && !symbol.isInner) {
585
+ if (symbol.is("FUNCTION"))
586
+ this.methods.push(symbol);
587
+ else if (symbol.is("OBJECT"))
588
+ this.properties.push(symbol);
589
+ }
590
+ }
591
+
592
+ JSDOC.Symbol.prototype.hasMember = function(name) {
593
+ return (this.hasMethod(name) || this.hasProperty(name));
594
+ }
595
+
596
+ JSDOC.Symbol.prototype.addMember = function(symbol) {
597
+ if (symbol.is("FUNCTION")) { this.addMethod(symbol); }
598
+ else if (symbol.is("OBJECT")) { this.addProperty(symbol); }
599
+ }
600
+
601
+ JSDOC.Symbol.prototype.hasMethod = function(name) {
602
+ var thisMethods = this.methods;
603
+ for (var i = 0, l = thisMethods.length; i < l; i++) {
604
+ if (thisMethods[i].name == name) return true;
605
+ if (thisMethods[i].alias == name) return true;
606
+ }
607
+ return false;
608
+ }
609
+
610
+ JSDOC.Symbol.prototype.addMethod = function(symbol) {
611
+ var methodAlias = symbol.alias;
612
+ var thisMethods = this.methods;
613
+ for (var i = 0, l = thisMethods.length; i < l; i++) {
614
+ if (thisMethods[i].alias == methodAlias) {
615
+ thisMethods[i] = symbol; // overwriting previous method
616
+ return;
617
+ }
618
+ }
619
+ thisMethods.push(symbol); // new method with this alias
620
+ }
621
+
622
+ JSDOC.Symbol.prototype.hasProperty = function(name) {
623
+ var thisProperties = this.properties;
624
+ for (var i = 0, l = thisProperties.length; i < l; i++) {
625
+ if (thisProperties[i].name == name) return true;
626
+ if (thisProperties[i].alias == name) return true;
627
+ }
628
+ return false;
629
+ }
630
+
631
+ JSDOC.Symbol.prototype.addProperty = function(symbol) {
632
+ var propertyAlias = symbol.alias;
633
+ var thisProperties = this.properties;
634
+ for (var i = 0, l = thisProperties.length; i < l; i++) {
635
+ if (thisProperties[i].alias == propertyAlias) {
636
+ thisProperties[i] = symbol; // overwriting previous property
637
+ return;
638
+ }
639
+ }
640
+
641
+ thisProperties.push(symbol); // new property with this alias
642
+ }
643
+
644
+ JSDOC.Symbol.srcFile = ""; //running reference to the current file being parsed