jsduck 2.0.pre4 → 3.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (485) hide show
  1. data/.gitignore +1 -0
  2. data/README.md +126 -34
  3. data/Rakefile +343 -115
  4. data/bin/jsduck +4 -196
  5. data/example.js +144 -0
  6. data/jsduck.gemspec +4 -9
  7. data/lib/jsduck/aggregator.rb +1 -1
  8. data/lib/jsduck/app.rb +165 -182
  9. data/lib/jsduck/categories.rb +17 -2
  10. data/lib/jsduck/class.rb +10 -0
  11. data/lib/jsduck/class_formatter.rb +77 -0
  12. data/lib/jsduck/doc_formatter.rb +42 -4
  13. data/lib/jsduck/doc_parser.rb +64 -10
  14. data/lib/jsduck/examples.rb +33 -0
  15. data/lib/jsduck/exporter.rb +18 -42
  16. data/lib/jsduck/guides.rb +41 -74
  17. data/lib/jsduck/icons.rb +28 -0
  18. data/lib/jsduck/js_literal_builder.rb +21 -0
  19. data/lib/jsduck/js_literal_parser.rb +106 -0
  20. data/lib/jsduck/js_parser.rb +115 -97
  21. data/lib/jsduck/json_duck.rb +45 -0
  22. data/lib/jsduck/lexer.rb +55 -25
  23. data/lib/jsduck/lint.rb +84 -0
  24. data/lib/jsduck/merger.rb +91 -21
  25. data/lib/jsduck/options.rb +320 -0
  26. data/lib/jsduck/relations.rb +7 -1
  27. data/lib/jsduck/renderer.rb +315 -0
  28. data/lib/jsduck/source_writer.rb +2 -2
  29. data/lib/jsduck/type_parser.rb +85 -0
  30. data/lib/jsduck/videos.rb +33 -0
  31. data/lib/jsduck/welcome.rb +21 -0
  32. data/{template → template-min}/README.md +0 -0
  33. data/template-min/app.js +1 -0
  34. data/template-min/build-js.html +25 -0
  35. data/template-min/egIframe.html +24 -0
  36. data/template-min/extjs/bootstrap.js +73 -0
  37. data/template-min/extjs/ext-all-debug.js +90047 -0
  38. data/{template → template-min}/extjs/ext-all.js +0 -0
  39. data/template-min/extjs/resources/css/ext-all.css +1 -0
  40. data/template-min/extjs/resources/themes/images/default/boundlist/trigger-arrow.png +0 -0
  41. data/template-min/extjs/resources/themes/images/default/box/corners-blue.gif +0 -0
  42. data/template-min/extjs/resources/themes/images/default/box/corners.gif +0 -0
  43. data/template-min/extjs/resources/themes/images/default/box/l-blue.gif +0 -0
  44. data/template-min/extjs/resources/themes/images/default/box/l.gif +0 -0
  45. data/template-min/extjs/resources/themes/images/default/box/r-blue.gif +0 -0
  46. data/template-min/extjs/resources/themes/images/default/box/r.gif +0 -0
  47. data/template-min/extjs/resources/themes/images/default/box/tb-blue.gif +0 -0
  48. data/template-min/extjs/resources/themes/images/default/box/tb.gif +0 -0
  49. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-bg.gif +0 -0
  50. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-corners.gif +0 -0
  51. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-bg.gif +0 -0
  52. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-corners.gif +0 -0
  53. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-sides.gif +0 -0
  54. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-bg.gif +0 -0
  55. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-corners.gif +0 -0
  56. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-sides.gif +0 -0
  57. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-bg.gif +0 -0
  58. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-corners.gif +0 -0
  59. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-sides.gif +0 -0
  60. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-bg.gif +0 -0
  61. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-corners.gif +0 -0
  62. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-sides.gif +0 -0
  63. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-sides.gif +0 -0
  64. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-bg.gif +0 -0
  65. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-corners.gif +0 -0
  66. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-bg.gif +0 -0
  67. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-corners.gif +0 -0
  68. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-sides.gif +0 -0
  69. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-bg.gif +0 -0
  70. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-corners.gif +0 -0
  71. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-sides.gif +0 -0
  72. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-bg.gif +0 -0
  73. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-corners.gif +0 -0
  74. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-sides.gif +0 -0
  75. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-bg.gif +0 -0
  76. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-corners.gif +0 -0
  77. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-sides.gif +0 -0
  78. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-sides.gif +0 -0
  79. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-bg.gif +0 -0
  80. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-corners.gif +0 -0
  81. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-bg.gif +0 -0
  82. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-corners.gif +0 -0
  83. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-sides.gif +0 -0
  84. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-bg.gif +0 -0
  85. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-corners.gif +0 -0
  86. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-sides.gif +0 -0
  87. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-bg.gif +0 -0
  88. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-corners.gif +0 -0
  89. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-sides.gif +0 -0
  90. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-bg.gif +0 -0
  91. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-corners.gif +0 -0
  92. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-sides.gif +0 -0
  93. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-sides.gif +0 -0
  94. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-corners.gif +0 -0
  95. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-disabled-corners.gif +0 -0
  96. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-disabled-sides.gif +0 -0
  97. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-bg.gif +0 -0
  98. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-corners.gif +0 -0
  99. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-sides.gif +0 -0
  100. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-bg.gif +0 -0
  101. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-corners.gif +0 -0
  102. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-sides.gif +0 -0
  103. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-bg.gif +0 -0
  104. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-corners.gif +0 -0
  105. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-sides.gif +0 -0
  106. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-sides.gif +0 -0
  107. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-corners.gif +0 -0
  108. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-disabled-corners.gif +0 -0
  109. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-disabled-sides.gif +0 -0
  110. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-bg.gif +0 -0
  111. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-corners.gif +0 -0
  112. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-sides.gif +0 -0
  113. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-bg.gif +0 -0
  114. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-corners.gif +0 -0
  115. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-sides.gif +0 -0
  116. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-bg.gif +0 -0
  117. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-corners.gif +0 -0
  118. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-sides.gif +0 -0
  119. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-sides.gif +0 -0
  120. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-corners.gif +0 -0
  121. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-disabled-corners.gif +0 -0
  122. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-disabled-sides.gif +0 -0
  123. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-bg.gif +0 -0
  124. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-corners.gif +0 -0
  125. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-sides.gif +0 -0
  126. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-bg.gif +0 -0
  127. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-corners.gif +0 -0
  128. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-sides.gif +0 -0
  129. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-bg.gif +0 -0
  130. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-corners.gif +0 -0
  131. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-sides.gif +0 -0
  132. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-sides.gif +0 -0
  133. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-corners.gif +0 -0
  134. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-notitle-corners.gif +0 -0
  135. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-notitle-sides.gif +0 -0
  136. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-sides.gif +0 -0
  137. data/template-min/extjs/resources/themes/images/default/button/arrow.gif +0 -0
  138. data/template-min/extjs/resources/themes/images/default/button/btn.gif +0 -0
  139. data/template-min/extjs/resources/themes/images/default/button/group-cs.gif +0 -0
  140. data/template-min/extjs/resources/themes/images/default/button/group-lr.gif +0 -0
  141. data/template-min/extjs/resources/themes/images/default/button/group-tb.gif +0 -0
  142. data/template-min/extjs/resources/themes/images/default/button/s-arrow-b-noline.gif +0 -0
  143. data/template-min/extjs/resources/themes/images/default/button/s-arrow-b.gif +0 -0
  144. data/template-min/extjs/resources/themes/images/default/button/s-arrow-bo.gif +0 -0
  145. data/template-min/extjs/resources/themes/images/default/button/s-arrow-light.gif +0 -0
  146. data/template-min/extjs/resources/themes/images/default/button/s-arrow-noline.gif +0 -0
  147. data/template-min/extjs/resources/themes/images/default/button/s-arrow-o.gif +0 -0
  148. data/template-min/extjs/resources/themes/images/default/button/s-arrow.gif +0 -0
  149. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-footer-bg.gif +0 -0
  150. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-footer-bg.png +0 -0
  151. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-header-bg.gif +0 -0
  152. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-header-bg.png +0 -0
  153. data/template-min/extjs/resources/themes/images/default/dd/drop-add.gif +0 -0
  154. data/template-min/extjs/resources/themes/images/default/dd/drop-no.gif +0 -0
  155. data/template-min/extjs/resources/themes/images/default/dd/drop-yes.gif +0 -0
  156. data/template-min/extjs/resources/themes/images/default/editor/tb-sprite.gif +0 -0
  157. data/{template → template-min}/extjs/resources/themes/images/default/form/checkbox.gif +0 -0
  158. data/template-min/extjs/resources/themes/images/default/form/clear-trigger.gif +0 -0
  159. data/template-min/extjs/resources/themes/images/default/form/date-trigger.gif +0 -0
  160. data/template-min/extjs/resources/themes/images/default/form/error-tip-corners.gif +0 -0
  161. data/template-min/extjs/resources/themes/images/default/form/exclamation.gif +0 -0
  162. data/template-min/extjs/resources/themes/images/default/form/radio.gif +0 -0
  163. data/template-min/extjs/resources/themes/images/default/form/search-trigger.gif +0 -0
  164. data/template-min/extjs/resources/themes/images/default/form/spinner-small.gif +0 -0
  165. data/template-min/extjs/resources/themes/images/default/form/spinner.gif +0 -0
  166. data/{template → template-min}/extjs/resources/themes/images/default/form/text-bg.gif +0 -0
  167. data/template-min/extjs/resources/themes/images/default/form/trigger-square.gif +0 -0
  168. data/template-min/extjs/resources/themes/images/default/form/trigger-tpl.gif +0 -0
  169. data/template-min/extjs/resources/themes/images/default/form/trigger.gif +0 -0
  170. data/template-min/extjs/resources/themes/images/default/form-invalid-tip/form-invalid-tip-default-corners.gif +0 -0
  171. data/template-min/extjs/resources/themes/images/default/form-invalid-tip/form-invalid-tip-default-sides.gif +0 -0
  172. data/template-min/extjs/resources/themes/images/default/grid/arrow-left-white.gif +0 -0
  173. data/template-min/extjs/resources/themes/images/default/grid/arrow-right-white.gif +0 -0
  174. data/template-min/extjs/resources/themes/images/default/grid/cell-special-bg.gif +0 -0
  175. data/template-min/extjs/resources/themes/images/default/grid/cell-special-bg.png +0 -0
  176. data/template-min/extjs/resources/themes/images/default/grid/cell-special-selected-bg.gif +0 -0
  177. data/template-min/extjs/resources/themes/images/default/grid/cell-special-selected-bg.png +0 -0
  178. data/template-min/extjs/resources/themes/images/default/grid/checked.gif +0 -0
  179. data/template-min/extjs/resources/themes/images/default/grid/col-move-bottom.gif +0 -0
  180. data/template-min/extjs/resources/themes/images/default/grid/col-move-top.gif +0 -0
  181. data/template-min/extjs/resources/themes/images/default/grid/column-header-bg.gif +0 -0
  182. data/template-min/extjs/resources/themes/images/default/grid/column-header-bg.png +0 -0
  183. data/template-min/extjs/resources/themes/images/default/grid/column-header-over-bg.gif +0 -0
  184. data/template-min/extjs/resources/themes/images/default/grid/column-header-over-bg.png +0 -0
  185. data/template-min/extjs/resources/themes/images/default/grid/columns.gif +0 -0
  186. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-left.gif +0 -0
  187. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-left.png +0 -0
  188. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-right.gif +0 -0
  189. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-right.png +0 -0
  190. data/template-min/extjs/resources/themes/images/default/grid/dirty.gif +0 -0
  191. data/template-min/extjs/resources/themes/images/default/grid/done.gif +0 -0
  192. data/template-min/extjs/resources/themes/images/default/grid/drop-no.gif +0 -0
  193. data/template-min/extjs/resources/themes/images/default/grid/drop-yes.gif +0 -0
  194. data/template-min/extjs/resources/themes/images/default/grid/footer-bg.gif +0 -0
  195. data/template-min/extjs/resources/themes/images/default/grid/grid-blue-hd.gif +0 -0
  196. data/template-min/extjs/resources/themes/images/default/grid/grid-blue-split.gif +0 -0
  197. data/template-min/extjs/resources/themes/images/default/grid/grid-hrow.gif +0 -0
  198. data/template-min/extjs/resources/themes/images/default/grid/grid-loading.gif +0 -0
  199. data/template-min/extjs/resources/themes/images/default/grid/grid-split.gif +0 -0
  200. data/template-min/extjs/resources/themes/images/default/grid/grid-vista-hd.gif +0 -0
  201. data/template-min/extjs/resources/themes/images/default/grid/grid3-hd-btn.gif +0 -0
  202. data/template-min/extjs/resources/themes/images/default/grid/grid3-hrow-over.gif +0 -0
  203. data/template-min/extjs/resources/themes/images/default/grid/grid3-hrow.gif +0 -0
  204. data/template-min/extjs/resources/themes/images/default/grid/grid3-rowheader.gif +0 -0
  205. data/template-min/extjs/resources/themes/images/default/grid/group-by.gif +0 -0
  206. data/template-min/extjs/resources/themes/images/default/grid/group-collapse.gif +0 -0
  207. data/template-min/extjs/resources/themes/images/default/grid/group-expand-sprite.gif +0 -0
  208. data/template-min/extjs/resources/themes/images/default/grid/group-expand.gif +0 -0
  209. data/template-min/extjs/resources/themes/images/default/grid/hd-pop.gif +0 -0
  210. data/template-min/extjs/resources/themes/images/default/grid/hmenu-asc.gif +0 -0
  211. data/template-min/extjs/resources/themes/images/default/grid/hmenu-desc.gif +0 -0
  212. data/template-min/extjs/resources/themes/images/default/grid/hmenu-lock.gif +0 -0
  213. data/template-min/extjs/resources/themes/images/default/grid/hmenu-lock.png +0 -0
  214. data/template-min/extjs/resources/themes/images/default/grid/hmenu-unlock.gif +0 -0
  215. data/template-min/extjs/resources/themes/images/default/grid/hmenu-unlock.png +0 -0
  216. data/template-min/extjs/resources/themes/images/default/grid/invalid_line.gif +0 -0
  217. data/{template → template-min}/extjs/resources/themes/images/default/grid/loading.gif +0 -0
  218. data/template-min/extjs/resources/themes/images/default/grid/mso-hd.gif +0 -0
  219. data/template-min/extjs/resources/themes/images/default/grid/nowait.gif +0 -0
  220. data/template-min/extjs/resources/themes/images/default/grid/page-first-disabled.gif +0 -0
  221. data/template-min/extjs/resources/themes/images/default/grid/page-first.gif +0 -0
  222. data/template-min/extjs/resources/themes/images/default/grid/page-last-disabled.gif +0 -0
  223. data/template-min/extjs/resources/themes/images/default/grid/page-last.gif +0 -0
  224. data/template-min/extjs/resources/themes/images/default/grid/page-next-disabled.gif +0 -0
  225. data/template-min/extjs/resources/themes/images/default/grid/page-next.gif +0 -0
  226. data/template-min/extjs/resources/themes/images/default/grid/page-prev-disabled.gif +0 -0
  227. data/template-min/extjs/resources/themes/images/default/grid/page-prev.gif +0 -0
  228. data/template-min/extjs/resources/themes/images/default/grid/pick-button.gif +0 -0
  229. data/template-min/extjs/resources/themes/images/default/grid/property-cell-bg.gif +0 -0
  230. data/template-min/extjs/resources/themes/images/default/grid/property-cell-selected-bg.gif +0 -0
  231. data/template-min/extjs/resources/themes/images/default/grid/refresh-disabled.gif +0 -0
  232. data/template-min/extjs/resources/themes/images/default/grid/refresh.gif +0 -0
  233. data/template-min/extjs/resources/themes/images/default/grid/row-check-sprite.gif +0 -0
  234. data/template-min/extjs/resources/themes/images/default/grid/row-expand-sprite.gif +0 -0
  235. data/template-min/extjs/resources/themes/images/default/grid/row-over.gif +0 -0
  236. data/template-min/extjs/resources/themes/images/default/grid/row-sel.gif +0 -0
  237. data/template-min/extjs/resources/themes/images/default/grid/sort-hd.gif +0 -0
  238. data/template-min/extjs/resources/themes/images/default/grid/sort_asc.gif +0 -0
  239. data/template-min/extjs/resources/themes/images/default/grid/sort_desc.gif +0 -0
  240. data/template-min/extjs/resources/themes/images/default/grid/unchecked.gif +0 -0
  241. data/template-min/extjs/resources/themes/images/default/grid/wait.gif +0 -0
  242. data/template-min/extjs/resources/themes/images/default/layout/mini-bottom.gif +0 -0
  243. data/template-min/extjs/resources/themes/images/default/layout/mini-left.gif +0 -0
  244. data/template-min/extjs/resources/themes/images/default/layout/mini-right.gif +0 -0
  245. data/template-min/extjs/resources/themes/images/default/layout/mini-top.gif +0 -0
  246. data/template-min/extjs/resources/themes/images/default/menu/checked.gif +0 -0
  247. data/template-min/extjs/resources/themes/images/default/menu/group-checked.gif +0 -0
  248. data/template-min/extjs/resources/themes/images/default/menu/item-over.gif +0 -0
  249. data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-bg.gif +0 -0
  250. data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-corners.gif +0 -0
  251. data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-sides.gif +0 -0
  252. data/template-min/extjs/resources/themes/images/default/menu/menu-parent.gif +0 -0
  253. data/template-min/extjs/resources/themes/images/default/menu/menu.gif +0 -0
  254. data/template-min/extjs/resources/themes/images/default/menu/unchecked.gif +0 -0
  255. data/template-min/extjs/resources/themes/images/default/panel/panel-default-framed-corners.gif +0 -0
  256. data/template-min/extjs/resources/themes/images/default/panel/panel-default-framed-sides.gif +0 -0
  257. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-bottom-bg.gif +0 -0
  258. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-bg.gif +0 -0
  259. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-corners.gif +0 -0
  260. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-sides.gif +0 -0
  261. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif +0 -0
  262. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif +0 -0
  263. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif +0 -0
  264. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-bg.gif +0 -0
  265. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-corners.gif +0 -0
  266. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-sides.gif +0 -0
  267. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-bg.gif +0 -0
  268. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-corners.gif +0 -0
  269. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-sides.gif +0 -0
  270. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-bg.gif +0 -0
  271. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-corners.gif +0 -0
  272. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-sides.gif +0 -0
  273. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-bg.gif +0 -0
  274. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-corners.gif +0 -0
  275. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-sides.gif +0 -0
  276. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-bg.gif +0 -0
  277. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-corners.gif +0 -0
  278. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-sides.gif +0 -0
  279. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-bg.gif +0 -0
  280. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-corners.gif +0 -0
  281. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-sides.gif +0 -0
  282. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-left-bg.gif +0 -0
  283. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-right-bg.gif +0 -0
  284. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-top-bg.gif +0 -0
  285. data/template-min/extjs/resources/themes/images/default/progress/progress-default-bg.gif +0 -0
  286. data/template-min/extjs/resources/themes/images/default/shared/blue-loading.gif +0 -0
  287. data/template-min/extjs/resources/themes/images/default/shared/calendar.gif +0 -0
  288. data/template-min/extjs/resources/themes/images/default/shared/glass-bg.gif +0 -0
  289. data/template-min/extjs/resources/themes/images/default/shared/hd-sprite.gif +0 -0
  290. data/template-min/extjs/resources/themes/images/default/shared/icon-error.gif +0 -0
  291. data/template-min/extjs/resources/themes/images/default/shared/icon-info.gif +0 -0
  292. data/template-min/extjs/resources/themes/images/default/shared/icon-question.gif +0 -0
  293. data/template-min/extjs/resources/themes/images/default/shared/icon-warning.gif +0 -0
  294. data/template-min/extjs/resources/themes/images/default/shared/large-loading.gif +0 -0
  295. data/template-min/extjs/resources/themes/images/default/shared/left-btn.gif +0 -0
  296. data/template-min/extjs/resources/themes/images/default/shared/loading-balls.gif +0 -0
  297. data/template-min/extjs/resources/themes/images/default/shared/right-btn.gif +0 -0
  298. data/template-min/extjs/resources/themes/images/default/shared/shadow-c.png +0 -0
  299. data/template-min/extjs/resources/themes/images/default/shared/shadow-lr.png +0 -0
  300. data/template-min/extjs/resources/themes/images/default/shared/shadow.png +0 -0
  301. data/template-min/extjs/resources/themes/images/default/shared/warning.gif +0 -0
  302. data/template-min/extjs/resources/themes/images/default/sizer/e-handle-dark.gif +0 -0
  303. data/template-min/extjs/resources/themes/images/default/sizer/e-handle.gif +0 -0
  304. data/template-min/extjs/resources/themes/images/default/sizer/ne-handle-dark.gif +0 -0
  305. data/template-min/extjs/resources/themes/images/default/sizer/ne-handle.gif +0 -0
  306. data/template-min/extjs/resources/themes/images/default/sizer/nw-handle-dark.gif +0 -0
  307. data/template-min/extjs/resources/themes/images/default/sizer/nw-handle.gif +0 -0
  308. data/template-min/extjs/resources/themes/images/default/sizer/s-handle-dark.gif +0 -0
  309. data/template-min/extjs/resources/themes/images/default/sizer/s-handle.gif +0 -0
  310. data/template-min/extjs/resources/themes/images/default/sizer/se-handle-dark.gif +0 -0
  311. data/template-min/extjs/resources/themes/images/default/sizer/se-handle.gif +0 -0
  312. data/template-min/extjs/resources/themes/images/default/sizer/square.gif +0 -0
  313. data/template-min/extjs/resources/themes/images/default/sizer/sw-handle-dark.gif +0 -0
  314. data/template-min/extjs/resources/themes/images/default/sizer/sw-handle.gif +0 -0
  315. data/template-min/extjs/resources/themes/images/default/slider/slider-bg.gif +0 -0
  316. data/template-min/extjs/resources/themes/images/default/slider/slider-bg.png +0 -0
  317. data/template-min/extjs/resources/themes/images/default/slider/slider-thumb.gif +0 -0
  318. data/template-min/extjs/resources/themes/images/default/slider/slider-thumb.png +0 -0
  319. data/template-min/extjs/resources/themes/images/default/slider/slider-v-bg.gif +0 -0
  320. data/template-min/extjs/resources/themes/images/default/slider/slider-v-bg.png +0 -0
  321. data/template-min/extjs/resources/themes/images/default/slider/slider-v-thumb.gif +0 -0
  322. data/template-min/extjs/resources/themes/images/default/slider/slider-v-thumb.png +0 -0
  323. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-bg.gif +0 -0
  324. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-corners.gif +0 -0
  325. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-sides.gif +0 -0
  326. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-bg.gif +0 -0
  327. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-corners.gif +0 -0
  328. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-bg.gif +0 -0
  329. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-corners.gif +0 -0
  330. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-sides.gif +0 -0
  331. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-bg.gif +0 -0
  332. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-corners.gif +0 -0
  333. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-sides.gif +0 -0
  334. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-sides.gif +0 -0
  335. data/template-min/extjs/resources/themes/images/default/tab/tab-default-close.gif +0 -0
  336. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-bg.gif +0 -0
  337. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-corners.gif +0 -0
  338. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-sides.gif +0 -0
  339. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-bg.gif +0 -0
  340. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-corners.gif +0 -0
  341. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-bg.gif +0 -0
  342. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-corners.gif +0 -0
  343. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-sides.gif +0 -0
  344. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-bg.gif +0 -0
  345. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-corners.gif +0 -0
  346. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-sides.gif +0 -0
  347. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-sides.gif +0 -0
  348. data/template-min/extjs/resources/themes/images/default/tab-bar/scroll-left.gif +0 -0
  349. data/template-min/extjs/resources/themes/images/default/tab-bar/scroll-right.gif +0 -0
  350. data/template-min/extjs/resources/themes/images/default/tab-bar/tab-bar-default-bg.gif +0 -0
  351. data/template-min/extjs/resources/themes/images/default/tip/tip-corners.gif +0 -0
  352. data/template-min/extjs/resources/themes/images/default/tip/tip-sides.gif +0 -0
  353. data/template-min/extjs/resources/themes/images/default/toolbar/more.gif +0 -0
  354. data/template-min/extjs/resources/themes/images/default/toolbar/scroll-left.gif +0 -0
  355. data/template-min/extjs/resources/themes/images/default/toolbar/scroll-right.gif +0 -0
  356. data/template-min/extjs/resources/themes/images/default/toolbar/toolbar-default-bg.gif +0 -0
  357. data/template-min/extjs/resources/themes/images/default/tools/tool-sprite-tpl.gif +0 -0
  358. data/template-min/extjs/resources/themes/images/default/tools/tool-sprites.gif +0 -0
  359. data/template-min/extjs/resources/themes/images/default/tools/tools-sprites-trans.gif +0 -0
  360. data/{template → template-min}/extjs/resources/themes/images/default/tree/arrows.gif +0 -0
  361. data/template-min/extjs/resources/themes/images/default/tree/drop-above.gif +0 -0
  362. data/template-min/extjs/resources/themes/images/default/tree/drop-add.gif +0 -0
  363. data/template-min/extjs/resources/themes/images/default/tree/drop-append.gif +0 -0
  364. data/template-min/extjs/resources/themes/images/default/tree/drop-below.gif +0 -0
  365. data/template-min/extjs/resources/themes/images/default/tree/drop-between.gif +0 -0
  366. data/template-min/extjs/resources/themes/images/default/tree/drop-no.gif +0 -0
  367. data/template-min/extjs/resources/themes/images/default/tree/drop-over.gif +0 -0
  368. data/template-min/extjs/resources/themes/images/default/tree/drop-under.gif +0 -0
  369. data/template-min/extjs/resources/themes/images/default/tree/drop-yes.gif +0 -0
  370. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-minus-nl.gif +0 -0
  371. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-minus.gif +0 -0
  372. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-plus-nl.gif +0 -0
  373. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-plus.gif +0 -0
  374. data/{template/resources/images → template-min/extjs/resources/themes/images/default/tree}/elbow-end.gif +0 -0
  375. data/template-min/extjs/resources/themes/images/default/tree/elbow-line.gif +0 -0
  376. data/template-min/extjs/resources/themes/images/default/tree/elbow-minus-nl.gif +0 -0
  377. data/template-min/extjs/resources/themes/images/default/tree/elbow-minus.gif +0 -0
  378. data/template-min/extjs/resources/themes/images/default/tree/elbow-plus-nl.gif +0 -0
  379. data/template-min/extjs/resources/themes/images/default/tree/elbow-plus.gif +0 -0
  380. data/template-min/extjs/resources/themes/images/default/tree/elbow.gif +0 -0
  381. data/template-min/extjs/resources/themes/images/default/tree/folder-open.gif +0 -0
  382. data/template-min/extjs/resources/themes/images/default/tree/folder.gif +0 -0
  383. data/template-min/extjs/resources/themes/images/default/tree/leaf.gif +0 -0
  384. data/template-min/extjs/resources/themes/images/default/tree/loading.gif +0 -0
  385. data/template-min/extjs/resources/themes/images/default/tree/s.gif +0 -0
  386. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-bottom.gif +0 -0
  387. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-left.gif +0 -0
  388. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-right.gif +0 -0
  389. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-top.gif +0 -0
  390. data/template-min/extjs/resources/themes/images/default/window/window-default-corners.gif +0 -0
  391. data/template-min/extjs/resources/themes/images/default/window/window-default-sides.gif +0 -0
  392. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-bottom-corners.gif +0 -0
  393. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-bottom-sides.gif +0 -0
  394. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-left-corners.gif +0 -0
  395. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-left-sides.gif +0 -0
  396. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-right-corners.gif +0 -0
  397. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-right-sides.gif +0 -0
  398. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-top-corners.gif +0 -0
  399. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-top-sides.gif +0 -0
  400. data/{template → template-min}/favicon.ico +0 -0
  401. data/template-min/index.php +59 -0
  402. data/template-min/print-template.html +22 -0
  403. data/template-min/resources/css/app.css +1 -0
  404. data/template-min/resources/images/arrows.png +0 -0
  405. data/{template → template-min}/resources/images/class-m.png +0 -0
  406. data/{template → template-min}/resources/images/class-sm.png +0 -0
  407. data/{template → template-min}/resources/images/component-m.png +0 -0
  408. data/{template → template-min}/resources/images/configs.png +0 -0
  409. data/{template → template-min}/resources/images/doc-m.png +0 -0
  410. data/template-min/resources/images/elbow-end.gif +0 -0
  411. data/{template → template-min}/resources/images/events.png +0 -0
  412. data/template-min/resources/images/example-icons.png +0 -0
  413. data/{template → template-min}/resources/images/expandcollapse.png +0 -0
  414. data/{template → template-min}/resources/images/guide-icon.png +0 -0
  415. data/{template → template-min}/resources/images/guides.png +0 -0
  416. data/template-min/resources/images/header.png +0 -0
  417. data/template-min/resources/images/hero-extjs4-alt.png +0 -0
  418. data/template-min/resources/images/icons.png +0 -0
  419. data/template-min/resources/images/link-green-standard-over.png +0 -0
  420. data/template-min/resources/images/link-green-standard.png +0 -0
  421. data/{template → template-min}/resources/images/loading-title.png +0 -0
  422. data/{template → template-min}/resources/images/loading.gif +0 -0
  423. data/template-min/resources/images/logo-screen-noglow.png +0 -0
  424. data/template-min/resources/images/logo.png +0 -0
  425. data/{template → template-min}/resources/images/member-collapsed.gif +0 -0
  426. data/{template → template-min}/resources/images/member-expanded.gif +0 -0
  427. data/{template → template-min}/resources/images/member-hover.gif +0 -0
  428. data/{template → template-min}/resources/images/methods.png +0 -0
  429. data/template-min/resources/images/more.png +0 -0
  430. data/template-min/resources/images/preview.png +0 -0
  431. data/template-min/resources/images/print.png +0 -0
  432. data/{template → template-min}/resources/images/properties.png +0 -0
  433. data/template-min/resources/images/search-box.png +0 -0
  434. data/{template → template-min}/resources/images/singleton-m.png +0 -0
  435. data/template-min/resources/images/tabs.png +0 -0
  436. data/{template → template-min}/resources/images/version-tabs.png +0 -0
  437. data/template-min/resources/images/welcome-bg-js4.gif +0 -0
  438. data/{template → template-min}/resources/images/x.png +0 -0
  439. data/{template → template-min}/resources/images/x12.png +0 -0
  440. data/template-min/resources/images/x122.png +0 -0
  441. data/{template/index.html → template-min/template.html} +9 -14
  442. data/template-min/welcome.html +78 -0
  443. metadata +429 -76
  444. data/lib/jsduck/jsonp.rb +0 -17
  445. data/lib/jsduck/tree.rb +0 -117
  446. data/lib/jsduck/tree_icons.rb +0 -19
  447. data/template/app/Application.js +0 -53
  448. data/template/app/Favorites.js +0 -88
  449. data/template/app/History.js +0 -45
  450. data/template/app/LocalStore.js +0 -45
  451. data/template/app/Settings.js +0 -39
  452. data/template/app/Syntax.js +0 -20
  453. data/template/app/controller/Classes.js +0 -301
  454. data/template/app/controller/Search.js +0 -189
  455. data/template/app/model/Favorite.js +0 -11
  456. data/template/app/model/Setting.js +0 -11
  457. data/template/app/store/Favorites.js +0 -7
  458. data/template/app/store/Search.js +0 -14
  459. data/template/app/store/Settings.js +0 -7
  460. data/template/app/view/ClassGrid.js +0 -114
  461. data/template/app/view/HoverMenu.js +0 -59
  462. data/template/app/view/HoverMenuButton.js +0 -147
  463. data/template/app/view/Viewport.js +0 -240
  464. data/template/app/view/cls/Header.js +0 -47
  465. data/template/app/view/cls/Overview.js +0 -415
  466. data/template/app/view/cls/Toolbar.js +0 -199
  467. data/template/app/view/index/Container.js +0 -62
  468. data/template/app/view/search/Dropdown.js +0 -115
  469. data/template/app/view/tree/Tree.js +0 -143
  470. data/template/app.js +0 -25
  471. data/template/prettify/prettify.css +0 -1
  472. data/template/prettify/prettify.js +0 -28
  473. data/template/resources/css/docs-ext.css +0 -3594
  474. data/template/resources/css/reset.css +0 -59
  475. data/template/resources/css/scrollbars.css +0 -14
  476. data/template/resources/css/viewport.css +0 -420
  477. data/template/resources/images/data-package.png +0 -0
  478. data/template/resources/images/drag-bar-center.png +0 -0
  479. data/template/resources/images/headBG.png +0 -0
  480. data/template/resources/images/header.gif +0 -0
  481. data/template/resources/images/icon.png +0 -0
  482. data/template/resources/images/icons.png +0 -0
  483. data/template/resources/images/model.png +0 -0
  484. data/template/resources/images/root-lines.png +0 -0
  485. data/template/resources/images/search-box.png +0 -0
@@ -1,11 +1,13 @@
1
1
  require 'jsduck/lexer'
2
2
  require 'jsduck/doc_parser'
3
+ require 'jsduck/js_literal_parser'
4
+ require 'jsduck/js_literal_builder'
3
5
 
4
6
  module JsDuck
5
7
 
6
- class JsParser
8
+ class JsParser < JsLiteralParser
7
9
  def initialize(input)
8
- @lex = Lexer.new(input)
10
+ super(input)
9
11
  @doc_parser = DocParser.new
10
12
  @docs = []
11
13
  end
@@ -86,7 +88,7 @@ module JsDuck
86
88
  elsif look(:ident) || look("this")
87
89
  maybe_assignment
88
90
  elsif look(:string)
89
- {:type => :assignment, :left => [match(:string)]}
91
+ {:type => :assignment, :left => [match(:string)[:value]]}
90
92
  else
91
93
  {:type => :nop}
92
94
  end
@@ -97,7 +99,7 @@ module JsDuck
97
99
  match("function")
98
100
  return {
99
101
  :type => :function,
100
- :name => look(:ident) ? match(:ident) : nil,
102
+ :name => look(:ident) ? match(:ident)[:value] : nil,
101
103
  :params => function_parameters,
102
104
  :body => function_body,
103
105
  }
@@ -106,9 +108,9 @@ module JsDuck
106
108
  # <function-parameters> := "(" [ <ident> [ "," <ident> ]* ] ")"
107
109
  def function_parameters
108
110
  match("(")
109
- params = look(:ident) ? [{:name => match(:ident)}] : []
111
+ params = look(:ident) ? [{:name => match(:ident)[:value]}] : []
110
112
  while look(",", :ident) do
111
- params << {:name => match(",", :ident)}
113
+ params << {:name => match(",", :ident)[:value]}
112
114
  end
113
115
  match(")")
114
116
  return params
@@ -142,33 +144,52 @@ module JsDuck
142
144
  # <ident-chain> := [ "this" | <ident> ] [ "." <ident> ]*
143
145
  def ident_chain
144
146
  if look("this")
145
- chain = [match("this")]
147
+ chain = [match("this")[:value]]
146
148
  else
147
- chain = [match(:ident)]
149
+ chain = [match(:ident)[:value]]
148
150
  end
149
151
 
150
152
  while look(".", :ident) do
151
- chain << match(".", :ident)
153
+ chain << match(".", :ident)[:value]
152
154
  end
153
155
  return chain
154
156
  end
155
157
 
156
158
  # <expression> := <function> | <ext-extend> | <literal>
157
- # <literal> := <string> | <boolean> | <number> | <regex>
158
159
  def expression
159
160
  if look("function")
160
161
  function
161
162
  elsif look("Ext", ".", "extend")
162
163
  ext_extend
163
- elsif look(:string)
164
- {:type => :literal, :class => "String"}
165
- elsif look("true") || look("false")
166
- {:type => :literal, :class => "Boolean"}
167
- elsif look(:number)
168
- {:type => :literal, :class => "Number"}
169
- elsif look(:regex)
170
- {:type => :literal, :class => "RegExp"}
164
+ else
165
+ my_literal
166
+ end
167
+ end
168
+
169
+ # <literal> := ...see JsLiteralParser...
170
+ def my_literal
171
+ lit = literal
172
+ return unless lit
173
+
174
+ cls_map = {
175
+ :string => "String",
176
+ :number => "Number",
177
+ :regex => "RegExp",
178
+ :array => "Array",
179
+ :object => "Object",
180
+ }
181
+
182
+ if cls_map[lit[:type]]
183
+ cls = cls_map[lit[:type]]
184
+ elsif lit[:type] == :ident && (lit[:value] == "true" || lit[:value] == "false")
185
+ cls = "Boolean"
186
+ else
187
+ cls = nil
171
188
  end
189
+
190
+ value = JsLiteralBuilder.new.to_s(lit)
191
+
192
+ {:type => :literal, :class => cls, :value => value}
172
193
  end
173
194
 
174
195
  # <ext-extend> := "Ext" "." "extend" "(" <ident-chain> "," ...
@@ -184,7 +205,7 @@ module JsDuck
184
205
  def ext_define
185
206
  match("Ext", ".");
186
207
  look("define") ? match("define") : match("ClassManager", ".", "create");
187
- name = match("(", :string)
208
+ name = match("(", :string)[:value]
188
209
 
189
210
  if look(",", "{")
190
211
  match(",")
@@ -199,103 +220,115 @@ module JsDuck
199
220
  cfg
200
221
  end
201
222
 
202
- # <ext-define-cfg> := "{" ( <extend> | <mixins> | <alternate-class-name> | <alias> | <?> )*
223
+ # <ext-define-cfg> := "{" ( <extend> | <mixins> | <alternate-class-name> | <alias> |
224
+ # <requires> | <uses> | <singleton> | <?> )*
203
225
  def ext_define_cfg
204
226
  match("{")
205
227
  cfg = {}
206
228
  found = true
207
229
  while found
208
230
  found = false
209
- if look("extend", ":", :string)
210
- cfg[:extend] = ext_define_extend
211
- found = true
212
- elsif look("mixins", ":", "{")
213
- cfg[:mixins] = ext_define_mixins
214
- found = true
215
- elsif look("alternateClassName", ":")
216
- cfg[:alternateClassNames] = ext_define_alternate_class_names
217
- found = true
218
- elsif look("alias", ":")
219
- cfg[:alias] = ext_define_alias
220
- found = true
221
- elsif look(:ident, ":")
222
- match(:ident, ":")
223
- if look(:string) || look(:number) || look(:regex) ||
224
- look("true") || look("false") ||
225
- look("null") || look("undefined")
226
- # Some key with literal value -- ignore
227
- @lex.next
228
- found = true
229
- elsif look("[")
230
- # Some key with array of strings -- ignore
231
- found = array_of_strings
232
- end
231
+ if found = ext_define_extend
232
+ cfg[:extend] = found
233
+ elsif found = ext_define_mixins
234
+ cfg[:mixins] = found
235
+ elsif found = ext_define_alternate_class_name
236
+ cfg[:alternateClassNames] = found
237
+ elsif found = ext_define_alias
238
+ cfg[:alias] = found
239
+ elsif found = ext_define_requires
240
+ cfg[:requires] = found
241
+ elsif found = ext_define_uses
242
+ cfg[:uses] = found
243
+ elsif found = ext_define_singleton
244
+ cfg[:singleton] = found
245
+ elsif found = ext_define_whatever
246
+ # ignore this
233
247
  end
234
248
  match(",") if look(",")
235
249
  end
236
250
  cfg
237
251
  end
238
252
 
239
- # <ext-define-extend> := "extend" ":" <string>
253
+ # <extend> := "extend" ":" <string>
240
254
  def ext_define_extend
241
- match("extend", ":", :string)
255
+ if look("extend", ":", :string)
256
+ match("extend", ":", :string)[:value]
257
+ end
242
258
  end
243
259
 
244
- # <ext-define-alternate-class-names> := "alternateClassName" ":" <string-or-list>
245
- def ext_define_alternate_class_names
246
- match("alternateClassName", ":")
247
- string_or_list
260
+ # <mixins> := "mixins" ":" <object-literal>
261
+ def ext_define_mixins
262
+ if look("mixins", ":", "{")
263
+ match("mixins", ":")
264
+ lit = literal
265
+ lit && lit[:value].map {|x| x[:value][:value] }
266
+ end
248
267
  end
249
268
 
250
- # <ext-define-alias> := "alias" ":" <string-or-list>
269
+ # <alternate-class-name> := "alternateClassName" ":" <string-or-list>
270
+ def ext_define_alternate_class_name
271
+ if look("alternateClassName", ":")
272
+ match("alternateClassName", ":")
273
+ string_or_list
274
+ end
275
+ end
276
+
277
+ # <alias> := "alias" ":" <string-or-list>
251
278
  def ext_define_alias
252
- match("alias", ":")
253
- string_or_list
279
+ if look("alias", ":")
280
+ match("alias", ":")
281
+ string_or_list
282
+ end
254
283
  end
255
284
 
256
- # <string-or-list> := ( <string> | <array-of-strings> )
257
- def string_or_list
258
- if look(:string)
259
- [ match(:string) ]
260
- elsif look("[")
261
- array_of_strings
262
- else
263
- []
285
+ # <requires> := "requires" ":" <string-or-list>
286
+ def ext_define_requires
287
+ if look("requires", ":")
288
+ match("requires", ":")
289
+ string_or_list
264
290
  end
265
291
  end
266
292
 
267
- # <ext-define-mixins> := "mixins" ":" "{" [ <ident> ":" <string> ","? ]* "}"
268
- def ext_define_mixins
269
- match("mixins", ":", "{")
270
- mixins = []
271
- while look(:ident, ":", :string)
272
- mixins << match(:ident, ":", :string)
273
- match(",") if look(",")
293
+ # <uses> := "uses" ":" <string-or-list>
294
+ def ext_define_uses
295
+ if look("uses", ":")
296
+ match("uses", ":")
297
+ string_or_list
274
298
  end
275
- match("}") if look("}")
276
- mixins
277
299
  end
278
300
 
279
- # <array-of-strings> := "[" [ <string> ","? ]* "]"
280
- def array_of_strings
281
- match("[")
282
- strs = []
283
- while look(:string)
284
- strs << match(:string)
285
- match(",") if look(",")
301
+ # <singleton> := "singleton" ":" "true"
302
+ def ext_define_singleton
303
+ if look("singleton", ":", "true")
304
+ match("singleton", ":", "true")
305
+ true
286
306
  end
307
+ end
287
308
 
288
- if look("]")
289
- match("]")
290
- strs
309
+ # <?> := <ident> ":" <literal>
310
+ def ext_define_whatever
311
+ if look(:ident, ":")
312
+ match(:ident, ":")
313
+ literal
314
+ end
315
+ end
316
+
317
+ # <string-or-list> := ( <string> | <array-literal> )
318
+ def string_or_list
319
+ lit = literal
320
+ if lit && lit[:type] == :string
321
+ [ lit[:value] ]
322
+ elsif lit && lit[:type] == :array
323
+ lit[:value].map {|x| x[:value] }
291
324
  else
292
- false
325
+ []
293
326
  end
294
327
  end
295
328
 
296
329
  # <property-literal> := ( <ident> | <string> ) ":" <expression>
297
330
  def property_literal
298
- left = look(:ident) ? match(:ident) : match(:string)
331
+ left = look(:ident) ? match(:ident)[:value] : match(:string)[:value]
299
332
  match(":")
300
333
  right = expression
301
334
  return {
@@ -305,21 +338,6 @@ module JsDuck
305
338
  }
306
339
  end
307
340
 
308
- # Matches all arguments, returns the value of last match
309
- # When the whole sequence doesn't match, throws exception
310
- def match(*args)
311
- if look(*args)
312
- last = nil
313
- args.length.times { last = @lex.next }
314
- last
315
- else
316
- throw "Expected: " + args.join(", ")
317
- end
318
- end
319
-
320
- def look(*args)
321
- @lex.look(*args)
322
- end
323
341
  end
324
342
 
325
343
  end
@@ -0,0 +1,45 @@
1
+ require 'json'
2
+
3
+ module JsDuck
4
+
5
+ # Wrapper around the json gem for use in JsDuck.
6
+ #
7
+ # The main benefit of it is that we have a central place for
8
+ # controlling how the JSON is created (pretty-formatted or not).
9
+ class JsonDuck
10
+ @@pretty = false
11
+
12
+ # Set to true to turn on pretty-formatting of JSON
13
+ def self.pretty=(pretty)
14
+ @@pretty = pretty
15
+ end
16
+
17
+ # Turns object into JSON, places it inside JavaScript that calls the
18
+ # given callback name, and writes the result to file.
19
+ def self.write_jsonp(filename, callback_name, data)
20
+ jsonp = "Ext.data.JsonP." + callback_name + "(" + self.generate(data) + ");"
21
+ File.open(filename, 'w') {|f| f.write(jsonp) }
22
+ end
23
+
24
+ # Turns object into JSON and writes inside a file
25
+ def self.write_json(filename, data)
26
+ File.open(filename, 'w') {|f| f.write(self.generate(data)) }
27
+ end
28
+
29
+ # Generates JSON from object
30
+ def self.generate(data)
31
+ @@pretty ? JSON.pretty_generate(data) : JSON.generate(data)
32
+ end
33
+
34
+ # Reads and parses JSON from file
35
+ def self.read(filename)
36
+ self.parse(IO.read(filename))
37
+ end
38
+
39
+ # Parses JSON string
40
+ def self.parse(string)
41
+ JSON.parse(string)
42
+ end
43
+ end
44
+
45
+ end
data/lib/jsduck/lexer.rb CHANGED
@@ -19,9 +19,15 @@ module JsDuck
19
19
  # comments are ignored just as whitespace.
20
20
  #
21
21
  class Lexer
22
+ # Input can be either a String or StringScanner.
23
+ #
24
+ # In the latter case we ensure that only #next will advance the
25
+ # scanpointer of StringScanner - this allows context-switching
26
+ # while parsing some string. Specifically we need this feature to
27
+ # parse some JavaScript inside doc-comments.
22
28
  def initialize(input)
23
- @input = StringScanner.new(input)
24
- tokenize
29
+ @input = input.is_a?(StringScanner) ? input : StringScanner.new(input)
30
+ @buffer = []
25
31
  end
26
32
 
27
33
  # Tests if given pattern matches the tokens that follow at current
@@ -33,12 +39,14 @@ module JsDuck
33
39
  # look(:ident, "=", :regex)
34
40
  #
35
41
  def look(*tokens)
42
+ buffer_tokens(tokens.length)
36
43
  i = 0
37
44
  tokens.all? do |t|
38
- tok = @tokens[i]
45
+ tok = @buffer[i]
39
46
  i += 1
40
- return false if tok == nil
41
- if t.instance_of?(Symbol)
47
+ if !tok
48
+ false
49
+ elsif t.instance_of?(Symbol)
42
50
  tok[:type] == t
43
51
  else
44
52
  tok[:value] == t
@@ -57,16 +65,39 @@ module JsDuck
57
65
  # pointing to the line where the doc-comment began.
58
66
  #
59
67
  def next(full=false)
60
- tok = @tokens.shift
68
+ buffer_tokens(1)
69
+ tok = @buffer.shift
70
+ # advance the scanpointer to the position after this token
71
+ @input.pos = tok[:pos]
61
72
  full ? tok : tok[:value]
62
73
  end
63
74
 
64
75
  # True when no more tokens.
65
76
  def empty?
66
- @tokens.empty?
77
+ buffer_tokens(1)
78
+ return !@buffer.first
79
+ end
80
+
81
+ # Ensures next n tokens are read in buffer
82
+ #
83
+ # At the end of buffering the initial position scanpointer is
84
+ # restored. Only the #next method will advance the scanpointer in
85
+ # a way that's visible outside this class.
86
+ def buffer_tokens(n)
87
+ prev_pos = @input.pos
88
+ @input.pos = @buffer.last[:pos] if @buffer.last
89
+ (n - @buffer.length).times do
90
+ @previous_token = tok = next_token
91
+ if tok
92
+ # remember scanpointer position after each token
93
+ tok[:pos] = @input.pos
94
+ @buffer << tok
95
+ end
96
+ end
97
+ @input.pos = prev_pos
67
98
  end
68
99
 
69
- # Goes through the whole input and tokenizes it
100
+ # Parses out next token from input stream.
70
101
  #
71
102
  # For efficency we look for tokens in order of frequency in
72
103
  # JavaScript source code:
@@ -79,36 +110,35 @@ module JsDuck
79
110
  # The remaining token types are less frequent, so these are left
80
111
  # to the end.
81
112
  #
82
- def tokenize
83
- @tokens = []
113
+ def next_token
84
114
  while !@input.eos? do
85
115
  skip_white
86
116
  if @input.check(/[.(),;={}:]/)
87
- @tokens << {
117
+ return {
88
118
  :type => :operator,
89
119
  :value => @input.scan(/./)
90
120
  }
91
121
  elsif @input.check(/[a-zA-Z_]/)
92
122
  value = @input.scan(/\w+/)
93
- @tokens << {
123
+ return {
94
124
  :type => KEYWORDS[value] ? :keyword : :ident,
95
125
  :value => value
96
126
  }
97
127
  elsif @input.check(/'/)
98
- @tokens << {
128
+ return {
99
129
  :type => :string,
100
- :value => @input.scan(/'([^'\\]|\\.)*'/).sub(/^'(.*)'$/, "\\1")
130
+ :value => @input.scan(/'([^'\\]|\\.)*'/m).sub(/^'(.*)'$/m, "\\1")
101
131
  }
102
132
  elsif @input.check(/"/)
103
- @tokens << {
133
+ return {
104
134
  :type => :string,
105
- :value => @input.scan(/"([^"\\]|\\.)*"/).sub(/^"(.*)"$/, "\\1")
135
+ :value => @input.scan(/"([^"\\]|\\.)*"/m).sub(/^"(.*)"$/m, "\\1")
106
136
  }
107
137
  elsif @input.check(/\//)
108
138
  # Several things begin with dash:
109
139
  # - comments, regexes, division-operators
110
140
  if @input.check(/\/\*\*/)
111
- @tokens << {
141
+ return {
112
142
  :type => :doc_comment,
113
143
  # Calculate current line number, starting with 1
114
144
  :linenr => @input.string[0...@input.pos].count("\n") + 1,
@@ -121,30 +151,30 @@ module JsDuck
121
151
  # skip line comment
122
152
  @input.scan_until(/\n|\Z/)
123
153
  elsif regex?
124
- @tokens << {
154
+ return {
125
155
  :type => :regex,
126
156
  :value => @input.scan(/\/([^\/\\]|\\.)*\/[gim]*/)
127
157
  }
128
158
  else
129
- @tokens << {
159
+ return {
130
160
  :type => :operator,
131
161
  :value => @input.scan(/\//)
132
162
  }
133
163
  end
134
164
  elsif @input.check(/[0-9]+/)
135
165
  nr = @input.scan(/[0-9]+(\.[0-9]*)?/)
136
- @tokens << {
166
+ return {
137
167
  :type => :number,
138
168
  :value => nr
139
169
  }
140
170
  elsif @input.check(/\$/)
141
171
  value = @input.scan(/\$\w*/)
142
- @tokens << {
172
+ return {
143
173
  :type => :ident,
144
174
  :value => value
145
175
  }
146
176
  elsif @input.check(/./)
147
- @tokens << {
177
+ return {
148
178
  :type => :operator,
149
179
  :value => @input.scan(/./)
150
180
  }
@@ -160,9 +190,9 @@ module JsDuck
160
190
  # - closing square-bracket ]
161
191
  # Otherwise it's a beginning of regex
162
192
  def regex?
163
- if @tokens.last
164
- type = @tokens.last[:type]
165
- value = @tokens.last[:value]
193
+ if @previous_token
194
+ type = @previous_token[:type]
195
+ value = @previous_token[:value]
166
196
  if type == :ident || type == :number
167
197
  return false
168
198
  elsif type == :keyword && value == "this"
@@ -0,0 +1,84 @@
1
+ require 'jsduck/logger'
2
+
3
+ module JsDuck
4
+
5
+ # Reports bugs and problems in documentation
6
+ class Lint
7
+ attr_accessor :relations
8
+
9
+ def initialize(relations)
10
+ @relations = relations
11
+ end
12
+
13
+ # Runs the linter
14
+ def run
15
+ warn_globals
16
+ warn_unnamed
17
+ warn_optional_params
18
+ warn_duplicate_params
19
+ end
20
+
21
+ # print warning for each global member
22
+ def warn_globals
23
+ global = @relations["global"]
24
+ return unless global
25
+ global.each_member do |member|
26
+ warn("Global #{member[:tagname]}: #{member[:name]}", member)
27
+ end
28
+ end
29
+
30
+ # print warning for each member or parameter with no name
31
+ def warn_unnamed
32
+ each_member do |member|
33
+ if !member[:name] || member[:name] == ""
34
+ warn("Unnamed #{member[:tagname]}", member)
35
+ end
36
+ (member[:params] || []).each do |p|
37
+ if !p[:name] || p[:name] == ""
38
+ warn("Unnamed parameter", member)
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ # print warning for each non-optional parameter that follows an optional parameter
45
+ def warn_optional_params
46
+ each_member do |member|
47
+ if member[:tagname] == :method
48
+ optional_found = false
49
+ member[:params].each do |p|
50
+ if optional_found && !p[:optional]
51
+ warn("Optional param can't be followed by regular param #{p[:name]}", member)
52
+ end
53
+ optional_found = optional_found || p[:optional]
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ # print warnings for duplicate parameter names
60
+ def warn_duplicate_params
61
+ each_member do |member|
62
+ params = {}
63
+ (member[:params] || []).each do |p|
64
+ if params[p[:name]]
65
+ warn("Duplicate parameter name #{p[:name]}", member)
66
+ end
67
+ params[p[:name]] = true
68
+ end
69
+ end
70
+ end
71
+
72
+ # Loops through all members of all classes
73
+ def each_member(&block)
74
+ @relations.each {|cls| cls.each_member(&block) }
75
+ end
76
+
77
+ # Prints warning + filename and linenumber from doc-context
78
+ def warn(msg, context)
79
+ Logger.instance.warn(msg + " in #{context[:filename]} line #{context[:linenr]}")
80
+ end
81
+
82
+ end
83
+
84
+ end