jsduck 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (388) hide show
  1. data/.gitignore +1 -0
  2. data/COPYING +674 -0
  3. data/README.md +197 -0
  4. data/Rakefile +23 -0
  5. data/bin/jsduck +63 -0
  6. data/jsduck.gemspec +21 -0
  7. data/lib/jsduck/aggregator.rb +104 -0
  8. data/lib/jsduck/app.rb +89 -0
  9. data/lib/jsduck/cfg_table.rb +21 -0
  10. data/lib/jsduck/class.rb +116 -0
  11. data/lib/jsduck/doc_formatter.rb +69 -0
  12. data/lib/jsduck/doc_parser.rb +277 -0
  13. data/lib/jsduck/event_table.rb +33 -0
  14. data/lib/jsduck/lexer.rb +193 -0
  15. data/lib/jsduck/long_params.rb +31 -0
  16. data/lib/jsduck/merger.rb +286 -0
  17. data/lib/jsduck/method_table.rb +45 -0
  18. data/lib/jsduck/page.rb +56 -0
  19. data/lib/jsduck/parser.rb +195 -0
  20. data/lib/jsduck/property_table.rb +21 -0
  21. data/lib/jsduck/short_params.rb +28 -0
  22. data/lib/jsduck/table.rb +109 -0
  23. data/lib/jsduck/tree.rb +104 -0
  24. data/lib/jsduck/tree_icons.rb +19 -0
  25. data/template/index.html +45 -0
  26. data/template/resources/TabCloseMenu.js +150 -0
  27. data/template/resources/block-bottom.gif +0 -0
  28. data/template/resources/block-top.gif +0 -0
  29. data/template/resources/class.gif +0 -0
  30. data/template/resources/cmp.gif +0 -0
  31. data/template/resources/collapse-all.gif +0 -0
  32. data/template/resources/config.gif +0 -0
  33. data/template/resources/css/ext-all.css +6789 -0
  34. data/template/resources/css/xtheme-gray.css +1654 -0
  35. data/template/resources/docs.css +359 -0
  36. data/template/resources/docs.gif +0 -0
  37. data/template/resources/docs.js +672 -0
  38. data/template/resources/event.gif +0 -0
  39. data/template/resources/expand-all.gif +0 -0
  40. data/template/resources/expand-bg-over.gif +0 -0
  41. data/template/resources/expand-bg.gif +0 -0
  42. data/template/resources/expand-members.gif +0 -0
  43. data/template/resources/ext-all.js +11 -0
  44. data/template/resources/ext-base.js +7 -0
  45. data/template/resources/extanim32.gif +0 -0
  46. data/template/resources/fav.gif +0 -0
  47. data/template/resources/favicon.ico +0 -0
  48. data/template/resources/hd-bg.png +0 -0
  49. data/template/resources/hide-inherited.gif +0 -0
  50. data/template/resources/images/default/box/corners-blue.gif +0 -0
  51. data/template/resources/images/default/box/corners.gif +0 -0
  52. data/template/resources/images/default/box/l-blue.gif +0 -0
  53. data/template/resources/images/default/box/l.gif +0 -0
  54. data/template/resources/images/default/box/r-blue.gif +0 -0
  55. data/template/resources/images/default/box/r.gif +0 -0
  56. data/template/resources/images/default/box/tb-blue.gif +0 -0
  57. data/template/resources/images/default/box/tb.gif +0 -0
  58. data/template/resources/images/default/button/arrow.gif +0 -0
  59. data/template/resources/images/default/button/btn.gif +0 -0
  60. data/template/resources/images/default/button/group-cs.gif +0 -0
  61. data/template/resources/images/default/button/group-lr.gif +0 -0
  62. data/template/resources/images/default/button/group-tb.gif +0 -0
  63. data/template/resources/images/default/button/s-arrow-b-noline.gif +0 -0
  64. data/template/resources/images/default/button/s-arrow-b.gif +0 -0
  65. data/template/resources/images/default/button/s-arrow-bo.gif +0 -0
  66. data/template/resources/images/default/button/s-arrow-noline.gif +0 -0
  67. data/template/resources/images/default/button/s-arrow-o.gif +0 -0
  68. data/template/resources/images/default/button/s-arrow.gif +0 -0
  69. data/template/resources/images/default/dd/drop-add.gif +0 -0
  70. data/template/resources/images/default/dd/drop-no.gif +0 -0
  71. data/template/resources/images/default/dd/drop-yes.gif +0 -0
  72. data/template/resources/images/default/editor/tb-sprite.gif +0 -0
  73. data/template/resources/images/default/form/checkbox.gif +0 -0
  74. data/template/resources/images/default/form/clear-trigger.gif +0 -0
  75. data/template/resources/images/default/form/clear-trigger.psd +0 -0
  76. data/template/resources/images/default/form/date-trigger.gif +0 -0
  77. data/template/resources/images/default/form/date-trigger.psd +0 -0
  78. data/template/resources/images/default/form/error-tip-corners.gif +0 -0
  79. data/template/resources/images/default/form/exclamation.gif +0 -0
  80. data/template/resources/images/default/form/radio.gif +0 -0
  81. data/template/resources/images/default/form/search-trigger.gif +0 -0
  82. data/template/resources/images/default/form/search-trigger.psd +0 -0
  83. data/template/resources/images/default/form/text-bg.gif +0 -0
  84. data/template/resources/images/default/form/trigger-square.gif +0 -0
  85. data/template/resources/images/default/form/trigger-square.psd +0 -0
  86. data/template/resources/images/default/form/trigger-tpl.gif +0 -0
  87. data/template/resources/images/default/form/trigger.gif +0 -0
  88. data/template/resources/images/default/form/trigger.psd +0 -0
  89. data/template/resources/images/default/gradient-bg.gif +0 -0
  90. data/template/resources/images/default/grid/arrow-left-white.gif +0 -0
  91. data/template/resources/images/default/grid/arrow-right-white.gif +0 -0
  92. data/template/resources/images/default/grid/col-move-bottom.gif +0 -0
  93. data/template/resources/images/default/grid/col-move-top.gif +0 -0
  94. data/template/resources/images/default/grid/columns.gif +0 -0
  95. data/template/resources/images/default/grid/dirty.gif +0 -0
  96. data/template/resources/images/default/grid/done.gif +0 -0
  97. data/template/resources/images/default/grid/drop-no.gif +0 -0
  98. data/template/resources/images/default/grid/drop-yes.gif +0 -0
  99. data/template/resources/images/default/grid/footer-bg.gif +0 -0
  100. data/template/resources/images/default/grid/grid-blue-hd.gif +0 -0
  101. data/template/resources/images/default/grid/grid-blue-split.gif +0 -0
  102. data/template/resources/images/default/grid/grid-hrow.gif +0 -0
  103. data/template/resources/images/default/grid/grid-loading.gif +0 -0
  104. data/template/resources/images/default/grid/grid-split.gif +0 -0
  105. data/template/resources/images/default/grid/grid-vista-hd.gif +0 -0
  106. data/template/resources/images/default/grid/grid3-hd-btn.gif +0 -0
  107. data/template/resources/images/default/grid/grid3-hrow-over.gif +0 -0
  108. data/template/resources/images/default/grid/grid3-hrow.gif +0 -0
  109. data/template/resources/images/default/grid/grid3-special-col-bg.gif +0 -0
  110. data/template/resources/images/default/grid/grid3-special-col-sel-bg.gif +0 -0
  111. data/template/resources/images/default/grid/group-by.gif +0 -0
  112. data/template/resources/images/default/grid/group-collapse.gif +0 -0
  113. data/template/resources/images/default/grid/group-expand-sprite.gif +0 -0
  114. data/template/resources/images/default/grid/group-expand.gif +0 -0
  115. data/template/resources/images/default/grid/hd-pop.gif +0 -0
  116. data/template/resources/images/default/grid/hmenu-asc.gif +0 -0
  117. data/template/resources/images/default/grid/hmenu-desc.gif +0 -0
  118. data/template/resources/images/default/grid/hmenu-lock.gif +0 -0
  119. data/template/resources/images/default/grid/hmenu-lock.png +0 -0
  120. data/template/resources/images/default/grid/hmenu-unlock.gif +0 -0
  121. data/template/resources/images/default/grid/hmenu-unlock.png +0 -0
  122. data/template/resources/images/default/grid/invalid_line.gif +0 -0
  123. data/template/resources/images/default/grid/loading.gif +0 -0
  124. data/template/resources/images/default/grid/mso-hd.gif +0 -0
  125. data/template/resources/images/default/grid/nowait.gif +0 -0
  126. data/template/resources/images/default/grid/page-first-disabled.gif +0 -0
  127. data/template/resources/images/default/grid/page-first.gif +0 -0
  128. data/template/resources/images/default/grid/page-last-disabled.gif +0 -0
  129. data/template/resources/images/default/grid/page-last.gif +0 -0
  130. data/template/resources/images/default/grid/page-next-disabled.gif +0 -0
  131. data/template/resources/images/default/grid/page-next.gif +0 -0
  132. data/template/resources/images/default/grid/page-prev-disabled.gif +0 -0
  133. data/template/resources/images/default/grid/page-prev.gif +0 -0
  134. data/template/resources/images/default/grid/pick-button.gif +0 -0
  135. data/template/resources/images/default/grid/refresh.gif +0 -0
  136. data/template/resources/images/default/grid/row-check-sprite.gif +0 -0
  137. data/template/resources/images/default/grid/row-expand-sprite.gif +0 -0
  138. data/template/resources/images/default/grid/row-over.gif +0 -0
  139. data/template/resources/images/default/grid/row-sel.gif +0 -0
  140. data/template/resources/images/default/grid/sort-hd.gif +0 -0
  141. data/template/resources/images/default/grid/sort_asc.gif +0 -0
  142. data/template/resources/images/default/grid/sort_desc.gif +0 -0
  143. data/template/resources/images/default/grid/wait.gif +0 -0
  144. data/template/resources/images/default/layout/collapse.gif +0 -0
  145. data/template/resources/images/default/layout/expand.gif +0 -0
  146. data/template/resources/images/default/layout/gradient-bg.gif +0 -0
  147. data/template/resources/images/default/layout/mini-bottom.gif +0 -0
  148. data/template/resources/images/default/layout/mini-left.gif +0 -0
  149. data/template/resources/images/default/layout/mini-right.gif +0 -0
  150. data/template/resources/images/default/layout/mini-top.gif +0 -0
  151. data/template/resources/images/default/layout/ns-collapse.gif +0 -0
  152. data/template/resources/images/default/layout/ns-expand.gif +0 -0
  153. data/template/resources/images/default/layout/panel-close.gif +0 -0
  154. data/template/resources/images/default/layout/panel-title-bg.gif +0 -0
  155. data/template/resources/images/default/layout/panel-title-light-bg.gif +0 -0
  156. data/template/resources/images/default/layout/stick.gif +0 -0
  157. data/template/resources/images/default/layout/stuck.gif +0 -0
  158. data/template/resources/images/default/layout/tab-close-on.gif +0 -0
  159. data/template/resources/images/default/layout/tab-close.gif +0 -0
  160. data/template/resources/images/default/menu/checked.gif +0 -0
  161. data/template/resources/images/default/menu/group-checked.gif +0 -0
  162. data/template/resources/images/default/menu/item-over.gif +0 -0
  163. data/template/resources/images/default/menu/menu-parent.gif +0 -0
  164. data/template/resources/images/default/menu/menu.gif +0 -0
  165. data/template/resources/images/default/menu/unchecked.gif +0 -0
  166. data/template/resources/images/default/panel/corners-sprite.gif +0 -0
  167. data/template/resources/images/default/panel/left-right.gif +0 -0
  168. data/template/resources/images/default/panel/light-hd.gif +0 -0
  169. data/template/resources/images/default/panel/tool-sprite-tpl.gif +0 -0
  170. data/template/resources/images/default/panel/tool-sprites.gif +0 -0
  171. data/template/resources/images/default/panel/tools-sprites-trans.gif +0 -0
  172. data/template/resources/images/default/panel/top-bottom.gif +0 -0
  173. data/template/resources/images/default/panel/top-bottom.png +0 -0
  174. data/template/resources/images/default/panel/white-corners-sprite.gif +0 -0
  175. data/template/resources/images/default/panel/white-left-right.gif +0 -0
  176. data/template/resources/images/default/panel/white-top-bottom.gif +0 -0
  177. data/template/resources/images/default/progress/progress-bg.gif +0 -0
  178. data/template/resources/images/default/qtip/bg.gif +0 -0
  179. data/template/resources/images/default/qtip/close.gif +0 -0
  180. data/template/resources/images/default/qtip/tip-anchor-sprite.gif +0 -0
  181. data/template/resources/images/default/qtip/tip-sprite.gif +0 -0
  182. data/template/resources/images/default/s.gif +0 -0
  183. data/template/resources/images/default/shadow-c.png +0 -0
  184. data/template/resources/images/default/shadow-lr.png +0 -0
  185. data/template/resources/images/default/shadow.png +0 -0
  186. data/template/resources/images/default/shared/blue-loading.gif +0 -0
  187. data/template/resources/images/default/shared/calendar.gif +0 -0
  188. data/template/resources/images/default/shared/glass-bg.gif +0 -0
  189. data/template/resources/images/default/shared/hd-sprite.gif +0 -0
  190. data/template/resources/images/default/shared/large-loading.gif +0 -0
  191. data/template/resources/images/default/shared/left-btn.gif +0 -0
  192. data/template/resources/images/default/shared/loading-balls.gif +0 -0
  193. data/template/resources/images/default/shared/right-btn.gif +0 -0
  194. data/template/resources/images/default/shared/warning.gif +0 -0
  195. data/template/resources/images/default/sizer/e-handle-dark.gif +0 -0
  196. data/template/resources/images/default/sizer/e-handle.gif +0 -0
  197. data/template/resources/images/default/sizer/ne-handle-dark.gif +0 -0
  198. data/template/resources/images/default/sizer/ne-handle.gif +0 -0
  199. data/template/resources/images/default/sizer/nw-handle-dark.gif +0 -0
  200. data/template/resources/images/default/sizer/nw-handle.gif +0 -0
  201. data/template/resources/images/default/sizer/s-handle-dark.gif +0 -0
  202. data/template/resources/images/default/sizer/s-handle.gif +0 -0
  203. data/template/resources/images/default/sizer/se-handle-dark.gif +0 -0
  204. data/template/resources/images/default/sizer/se-handle.gif +0 -0
  205. data/template/resources/images/default/sizer/square.gif +0 -0
  206. data/template/resources/images/default/sizer/sw-handle-dark.gif +0 -0
  207. data/template/resources/images/default/sizer/sw-handle.gif +0 -0
  208. data/template/resources/images/default/slider/slider-bg.png +0 -0
  209. data/template/resources/images/default/slider/slider-thumb.png +0 -0
  210. data/template/resources/images/default/slider/slider-v-bg.png +0 -0
  211. data/template/resources/images/default/slider/slider-v-thumb.png +0 -0
  212. data/template/resources/images/default/tabs/scroll-left.gif +0 -0
  213. data/template/resources/images/default/tabs/scroll-right.gif +0 -0
  214. data/template/resources/images/default/tabs/scroller-bg.gif +0 -0
  215. data/template/resources/images/default/tabs/tab-btm-inactive-left-bg.gif +0 -0
  216. data/template/resources/images/default/tabs/tab-btm-inactive-right-bg.gif +0 -0
  217. data/template/resources/images/default/tabs/tab-btm-left-bg.gif +0 -0
  218. data/template/resources/images/default/tabs/tab-btm-over-left-bg.gif +0 -0
  219. data/template/resources/images/default/tabs/tab-btm-over-right-bg.gif +0 -0
  220. data/template/resources/images/default/tabs/tab-btm-right-bg.gif +0 -0
  221. data/template/resources/images/default/tabs/tab-close.gif +0 -0
  222. data/template/resources/images/default/tabs/tab-strip-bg.gif +0 -0
  223. data/template/resources/images/default/tabs/tab-strip-bg.png +0 -0
  224. data/template/resources/images/default/tabs/tab-strip-btm-bg.gif +0 -0
  225. data/template/resources/images/default/tabs/tabs-sprite.gif +0 -0
  226. data/template/resources/images/default/toolbar/bg.gif +0 -0
  227. data/template/resources/images/default/toolbar/btn-arrow-light.gif +0 -0
  228. data/template/resources/images/default/toolbar/btn-arrow.gif +0 -0
  229. data/template/resources/images/default/toolbar/btn-over-bg.gif +0 -0
  230. data/template/resources/images/default/toolbar/gray-bg.gif +0 -0
  231. data/template/resources/images/default/toolbar/more.gif +0 -0
  232. data/template/resources/images/default/toolbar/tb-bg.gif +0 -0
  233. data/template/resources/images/default/toolbar/tb-btn-sprite.gif +0 -0
  234. data/template/resources/images/default/toolbar/tb-xl-btn-sprite.gif +0 -0
  235. data/template/resources/images/default/toolbar/tb-xl-sep.gif +0 -0
  236. data/template/resources/images/default/tree/arrows.gif +0 -0
  237. data/template/resources/images/default/tree/drop-add.gif +0 -0
  238. data/template/resources/images/default/tree/drop-between.gif +0 -0
  239. data/template/resources/images/default/tree/drop-no.gif +0 -0
  240. data/template/resources/images/default/tree/drop-over.gif +0 -0
  241. data/template/resources/images/default/tree/drop-under.gif +0 -0
  242. data/template/resources/images/default/tree/drop-yes.gif +0 -0
  243. data/template/resources/images/default/tree/elbow-end-minus-nl.gif +0 -0
  244. data/template/resources/images/default/tree/elbow-end-minus.gif +0 -0
  245. data/template/resources/images/default/tree/elbow-end-plus-nl.gif +0 -0
  246. data/template/resources/images/default/tree/elbow-end-plus.gif +0 -0
  247. data/template/resources/images/default/tree/elbow-end.gif +0 -0
  248. data/template/resources/images/default/tree/elbow-line.gif +0 -0
  249. data/template/resources/images/default/tree/elbow-minus-nl.gif +0 -0
  250. data/template/resources/images/default/tree/elbow-minus.gif +0 -0
  251. data/template/resources/images/default/tree/elbow-plus-nl.gif +0 -0
  252. data/template/resources/images/default/tree/elbow-plus.gif +0 -0
  253. data/template/resources/images/default/tree/elbow.gif +0 -0
  254. data/template/resources/images/default/tree/folder-open.gif +0 -0
  255. data/template/resources/images/default/tree/folder.gif +0 -0
  256. data/template/resources/images/default/tree/leaf.gif +0 -0
  257. data/template/resources/images/default/tree/loading.gif +0 -0
  258. data/template/resources/images/default/tree/s.gif +0 -0
  259. data/template/resources/images/default/window/icon-error.gif +0 -0
  260. data/template/resources/images/default/window/icon-info.gif +0 -0
  261. data/template/resources/images/default/window/icon-question.gif +0 -0
  262. data/template/resources/images/default/window/icon-warning.gif +0 -0
  263. data/template/resources/images/default/window/left-corners.png +0 -0
  264. data/template/resources/images/default/window/left-corners.psd +0 -0
  265. data/template/resources/images/default/window/left-right.png +0 -0
  266. data/template/resources/images/default/window/left-right.psd +0 -0
  267. data/template/resources/images/default/window/right-corners.png +0 -0
  268. data/template/resources/images/default/window/right-corners.psd +0 -0
  269. data/template/resources/images/default/window/top-bottom.png +0 -0
  270. data/template/resources/images/default/window/top-bottom.psd +0 -0
  271. data/template/resources/images/gray/button/btn-arrow.gif +0 -0
  272. data/template/resources/images/gray/button/btn-sprite.gif +0 -0
  273. data/template/resources/images/gray/button/btn.gif +0 -0
  274. data/template/resources/images/gray/button/group-cs.gif +0 -0
  275. data/template/resources/images/gray/button/group-lr.gif +0 -0
  276. data/template/resources/images/gray/button/group-tb.gif +0 -0
  277. data/template/resources/images/gray/button/s-arrow-bo.gif +0 -0
  278. data/template/resources/images/gray/button/s-arrow-o.gif +0 -0
  279. data/template/resources/images/gray/form/clear-trigger.gif +0 -0
  280. data/template/resources/images/gray/form/date-trigger.gif +0 -0
  281. data/template/resources/images/gray/form/search-trigger.gif +0 -0
  282. data/template/resources/images/gray/form/trigger-square.gif +0 -0
  283. data/template/resources/images/gray/form/trigger.gif +0 -0
  284. data/template/resources/images/gray/gradient-bg.gif +0 -0
  285. data/template/resources/images/gray/grid/col-move-bottom.gif +0 -0
  286. data/template/resources/images/gray/grid/col-move-top.gif +0 -0
  287. data/template/resources/images/gray/grid/grid3-hd-btn.gif +0 -0
  288. data/template/resources/images/gray/grid/grid3-hrow-over.gif +0 -0
  289. data/template/resources/images/gray/grid/grid3-hrow-over2.gif +0 -0
  290. data/template/resources/images/gray/grid/grid3-hrow.gif +0 -0
  291. data/template/resources/images/gray/grid/grid3-hrow2.gif +0 -0
  292. data/template/resources/images/gray/grid/grid3-special-col-bg.gif +0 -0
  293. data/template/resources/images/gray/grid/grid3-special-col-bg2.gif +0 -0
  294. data/template/resources/images/gray/grid/grid3-special-col-sel-bg.gif +0 -0
  295. data/template/resources/images/gray/grid/group-collapse.gif +0 -0
  296. data/template/resources/images/gray/grid/group-expand-sprite.gif +0 -0
  297. data/template/resources/images/gray/grid/group-expand.gif +0 -0
  298. data/template/resources/images/gray/grid/page-first.gif +0 -0
  299. data/template/resources/images/gray/grid/page-last.gif +0 -0
  300. data/template/resources/images/gray/grid/page-next.gif +0 -0
  301. data/template/resources/images/gray/grid/page-prev.gif +0 -0
  302. data/template/resources/images/gray/grid/refresh.gif +0 -0
  303. data/template/resources/images/gray/grid/row-expand-sprite.gif +0 -0
  304. data/template/resources/images/gray/grid/sort_asc.gif +0 -0
  305. data/template/resources/images/gray/grid/sort_desc.gif +0 -0
  306. data/template/resources/images/gray/menu/group-checked.gif +0 -0
  307. data/template/resources/images/gray/menu/item-over-disabled.gif +0 -0
  308. data/template/resources/images/gray/menu/item-over.gif +0 -0
  309. data/template/resources/images/gray/menu/menu-parent.gif +0 -0
  310. data/template/resources/images/gray/panel/corners-sprite.gif +0 -0
  311. data/template/resources/images/gray/panel/left-right.gif +0 -0
  312. data/template/resources/images/gray/panel/light-hd.gif +0 -0
  313. data/template/resources/images/gray/panel/tool-sprite-tpl.gif +0 -0
  314. data/template/resources/images/gray/panel/tool-sprites.gif +0 -0
  315. data/template/resources/images/gray/panel/tools-sprites-trans.gif +0 -0
  316. data/template/resources/images/gray/panel/top-bottom.gif +0 -0
  317. data/template/resources/images/gray/panel/top-bottom.png +0 -0
  318. data/template/resources/images/gray/panel/white-corners-sprite.gif +0 -0
  319. data/template/resources/images/gray/panel/white-left-right.gif +0 -0
  320. data/template/resources/images/gray/panel/white-top-bottom.gif +0 -0
  321. data/template/resources/images/gray/progress/progress-bg.gif +0 -0
  322. data/template/resources/images/gray/qtip/bg.gif +0 -0
  323. data/template/resources/images/gray/qtip/close.gif +0 -0
  324. data/template/resources/images/gray/qtip/tip-anchor-sprite.gif +0 -0
  325. data/template/resources/images/gray/qtip/tip-sprite.gif +0 -0
  326. data/template/resources/images/gray/s.gif +0 -0
  327. data/template/resources/images/gray/shared/hd-sprite.gif +0 -0
  328. data/template/resources/images/gray/shared/left-btn.gif +0 -0
  329. data/template/resources/images/gray/shared/right-btn.gif +0 -0
  330. data/template/resources/images/gray/sizer/e-handle.gif +0 -0
  331. data/template/resources/images/gray/sizer/ne-handle.gif +0 -0
  332. data/template/resources/images/gray/sizer/nw-handle.gif +0 -0
  333. data/template/resources/images/gray/sizer/s-handle.gif +0 -0
  334. data/template/resources/images/gray/sizer/se-handle.gif +0 -0
  335. data/template/resources/images/gray/sizer/square.gif +0 -0
  336. data/template/resources/images/gray/sizer/sw-handle.gif +0 -0
  337. data/template/resources/images/gray/slider/slider-thumb.png +0 -0
  338. data/template/resources/images/gray/slider/slider-v-thumb.png +0 -0
  339. data/template/resources/images/gray/tabs/scroll-left.gif +0 -0
  340. data/template/resources/images/gray/tabs/scroll-right.gif +0 -0
  341. data/template/resources/images/gray/tabs/scroller-bg.gif +0 -0
  342. data/template/resources/images/gray/tabs/tab-btm-inactive-left-bg.gif +0 -0
  343. data/template/resources/images/gray/tabs/tab-btm-inactive-right-bg.gif +0 -0
  344. data/template/resources/images/gray/tabs/tab-btm-left-bg.gif +0 -0
  345. data/template/resources/images/gray/tabs/tab-btm-over-left-bg.gif +0 -0
  346. data/template/resources/images/gray/tabs/tab-btm-over-right-bg.gif +0 -0
  347. data/template/resources/images/gray/tabs/tab-btm-right-bg.gif +0 -0
  348. data/template/resources/images/gray/tabs/tab-close.gif +0 -0
  349. data/template/resources/images/gray/tabs/tab-strip-bg.gif +0 -0
  350. data/template/resources/images/gray/tabs/tab-strip-bg.png +0 -0
  351. data/template/resources/images/gray/tabs/tab-strip-btm-bg.gif +0 -0
  352. data/template/resources/images/gray/tabs/tabs-sprite.gif +0 -0
  353. data/template/resources/images/gray/toolbar/bg.gif +0 -0
  354. data/template/resources/images/gray/toolbar/btn-arrow-light.gif +0 -0
  355. data/template/resources/images/gray/toolbar/btn-arrow.gif +0 -0
  356. data/template/resources/images/gray/toolbar/btn-over-bg.gif +0 -0
  357. data/template/resources/images/gray/toolbar/gray-bg.gif +0 -0
  358. data/template/resources/images/gray/toolbar/more.gif +0 -0
  359. data/template/resources/images/gray/toolbar/tb-bg.gif +0 -0
  360. data/template/resources/images/gray/toolbar/tb-btn-sprite.gif +0 -0
  361. data/template/resources/images/gray/tree/arrows.gif +0 -0
  362. data/template/resources/images/gray/tree/elbow-end-minus-nl.gif +0 -0
  363. data/template/resources/images/gray/tree/elbow-end-minus.gif +0 -0
  364. data/template/resources/images/gray/tree/elbow-end-plus-nl.gif +0 -0
  365. data/template/resources/images/gray/tree/elbow-end-plus.gif +0 -0
  366. data/template/resources/images/gray/window/icon-error.gif +0 -0
  367. data/template/resources/images/gray/window/icon-info.gif +0 -0
  368. data/template/resources/images/gray/window/icon-question.gif +0 -0
  369. data/template/resources/images/gray/window/icon-warning.gif +0 -0
  370. data/template/resources/images/gray/window/left-corners.png +0 -0
  371. data/template/resources/images/gray/window/left-corners.pspimage +0 -0
  372. data/template/resources/images/gray/window/left-right.png +0 -0
  373. data/template/resources/images/gray/window/right-corners.png +0 -0
  374. data/template/resources/images/gray/window/top-bottom.png +0 -0
  375. data/template/resources/inherited.gif +0 -0
  376. data/template/resources/member-collapsed.gif +0 -0
  377. data/template/resources/member-expanded.gif +0 -0
  378. data/template/resources/member-hover.gif +0 -0
  379. data/template/resources/method.gif +0 -0
  380. data/template/resources/pkg-closed.gif +0 -0
  381. data/template/resources/pkg-open.gif +0 -0
  382. data/template/resources/pkg.gif +0 -0
  383. data/template/resources/prop.gif +0 -0
  384. data/template/resources/s.gif +0 -0
  385. data/template/resources/static.gif +0 -0
  386. data/template/resources/style.css +302 -0
  387. data/template/welcome.html +45 -0
  388. metadata +481 -0
@@ -0,0 +1,33 @@
1
+ require 'jsduck/table'
2
+ require 'jsduck/short_params'
3
+ require 'jsduck/long_params'
4
+
5
+ module JsDuck
6
+
7
+ class EventTable < Table
8
+ def initialize(cls)
9
+ super(cls)
10
+ @type = :event
11
+ @id = @cls.full_name + "-events"
12
+ @title = "Public Events"
13
+ @column_title = "Event"
14
+ @row_class = "method-row"
15
+ @short_params = ShortParams.new
16
+ @long_params = LongParams.new(@cls)
17
+ end
18
+
19
+ def signature_suffix(item)
20
+ " : " + @short_params.render(item[:params])
21
+ end
22
+
23
+ def extra_doc(item)
24
+ [
25
+ "<div class='mdetail-params'>",
26
+ "<strong style='font-weight: normal;'>Listeners will be called with the following arguments:</strong>",
27
+ @long_params.render(item[:params]),
28
+ "</div>"
29
+ ].join("\n")
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,193 @@
1
+ require 'strscan'
2
+
3
+ module JsDuck
4
+
5
+ # Tokenizes JavaScript code into lexical tokens.
6
+ #
7
+ # Each token has a type and value.
8
+ # Types and possible values for them are as follows:
9
+ #
10
+ # - :number -- 25
11
+ # - :string -- "Hello world"
12
+ # - :keyword -- "typeof"
13
+ # - :ident -- "foo"
14
+ # - :regex -- "/abc/i"
15
+ # - :operator -- "+"
16
+ # - :doc_comment -- "/** My comment */"
17
+ #
18
+ # Notice that doc-comments are recognized as tokens while normal
19
+ # comments are ignored just as whitespace.
20
+ #
21
+ class Lexer
22
+ def initialize(input)
23
+ @input = StringScanner.new(input)
24
+ tokenize
25
+ end
26
+
27
+ # Tests if given pattern matches the tokens that follow at current
28
+ # position.
29
+ #
30
+ # Takes list of strings and symbols. Symbols are compared to
31
+ # token type, while strings to token value. For example:
32
+ #
33
+ # look(:ident, "=", :regex)
34
+ #
35
+ def look(*tokens)
36
+ i = 0
37
+ tokens.all? do |t|
38
+ tok = @tokens[i]
39
+ i += 1
40
+ return false if tok == nil
41
+ if t.instance_of?(Symbol) then
42
+ tok[:type] == t
43
+ else
44
+ tok[:value] == t
45
+ end
46
+ end
47
+ end
48
+
49
+ # Returns the value of next token, moving the current token cursor
50
+ # also to next token.
51
+ #
52
+ # When full=true, returns full token as hash like so:
53
+ #
54
+ # {:type => :ident, :value => "foo"}
55
+ #
56
+ def next(full=false)
57
+ tok = @tokens.shift
58
+ full ? tok : tok[:value]
59
+ end
60
+
61
+ # True when no more tokens.
62
+ def empty?
63
+ @tokens.empty?
64
+ end
65
+
66
+ # Goes through the whole input and tokenizes it
67
+ def tokenize
68
+ @tokens = []
69
+ while !@input.eos? do
70
+ skip_white_and_comments
71
+ if @input.check(/[0-9]+/) then
72
+ @tokens << {
73
+ :type => :number,
74
+ :value => eval(@input.scan(/[0-9]+(\.[0-9]*)?/))
75
+ }
76
+ elsif @input.check(/\w+/) then
77
+ value = @input.scan(/\w+/)
78
+ @tokens << {
79
+ :type => KEYWORDS[value] ? :keyword : :ident,
80
+ :value => value
81
+ }
82
+ elsif @input.check(/\/\*\*/) then
83
+ @tokens << {
84
+ :type => :doc_comment,
85
+ :value => @input.scan_until(/\*\/|\Z/)
86
+ }
87
+ elsif @input.check(/"/) then
88
+ @tokens << {
89
+ :type => :string,
90
+ :value => eval(@input.scan(/"([^"\\]|\\.)*"/))
91
+ }
92
+ elsif @input.check(/'/) then
93
+ @tokens << {
94
+ :type => :string,
95
+ :value => eval(@input.scan(/'([^'\\]|\\.)*'/))
96
+ }
97
+ elsif @input.check(/\//) then
98
+ if regex? then
99
+ @tokens << {
100
+ :type => :regex,
101
+ :value => @input.scan(/\/([^\/\\]|\\.)*\/[gim]*/)
102
+ }
103
+ else
104
+ @tokens << {
105
+ :type => :operator,
106
+ :value => @input.scan(/\//)
107
+ }
108
+ end
109
+ elsif @input.check(/./) then
110
+ @tokens << {
111
+ :type => :operator,
112
+ :value => @input.scan(/./)
113
+ }
114
+ end
115
+ end
116
+ end
117
+
118
+ # A slash "/" is a division operator if it follows:
119
+ # - identifier
120
+ # - the "this" keyword
121
+ # - number
122
+ # - closing bracket )
123
+ # - closing square-bracket ]
124
+ # Otherwise it's a beginning of regex
125
+ def regex?
126
+ if @tokens.last then
127
+ type = @tokens.last[:type]
128
+ value = @tokens.last[:value]
129
+ if type == :ident || type == :number
130
+ return false
131
+ elsif type == :keyword && value == "this"
132
+ return false
133
+ elsif type == :operator && (value == ")" || value == "]")
134
+ return false
135
+ end
136
+ end
137
+ return true
138
+ end
139
+
140
+ def skip_white_and_comments
141
+ skip_white
142
+ while multiline_comment? || line_comment? do
143
+ if multiline_comment? then
144
+ @input.scan_until(/\*\/|\Z/)
145
+ elsif line_comment? then
146
+ @input.scan_until(/\n|\Z/)
147
+ end
148
+ skip_white
149
+ end
150
+ end
151
+
152
+ def multiline_comment?
153
+ @input.check(/\/\*[^*]/)
154
+ end
155
+
156
+ def line_comment?
157
+ @input.check(/\/\//)
158
+ end
159
+
160
+ def skip_white
161
+ @input.scan(/\s+/)
162
+ end
163
+
164
+ KEYWORDS = {
165
+ "break" => true,
166
+ "case" => true,
167
+ "catch" => true,
168
+ "continue" => true,
169
+ "default" => true,
170
+ "delete" => true,
171
+ "do" => true,
172
+ "else" => true,
173
+ "finally" => true,
174
+ "for" => true,
175
+ "function" => true,
176
+ "if" => true,
177
+ "in" => true,
178
+ "instanceof" => true,
179
+ "new" => true,
180
+ "return" => true,
181
+ "switch" => true,
182
+ "this" => true,
183
+ "throw" => true,
184
+ "try" => true,
185
+ "typeof" => true,
186
+ "var" => true,
187
+ "void" => true,
188
+ "while" => true,
189
+ "with" => true,
190
+ }
191
+ end
192
+
193
+ end
@@ -0,0 +1,31 @@
1
+ require "jsduck/doc_formatter"
2
+
3
+ module JsDuck
4
+
5
+ # Renders method/event parameters list in long form
6
+ # for use in documentation body.
7
+ class LongParams
8
+ def initialize(cls)
9
+ @formatter = DocFormatter.new(cls.full_name)
10
+ end
11
+
12
+ def render(params)
13
+ if params.length > 0
14
+ "<ul>" + params.collect {|p| render_single(p) }.join("") + "</ul>"
15
+ else
16
+ "<ul><li>None.</li></ul>"
17
+ end
18
+ end
19
+
20
+ def render_single(param)
21
+ doc = @formatter.format(param[:doc])
22
+ return [
23
+ "<li>",
24
+ "<code>#{param[:name]}</code> : #{param[:type]}",
25
+ "<div class='sub-desc'>#{doc}</div>",
26
+ "</li>",
27
+ ].join("")
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,286 @@
1
+ module JsDuck
2
+
3
+ # Takes data from doc-comment and code that follows it and combines
4
+ # these to pieces of information into one. The code comes from
5
+ # JsDuck::Parser and doc-comment from JsDuck::DocParser.
6
+ #
7
+ # The main method merge() produces a hash as a result.
8
+ class Merger
9
+ def merge(docs, code)
10
+ case detect_doc_type(docs, code)
11
+ when :class
12
+ create_class(docs, code)
13
+ when :event
14
+ create_event(docs, code)
15
+ when :method
16
+ create_method(docs, code)
17
+ when :cfg
18
+ create_cfg(docs, code)
19
+ when :property
20
+ create_property(docs, code)
21
+ end
22
+ end
23
+
24
+ # Detects whether the doc-comment is for class, cfg, event, method or property.
25
+ def detect_doc_type(docs, code)
26
+ doc_map = build_doc_map(docs)
27
+
28
+ if doc_map[:class]
29
+ :class
30
+ elsif doc_map[:event]
31
+ :event
32
+ elsif doc_map[:method]
33
+ :method
34
+ elsif doc_map[:property] || doc_map[:type]
35
+ :property
36
+ elsif code[:type] == :ext_extend
37
+ :class
38
+ elsif code[:type] == :assignment && class_name?(*code[:left])
39
+ :class
40
+ elsif code[:type] == :function && class_name?(code[:name])
41
+ :class
42
+ elsif doc_map[:cfg]
43
+ :cfg
44
+ elsif code[:type] == :function
45
+ :method
46
+ elsif code[:type] == :assignment && code[:right] && code[:right][:type] == :function
47
+ :method
48
+ else
49
+ :property
50
+ end
51
+ end
52
+
53
+ # Class name begins with upcase char
54
+ def class_name?(*name_chain)
55
+ return name_chain.last =~ /\A[A-Z]/
56
+ end
57
+
58
+ def create_class(docs, code)
59
+ groups = group_class_docs(docs)
60
+ result = create_bare_class(groups[:class], code)
61
+ result[:cfg] = groups[:cfg].map { |tags| create_cfg(tags, {}, result[:name]) }
62
+ result[:method] = []
63
+ if groups[:constructor].length > 0
64
+ constr = create_method(groups[:constructor], {})
65
+ constr[:member] = result[:name]
66
+ result[:method] << constr
67
+ end
68
+ result[:property] = []
69
+ result[:event] = []
70
+ result
71
+ end
72
+
73
+ # Gathers all tags until first @cfg or @constructor into the first
74
+ # bare :class group. We have a special case for @xtype which in
75
+ # ExtJS comments often appears after @constructor - so we
76
+ # explicitly place it into :class group.
77
+ #
78
+ # Then gathers each @cfg and tags following it into :cfg group, so
79
+ # that it becomes array of arrays of tags. This is to allow some
80
+ # configs to be marked with @private or whatever else.
81
+ #
82
+ # Finally gathers tags after @constructor into its group.
83
+ def group_class_docs(docs)
84
+ groups = {:class => [], :cfg => [], :constructor => []}
85
+ group_name = :class
86
+ docs.each do |tag|
87
+ if tag[:tagname] == :cfg || tag[:tagname] == :constructor
88
+ group_name = tag[:tagname]
89
+ if tag[:tagname] == :cfg
90
+ groups[:cfg] << []
91
+ end
92
+ end
93
+
94
+ if tag[:tagname] == :xtype
95
+ groups[:class] << tag
96
+ elsif group_name == :cfg
97
+ groups[:cfg].last << tag
98
+ else
99
+ groups[group_name] << tag
100
+ end
101
+ end
102
+ groups
103
+ end
104
+
105
+ def create_bare_class(docs, code)
106
+ doc_map = build_doc_map(docs)
107
+ return {
108
+ :tagname => :class,
109
+ :name => detect_name(:class, doc_map, code, :full_name),
110
+ :doc => detect_doc(docs),
111
+ :extends => detect_extends(doc_map, code),
112
+ :xtype => detect_xtype(doc_map),
113
+ :singleton => !!doc_map[:singleton],
114
+ :private => !!doc_map[:private],
115
+ }
116
+ end
117
+
118
+ def create_method(docs, code)
119
+ doc_map = build_doc_map(docs)
120
+ return {
121
+ :tagname => :method,
122
+ :name => detect_name(:method, doc_map, code),
123
+ :member => detect_member(doc_map),
124
+ :doc => detect_doc(docs),
125
+ :params => detect_params(docs, code),
126
+ :return => detect_return(doc_map),
127
+ :private => !!doc_map[:private],
128
+ :static => !!doc_map[:static],
129
+ }
130
+ end
131
+
132
+ def create_event(docs, code)
133
+ doc_map = build_doc_map(docs)
134
+ return {
135
+ :tagname => :event,
136
+ :name => detect_name(:event, doc_map, code),
137
+ :member => detect_member(doc_map),
138
+ :doc => detect_doc(docs),
139
+ :params => detect_params(docs, code),
140
+ :private => !!doc_map[:private],
141
+ }
142
+ end
143
+
144
+ def create_cfg(docs, code, member = nil)
145
+ doc_map = build_doc_map(docs)
146
+ return {
147
+ :tagname => :cfg,
148
+ :name => detect_name(:cfg, doc_map, code),
149
+ :member => detect_member(doc_map) || member,
150
+ :type => detect_type(:cfg, doc_map, code),
151
+ :doc => detect_doc(docs),
152
+ :private => !!doc_map[:private],
153
+ }
154
+ end
155
+
156
+ def create_property(docs, code)
157
+ doc_map = build_doc_map(docs)
158
+ return {
159
+ :tagname => :property,
160
+ :name => detect_name(:property, doc_map, code),
161
+ :member => detect_member(doc_map),
162
+ :type => detect_type(:property, doc_map, code),
163
+ :doc => detect_doc(docs),
164
+ :private => !!doc_map[:private],
165
+ :static => !!doc_map[:static],
166
+ }
167
+ end
168
+
169
+ def detect_name(tagname, doc_map, code, name_type = :last_name)
170
+ main_tag = doc_map[tagname] ? doc_map[tagname].first : {}
171
+ if main_tag[:name]
172
+ main_tag[:name]
173
+ elsif doc_map[:constructor]
174
+ "constructor"
175
+ elsif code[:type] == :function
176
+ code[:name]
177
+ elsif code[:type] == :assignment
178
+ name_type == :full_name ? code[:left].join(".") : code[:left].last
179
+ else
180
+ ""
181
+ end
182
+ end
183
+
184
+ def detect_member(doc_map)
185
+ if doc_map[:member]
186
+ doc_map[:member].first[:member]
187
+ else
188
+ nil
189
+ end
190
+ end
191
+
192
+ def detect_type(tagname, doc_map, code)
193
+ main_tag = doc_map[tagname] ? doc_map[tagname].first : {}
194
+ if main_tag[:type]
195
+ main_tag[:type]
196
+ elsif doc_map[:type]
197
+ doc_map[:type].first[:type]
198
+ elsif code[:type] == :function
199
+ "Function"
200
+ elsif code[:type] == :assignment && code[:right]
201
+ if code[:right][:type] == :function
202
+ "Function"
203
+ elsif code[:right][:type] == :literal
204
+ code[:right][:class]
205
+ else
206
+ "Object"
207
+ end
208
+ else
209
+ "Object"
210
+ end
211
+ end
212
+
213
+ def detect_extends(doc_map, code)
214
+ if doc_map[:extends]
215
+ doc_map[:extends].first[:extends]
216
+ elsif code[:type] == :assignment && code[:right] && code[:right][:type] == :ext_extend
217
+ code[:right][:extend].join(".")
218
+ end
219
+ end
220
+
221
+ def detect_xtype(doc_map)
222
+ doc_map[:xtype] ? doc_map[:xtype].first[:name] : nil
223
+ end
224
+
225
+ def detect_params(docs, code)
226
+ implicit = detect_implicit_params(code)
227
+ explicit = detect_explicit_params(docs)
228
+ # Override implicit parameters with explicit ones
229
+ params = []
230
+ [implicit.length, explicit.length].max.times do |i|
231
+ im = implicit[i] || {}
232
+ ex = explicit[i] || {}
233
+ params << {
234
+ :type => ex[:type] || im[:type] || "Object",
235
+ :name => ex[:name] || im[:name] || "",
236
+ :doc => ex[:doc] || im[:doc] || "",
237
+ }
238
+ end
239
+ params
240
+ end
241
+
242
+ def detect_implicit_params(code)
243
+ if code[:type] == :function
244
+ code[:params]
245
+ elsif code[:type] == :assignment && code[:right] && code[:right][:type] == :function
246
+ code[:right][:params]
247
+ else
248
+ []
249
+ end
250
+ end
251
+
252
+ def detect_explicit_params(docs)
253
+ docs.find_all {|tag| tag[:tagname] == :param}
254
+ end
255
+
256
+ def detect_return(doc_map)
257
+ ret = doc_map[:return] ? doc_map[:return].first : {}
258
+ return {
259
+ :type => ret[:type] || "void",
260
+ :doc => ret[:doc] || "",
261
+ }
262
+ end
263
+
264
+ # Combines :doc-s of most tags
265
+ # Ignores tags that have doc comment themselves
266
+ def detect_doc(docs)
267
+ ignore_tags = [:param, :return]
268
+ doc_tags = docs.find_all { |tag| !ignore_tags.include?(tag[:tagname]) }
269
+ doc_tags.map { |tag| tag[:doc] }.compact.join(" ")
270
+ end
271
+
272
+ # Build map of at-tags for quick lookup
273
+ def build_doc_map(docs)
274
+ map = {}
275
+ docs.each do |tag|
276
+ if map[tag[:tagname]]
277
+ map[tag[:tagname]] << tag
278
+ else
279
+ map[tag[:tagname]] = [tag]
280
+ end
281
+ end
282
+ map
283
+ end
284
+ end
285
+
286
+ end