jsduck 2.0.pre4 → 3.0.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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