tdiary 3.2.2.20130507

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 (509) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +16 -0
  4. data/.travis.yml +29 -0
  5. data/Capfile +2 -0
  6. data/ChangeLog +3173 -0
  7. data/Gemfile +58 -0
  8. data/Gemfile.lock +201 -0
  9. data/LICENSE +340 -0
  10. data/Procfile +1 -0
  11. data/README.md +33 -0
  12. data/Rakefile +26 -0
  13. data/bin/tdiary +7 -0
  14. data/config.ru +61 -0
  15. data/data/.htaccess +2 -0
  16. data/doc/HOWTO-authenticate-in-rack.md +89 -0
  17. data/doc/HOWTO-make-io.md +305 -0
  18. data/doc/HOWTO-make-plugin.md +279 -0
  19. data/doc/HOWTO-make-theme.md +67 -0
  20. data/doc/HOWTO-testing-tDiary.md +44 -0
  21. data/doc/HOWTO-use-plugin.md +148 -0
  22. data/doc/HOWTO-write-tDiary.en.md +131 -0
  23. data/doc/HOWTO-write-tDiary.md +136 -0
  24. data/doc/INSTALL-paas.md +202 -0
  25. data/doc/INSTALL.md +160 -0
  26. data/doc/README.en.md +174 -0
  27. data/doc/README.md +56 -0
  28. data/doc/UPGRADE.md +164 -0
  29. data/doc/doc.css +115 -0
  30. data/dot.htaccess +27 -0
  31. data/index.fcgi +45 -0
  32. data/index.rb +57 -0
  33. data/js/00default.js +60 -0
  34. data/js/01conf.js +62 -0
  35. data/js/02edit.coffee +5 -0
  36. data/js/02edit.js +15 -0
  37. data/js/amazon.js +43 -0
  38. data/js/calendar3.js +130 -0
  39. data/js/caretposition.js +170 -0
  40. data/js/category.js +29 -0
  41. data/js/category_autocomplete.js +96 -0
  42. data/js/comment_ajax.js +27 -0
  43. data/js/draft.js +149 -0
  44. data/js/highlight.js +36 -0
  45. data/js/image.js +181 -0
  46. data/misc/convert2.rb +123 -0
  47. data/misc/filter/antispamservice.rb +101 -0
  48. data/misc/filter/limitdays.rb +40 -0
  49. data/misc/filter/linkcheck.rb +81 -0
  50. data/misc/filter/plugin/antispamservice.rb +82 -0
  51. data/misc/filter/plugin/en/antispamservice.rb +21 -0
  52. data/misc/filter/plugin/ja/antispamservice.rb +20 -0
  53. data/misc/lib/README +4 -0
  54. data/misc/lib/compatible.rb +1 -0
  55. data/misc/lib/fcgi_patch.rb +90 -0
  56. data/misc/migrate.rb +157 -0
  57. data/misc/paas/cloudfoundry/Gemfile +26 -0
  58. data/misc/paas/cloudfoundry/Gemfile.lock +85 -0
  59. data/misc/paas/heroku/Gemfile +22 -0
  60. data/misc/paas/heroku/Gemfile.lock +85 -0
  61. data/misc/paas/sqale/Gemfile +19 -0
  62. data/misc/paas/sqale/Gemfile.lock +85 -0
  63. data/misc/paas/sqale/Procfile +1 -0
  64. data/misc/paas/sqale/dot.env +1 -0
  65. data/misc/plugin/ChangeLog.DO_NOT_UPDATE +2333 -0
  66. data/misc/plugin/a.rb +211 -0
  67. data/misc/plugin/amazon.rb +403 -0
  68. data/misc/plugin/amazon/README.en +17 -0
  69. data/misc/plugin/amazon/README.ja +29 -0
  70. data/misc/plugin/amazon/amazonimg.rb +113 -0
  71. data/misc/plugin/amazon/large.png +0 -0
  72. data/misc/plugin/amazon/medium.png +0 -0
  73. data/misc/plugin/amazon/small.png +0 -0
  74. data/misc/plugin/append-css.rb +51 -0
  75. data/misc/plugin/bq.rb +48 -0
  76. data/misc/plugin/calendar2.rb +184 -0
  77. data/misc/plugin/calendar3.rb +256 -0
  78. data/misc/plugin/category.rb +779 -0
  79. data/misc/plugin/category_autocomplete.rb +33 -0
  80. data/misc/plugin/comment_ajax.rb +11 -0
  81. data/misc/plugin/comment_mail-qmail.rb +57 -0
  82. data/misc/plugin/comment_mail-sendmail.rb +56 -0
  83. data/misc/plugin/comment_mail-smtp.rb +59 -0
  84. data/misc/plugin/comment_rank.rb +36 -0
  85. data/misc/plugin/counter.rb +631 -0
  86. data/misc/plugin/daily_theme.rb +55 -0
  87. data/misc/plugin/disp_referrer.rb +1486 -0
  88. data/misc/plugin/doctype-html401tr.rb +16 -0
  89. data/misc/plugin/draft.rb +20 -0
  90. data/misc/plugin/dropdown_calendar.rb +32 -0
  91. data/misc/plugin/edit_today.rb +50 -0
  92. data/misc/plugin/en/a.rb +10 -0
  93. data/misc/plugin/en/amazon.rb +71 -0
  94. data/misc/plugin/en/append-css.rb +17 -0
  95. data/misc/plugin/en/bq.rb +12 -0
  96. data/misc/plugin/en/calendar2.rb +12 -0
  97. data/misc/plugin/en/category.rb +204 -0
  98. data/misc/plugin/en/counter.rb +48 -0
  99. data/misc/plugin/en/daily_theme.rb +14 -0
  100. data/misc/plugin/en/disp_referrer.rb +387 -0
  101. data/misc/plugin/en/dropdown_calendar.rb +14 -0
  102. data/misc/plugin/en/edit_today.rb +22 -0
  103. data/misc/plugin/en/hide-mail-field.rb +19 -0
  104. data/misc/plugin/en/highlight.rb +29 -0
  105. data/misc/plugin/en/image.rb +54 -0
  106. data/misc/plugin/en/kw.rb +22 -0
  107. data/misc/plugin/en/makerss.rb +47 -0
  108. data/misc/plugin/en/pb-show.rb +21 -0
  109. data/misc/plugin/en/ping.rb +16 -0
  110. data/misc/plugin/en/recent_comment.rb +44 -0
  111. data/misc/plugin/en/recent_comment3.rb +56 -0
  112. data/misc/plugin/en/recent_rss.rb +33 -0
  113. data/misc/plugin/en/referer_scheme.rb +48 -0
  114. data/misc/plugin/en/search_control.rb +74 -0
  115. data/misc/plugin/en/search_form.rb +22 -0
  116. data/misc/plugin/en/speed_comment.rb +19 -0
  117. data/misc/plugin/en/tb-show.rb +37 -0
  118. data/misc/plugin/en/todo.rb +43 -0
  119. data/misc/plugin/en/weather.rb +185 -0
  120. data/misc/plugin/en/xmlrpc.rb +14 -0
  121. data/misc/plugin/footnote.rb +92 -0
  122. data/misc/plugin/gradation.rb +39 -0
  123. data/misc/plugin/gradient.rb +36 -0
  124. data/misc/plugin/hide-mail-field.rb +50 -0
  125. data/misc/plugin/highlight.rb +22 -0
  126. data/misc/plugin/html_anchor.rb +34 -0
  127. data/misc/plugin/image.rb +290 -0
  128. data/misc/plugin/ja/amazon.rb +89 -0
  129. data/misc/plugin/ja/bq.rb +13 -0
  130. data/misc/plugin/ja/calendar2.rb +12 -0
  131. data/misc/plugin/ja/category.rb +212 -0
  132. data/misc/plugin/ja/daily_theme.rb +15 -0
  133. data/misc/plugin/ja/disp_referrer.rb +644 -0
  134. data/misc/plugin/ja/edit_today.rb +23 -0
  135. data/misc/plugin/ja/hide-mail-field.rb +20 -0
  136. data/misc/plugin/ja/highlight.rb +30 -0
  137. data/misc/plugin/ja/makerss.rb +44 -0
  138. data/misc/plugin/ja/my-sequel.rb +52 -0
  139. data/misc/plugin/ja/pb-show.rb +23 -0
  140. data/misc/plugin/ja/ping.rb +17 -0
  141. data/misc/plugin/ja/recent_comment.rb +45 -0
  142. data/misc/plugin/ja/recent_comment3.rb +57 -0
  143. data/misc/plugin/ja/recent_rss.rb +34 -0
  144. data/misc/plugin/ja/referer_scheme.rb +86 -0
  145. data/misc/plugin/ja/search_control.rb +75 -0
  146. data/misc/plugin/ja/search_form.rb +32 -0
  147. data/misc/plugin/ja/tb-show.rb +38 -0
  148. data/misc/plugin/ja/todo.rb +46 -0
  149. data/misc/plugin/ja/weather.rb +402 -0
  150. data/misc/plugin/ja/xmlrpc.rb +15 -0
  151. data/misc/plugin/kw.rb +150 -0
  152. data/misc/plugin/list.rb +40 -0
  153. data/misc/plugin/makelirs.rb +89 -0
  154. data/misc/plugin/makerss.rb +744 -0
  155. data/misc/plugin/my-ex.rb +68 -0
  156. data/misc/plugin/my-sequel.rb +539 -0
  157. data/misc/plugin/navi_user.rb +19 -0
  158. data/misc/plugin/number_anchor.rb +47 -0
  159. data/misc/plugin/pb-show.rb +165 -0
  160. data/misc/plugin/ping.rb +99 -0
  161. data/misc/plugin/pre_wrap.rb +19 -0
  162. data/misc/plugin/random_google.rb +165 -0
  163. data/misc/plugin/recent_comment.rb +82 -0
  164. data/misc/plugin/recent_comment3.rb +192 -0
  165. data/misc/plugin/recent_list.rb +91 -0
  166. data/misc/plugin/recent_namazu.rb +50 -0
  167. data/misc/plugin/recent_rss.rb +305 -0
  168. data/misc/plugin/referer-antibot.rb +53 -0
  169. data/misc/plugin/referer-utf8.rb +12 -0
  170. data/misc/plugin/referer_scheme.rb +87 -0
  171. data/misc/plugin/search_control.rb +227 -0
  172. data/misc/plugin/search_form.rb +53 -0
  173. data/misc/plugin/sn.rb +107 -0
  174. data/misc/plugin/speed_comment.rb +68 -0
  175. data/misc/plugin/squeeze.rb +272 -0
  176. data/misc/plugin/src.rb +30 -0
  177. data/misc/plugin/tb-show.rb +212 -0
  178. data/misc/plugin/title_list.rb +41 -0
  179. data/misc/plugin/title_tag.rb +80 -0
  180. data/misc/plugin/tlink.rb +163 -0
  181. data/misc/plugin/todo.rb +182 -0
  182. data/misc/plugin/weather.rb +505 -0
  183. data/misc/plugin/whatsnew.rb +100 -0
  184. data/misc/plugin/xmlrpc.rb +80 -0
  185. data/misc/plugin/xmlrpc/README +20 -0
  186. data/misc/plugin/xmlrpc/xmlrpc.rb +575 -0
  187. data/misc/style/emptdiary/README.rd +83 -0
  188. data/misc/style/emptdiary/README.rd.en +78 -0
  189. data/misc/style/emptdiary/emptdiary_style.rb +199 -0
  190. data/misc/style/etdiary/README.rd +83 -0
  191. data/misc/style/etdiary/etdiary_style.rb +446 -0
  192. data/misc/style/gfm/gfm_style.rb +194 -0
  193. data/misc/style/rd/README.rd +71 -0
  194. data/misc/style/rd/rd_style.rb +366 -0
  195. data/misc/style/wiki/README +116 -0
  196. data/misc/style/wiki/README.en +101 -0
  197. data/misc/style/wiki/wiki_parser.rb +273 -0
  198. data/misc/style/wiki/wiki_style.rb +478 -0
  199. data/misc/theme_convert/Readme.rd +21 -0
  200. data/misc/theme_convert/append.rcss +150 -0
  201. data/misc/theme_convert/theme_convert.rb +453 -0
  202. data/plugin/00default.rb +1015 -0
  203. data/plugin/05referer.rb +298 -0
  204. data/plugin/10spamfilter.rb +183 -0
  205. data/plugin/50sp.rb +146 -0
  206. data/plugin/60sf.rb +152 -0
  207. data/plugin/90migrate.rb +109 -0
  208. data/plugin/en/00default.rb +390 -0
  209. data/plugin/en/05referer.rb +49 -0
  210. data/plugin/en/10spamfilter.rb +81 -0
  211. data/plugin/en/50sp.rb +56 -0
  212. data/plugin/en/60sf.rb +60 -0
  213. data/plugin/ja/00default.rb +401 -0
  214. data/plugin/ja/05referer.rb +47 -0
  215. data/plugin/ja/10spamfilter.rb +79 -0
  216. data/plugin/ja/50sp.rb +66 -0
  217. data/plugin/ja/60sf.rb +73 -0
  218. data/public/.gitkeep +0 -0
  219. data/public/images/.gitkeep +0 -0
  220. data/public/javascripts/.gitkeep +0 -0
  221. data/public/stylesheets/.gitkeep +0 -0
  222. data/skel/category.rhtml +9 -0
  223. data/skel/conf.rhtml +23 -0
  224. data/skel/day.rhtml +33 -0
  225. data/skel/diary.rhtml +83 -0
  226. data/skel/footer.rhtml +8 -0
  227. data/skel/header.rhtml +10 -0
  228. data/skel/i.category.rhtml +6 -0
  229. data/skel/i.conf.rhtml +14 -0
  230. data/skel/i.day.rhtml +28 -0
  231. data/skel/i.diary.rhtml +17 -0
  232. data/skel/i.footer.rhtml +2 -0
  233. data/skel/i.header.rhtml +3 -0
  234. data/skel/i.latest.rhtml +24 -0
  235. data/skel/i.month.rhtml +39 -0
  236. data/skel/i.search.rhtml +5 -0
  237. data/skel/i.update.rhtml +40 -0
  238. data/skel/i.update.rhtml.en +40 -0
  239. data/skel/latest.rhtml +27 -0
  240. data/skel/mail.rtxt +18 -0
  241. data/skel/mail.rtxt.en +18 -0
  242. data/skel/month.rhtml +27 -0
  243. data/skel/plugin_error.rhtml +27 -0
  244. data/skel/preview.rhtml +85 -0
  245. data/skel/preview.rhtml.en +72 -0
  246. data/skel/referer.rhtml +24 -0
  247. data/skel/search.rhtml +14 -0
  248. data/skel/tdiary.rconf +76 -0
  249. data/skel/update.rhtml +103 -0
  250. data/skel/update.rhtml.en +83 -0
  251. data/spec/acceptance/append_comment_spec.rb +94 -0
  252. data/spec/acceptance/append_diary_spec.rb +98 -0
  253. data/spec/acceptance/bugfix/encoding_error_spec.rb +27 -0
  254. data/spec/acceptance/save_conf_comment_spec.rb +87 -0
  255. data/spec/acceptance/save_conf_default_spec.rb +169 -0
  256. data/spec/acceptance/save_conf_dnsbl_spec.rb +152 -0
  257. data/spec/acceptance/save_conf_filter_spec.rb +50 -0
  258. data/spec/acceptance/save_conf_plugin_spec.rb +69 -0
  259. data/spec/acceptance/save_conf_referer_spec.rb +60 -0
  260. data/spec/acceptance/save_conf_security_spec.rb +280 -0
  261. data/spec/acceptance/support/helpers.rb +49 -0
  262. data/spec/acceptance/support/paths.rb +7 -0
  263. data/spec/acceptance/update_diary_spec.rb +113 -0
  264. data/spec/acceptance/view_category_spec.rb +38 -0
  265. data/spec/acceptance/view_comment_spec.rb +67 -0
  266. data/spec/acceptance/view_diary_spec.rb +126 -0
  267. data/spec/acceptance/view_referer_spec.rb +31 -0
  268. data/spec/acceptance_helper.rb +101 -0
  269. data/spec/core/compatible_spec.rb +54 -0
  270. data/spec/core/core_ext_spec.rb +59 -0
  271. data/spec/core/plugin_spec.rb +389 -0
  272. data/spec/core/rack/assets/precompile_spec.rb +76 -0
  273. data/spec/core/rack/html_anchor_spec.rb +57 -0
  274. data/spec/core/rack/valid_request_path_spec.rb +67 -0
  275. data/spec/core/style/emptdiary_style_spec.rb +165 -0
  276. data/spec/core/style/etdiary_style_spec.rb +512 -0
  277. data/spec/core/style/gfm_style_spec.rb +334 -0
  278. data/spec/core/style/rd_style_spec.rb +202 -0
  279. data/spec/core/style/tdiary_style_spec.rb +240 -0
  280. data/spec/core/style/wiki_style_spec.rb +441 -0
  281. data/spec/fixtures/ascii8bit-pstore.db +0 -0
  282. data/spec/fixtures/invalid-sequence-volatile.tdr +9 -0
  283. data/spec/fixtures/just_installed.conf +1 -0
  284. data/spec/fixtures/plugin/ja/sample.rb +4 -0
  285. data/spec/fixtures/plugin/sample.rb +6 -0
  286. data/spec/fixtures/sample.rb +12 -0
  287. data/spec/fixtures/tdiary.conf.gem +212 -0
  288. data/spec/fixtures/tdiary.conf.rack +212 -0
  289. data/spec/fixtures/tdiary.conf.rdb +227 -0
  290. data/spec/fixtures/tdiary.conf.secure +204 -0
  291. data/spec/fixtures/tdiary.conf.webrick +212 -0
  292. data/spec/javascripts/00default_spec.js +35 -0
  293. data/spec/javascripts/fixtures/00default.html +1 -0
  294. data/spec/javascripts/support/jasmine.yml +76 -0
  295. data/spec/plugin/bq_spec.rb +24 -0
  296. data/spec/plugin/plugin_helper.rb +203 -0
  297. data/spec/spec_helper.rb +32 -0
  298. data/tdiary.conf.beginner +244 -0
  299. data/tdiary.conf.sample +345 -0
  300. data/tdiary.conf.sample-en +333 -0
  301. data/tdiary.gemspec +26 -0
  302. data/tdiary.rb +151 -0
  303. data/tdiary/admin.rb +236 -0
  304. data/tdiary/application.rb +57 -0
  305. data/tdiary/author_only_base.rb +171 -0
  306. data/tdiary/base.rb +220 -0
  307. data/tdiary/cli.rb +116 -0
  308. data/tdiary/comment.rb +40 -0
  309. data/tdiary/comment_manager.rb +94 -0
  310. data/tdiary/compatible.rb +72 -0
  311. data/tdiary/config.rb +270 -0
  312. data/tdiary/core_ext.rb +122 -0
  313. data/tdiary/deploy.rb +50 -0
  314. data/tdiary/dispatcher.rb +77 -0
  315. data/tdiary/dispatcher/index_main.rb +122 -0
  316. data/tdiary/dispatcher/update_main.rb +101 -0
  317. data/tdiary/environment.rb +15 -0
  318. data/tdiary/filter.rb +48 -0
  319. data/tdiary/filter/default.rb +54 -0
  320. data/tdiary/filter/spam.rb +304 -0
  321. data/tdiary/io/base.rb +70 -0
  322. data/tdiary/io/cache/file.rb +123 -0
  323. data/tdiary/io/cache/memcached.rb +88 -0
  324. data/tdiary/io/cache/redis.rb +100 -0
  325. data/tdiary/io/default.rb +297 -0
  326. data/tdiary/io/pstore.rb +252 -0
  327. data/tdiary/io/rdb.rb +213 -0
  328. data/tdiary/lang/en.rb +79 -0
  329. data/tdiary/lang/ja.rb +72 -0
  330. data/tdiary/plugin.rb +375 -0
  331. data/tdiary/rack/assets/precompile.rb +37 -0
  332. data/tdiary/rack/auth/basic.rb +38 -0
  333. data/tdiary/rack/auth/omniauth.rb +51 -0
  334. data/tdiary/rack/html_anchor.rb +31 -0
  335. data/tdiary/rack/valid_request_path.rb +36 -0
  336. data/tdiary/referer_manager.rb +80 -0
  337. data/tdiary/request.rb +217 -0
  338. data/tdiary/response.rb +29 -0
  339. data/tdiary/server.rb +85 -0
  340. data/tdiary/style.rb +194 -0
  341. data/tdiary/style/tdiary_style.rb +198 -0
  342. data/tdiary/style/wiki_style.rb +213 -0
  343. data/tdiary/tasks.rb +1 -0
  344. data/tdiary/tasks/assets.rake +31 -0
  345. data/tdiary/tasks/auth.rake +28 -0
  346. data/tdiary/tasks/db.rake +110 -0
  347. data/tdiary/tasks/doc.rake +31 -0
  348. data/tdiary/tasks/heroku.rake +37 -0
  349. data/tdiary/tasks/jasmine.rake +16 -0
  350. data/tdiary/tasks/rdoc.rake +24 -0
  351. data/tdiary/tasks/release.rake +122 -0
  352. data/tdiary/tasks/rspec.rake +51 -0
  353. data/tdiary/tasks/server.rake +33 -0
  354. data/tdiary/tasks/test.rake +17 -0
  355. data/tdiary/version.rb +3 -0
  356. data/tdiary/view.rb +468 -0
  357. data/tdiary/view_helper.rb +15 -0
  358. data/test/disp_referrer_test.rb +93 -0
  359. data/test/my-sequel_test.rb +238 -0
  360. data/test/test_helper.rb +7 -0
  361. data/test/test_plugin_helper.rb +64 -0
  362. data/test/test_plugin_helper_test.rb +28 -0
  363. data/test/weather_test.rb +33 -0
  364. data/theme/base.css +268 -0
  365. data/theme/conf.block.png +0 -0
  366. data/theme/conf.css +254 -0
  367. data/theme/default/README +11 -0
  368. data/theme/default/body.png +0 -0
  369. data/theme/default/default.css +743 -0
  370. data/theme/help.png +0 -0
  371. data/theme/loading.gif +0 -0
  372. data/theme/tdiary1/README +7 -0
  373. data/theme/tdiary1/tdiary1.css +394 -0
  374. data/theme/tdiary2/README +19 -0
  375. data/theme/tdiary2/tdiary2.css +624 -0
  376. data/update.fcgi +45 -0
  377. data/update.rb +57 -0
  378. data/vendor/hikidoc-0.0.6/COPYING +28 -0
  379. data/vendor/hikidoc-0.0.6/NEWS +30 -0
  380. data/vendor/hikidoc-0.0.6/NEWS.ja +30 -0
  381. data/vendor/hikidoc-0.0.6/README +86 -0
  382. data/vendor/hikidoc-0.0.6/README.ja +83 -0
  383. data/vendor/hikidoc-0.0.6/Rakefile +68 -0
  384. data/vendor/hikidoc-0.0.6/TextFormattingRules +320 -0
  385. data/vendor/hikidoc-0.0.6/TextFormattingRules.ja +318 -0
  386. data/vendor/hikidoc-0.0.6/bin/hikidoc +66 -0
  387. data/vendor/hikidoc-0.0.6/lib/hikidoc.rb +914 -0
  388. data/vendor/hikidoc-0.0.6/setup.rb +1360 -0
  389. data/vendor/hikidoc-0.0.6/test/run-test.rb +13 -0
  390. data/vendor/hikidoc-0.0.6/test/test_hikidoc.rb +506 -0
  391. data/vendor/imagesize-0.1.1/Manifest.txt +19 -0
  392. data/vendor/imagesize-0.1.1/README.txt +49 -0
  393. data/vendor/imagesize-0.1.1/lib/image_size.rb +305 -0
  394. data/vendor/imagesize-0.1.1/lib/image_size/version.rb +9 -0
  395. data/vendor/imagesize-0.1.1/setup.rb +1585 -0
  396. data/vendor/imagesize-0.1.1/test/2-4-7.png +0 -0
  397. data/vendor/imagesize-0.1.1/test/4_1_2.gif +0 -0
  398. data/vendor/imagesize-0.1.1/test/bmp.bmp +0 -0
  399. data/vendor/imagesize-0.1.1/test/cursor.xbm +6 -0
  400. data/vendor/imagesize-0.1.1/test/detect.swf +0 -0
  401. data/vendor/imagesize-0.1.1/test/pbm.pbm +0 -0
  402. data/vendor/imagesize-0.1.1/test/pcx.pcx +0 -0
  403. data/vendor/imagesize-0.1.1/test/pgm.pgm +5 -0
  404. data/vendor/imagesize-0.1.1/test/test.xpm +38 -0
  405. data/vendor/imagesize-0.1.1/test/test_helper.rb +2 -0
  406. data/vendor/imagesize-0.1.1/test/test_image_size.rb +71 -0
  407. data/vendor/imagesize-0.1.1/test/tiff.tiff +0 -0
  408. data/vendor/imagesize-0.1.1/test/tokyo_tower.jpg +0 -0
  409. data/vendor/imagesize-0.1.1/test/tower_e.gif.psd +0 -0
  410. data/vendor/jasmine-jquery-1.4.2/jasmine-jquery.js +548 -0
  411. data/vendor/jquery-1.8/jquery.js +9227 -0
  412. data/vendor/rdtool-0.6.38/COPYING.txt +339 -0
  413. data/vendor/rdtool-0.6.38/Gemfile +3 -0
  414. data/vendor/rdtool-0.6.38/HISTORY +318 -0
  415. data/vendor/rdtool-0.6.38/LGPL-2.1 +502 -0
  416. data/vendor/rdtool-0.6.38/LICENSE.txt +58 -0
  417. data/vendor/rdtool-0.6.38/README.html +66 -0
  418. data/vendor/rdtool-0.6.38/README.ja.html +73 -0
  419. data/vendor/rdtool-0.6.38/README.rd +76 -0
  420. data/vendor/rdtool-0.6.38/README.rd.ja +85 -0
  421. data/vendor/rdtool-0.6.38/Rakefile +152 -0
  422. data/vendor/rdtool-0.6.38/TODO +22 -0
  423. data/vendor/rdtool-0.6.38/bin/rd2 +283 -0
  424. data/vendor/rdtool-0.6.38/bin/rdswap.rb +207 -0
  425. data/vendor/rdtool-0.6.38/doc/rd-draft.html +456 -0
  426. data/vendor/rdtool-0.6.38/doc/rd-draft.ja.html +466 -0
  427. data/vendor/rdtool-0.6.38/doc/rd-draft.rd +479 -0
  428. data/vendor/rdtool-0.6.38/doc/rd-draft.rd.ja +487 -0
  429. data/vendor/rdtool-0.6.38/lib/rd/block-element.rb +114 -0
  430. data/vendor/rdtool-0.6.38/lib/rd/complex-list-item.rb +65 -0
  431. data/vendor/rdtool-0.6.38/lib/rd/desclist.rb +55 -0
  432. data/vendor/rdtool-0.6.38/lib/rd/document-struct.rb +46 -0
  433. data/vendor/rdtool-0.6.38/lib/rd/dot.rd2rc +18 -0
  434. data/vendor/rdtool-0.6.38/lib/rd/element.rb +160 -0
  435. data/vendor/rdtool-0.6.38/lib/rd/filter.rb +255 -0
  436. data/vendor/rdtool-0.6.38/lib/rd/head-filter.rb +14 -0
  437. data/vendor/rdtool-0.6.38/lib/rd/inline-element.rb +233 -0
  438. data/vendor/rdtool-0.6.38/lib/rd/labeled-element.rb +14 -0
  439. data/vendor/rdtool-0.6.38/lib/rd/list.rb +57 -0
  440. data/vendor/rdtool-0.6.38/lib/rd/loose-struct.rb +11 -0
  441. data/vendor/rdtool-0.6.38/lib/rd/methodlist.rb +57 -0
  442. data/vendor/rdtool-0.6.38/lib/rd/output-format-visitor.rb +30 -0
  443. data/vendor/rdtool-0.6.38/lib/rd/package.rb +4 -0
  444. data/vendor/rdtool-0.6.38/lib/rd/parser-util.rb +14 -0
  445. data/vendor/rdtool-0.6.38/lib/rd/post-install +1 -0
  446. data/vendor/rdtool-0.6.38/lib/rd/pre-setup.rb +18 -0
  447. data/vendor/rdtool-0.6.38/lib/rd/rbl-file.rb +69 -0
  448. data/vendor/rdtool-0.6.38/lib/rd/rbl-suite.rb +37 -0
  449. data/vendor/rdtool-0.6.38/lib/rd/rd-struct.rb +86 -0
  450. data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-lib.rb +266 -0
  451. data/vendor/rdtool-0.6.38/lib/rd/rd2html-ext-opt.rb +34 -0
  452. data/vendor/rdtool-0.6.38/lib/rd/rd2html-lib.rb +490 -0
  453. data/vendor/rdtool-0.6.38/lib/rd/rd2html-opt.rb +67 -0
  454. data/vendor/rdtool-0.6.38/lib/rd/rd2man-lib.rb +251 -0
  455. data/vendor/rdtool-0.6.38/lib/rd/rd2rdo-lib.rb +19 -0
  456. data/vendor/rdtool-0.6.38/lib/rd/rd2rmi-lib.rb +32 -0
  457. data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.ry +518 -0
  458. data/vendor/rdtool-0.6.38/lib/rd/rdblockparser.tab.rb +1061 -0
  459. data/vendor/rdtool-0.6.38/lib/rd/rdfmt.rb +15 -0
  460. data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.ry +503 -0
  461. data/vendor/rdtool-0.6.38/lib/rd/rdinlineparser.tab.rb +1243 -0
  462. data/vendor/rdtool-0.6.38/lib/rd/rdvisitor.rb +214 -0
  463. data/vendor/rdtool-0.6.38/lib/rd/reference-resolver.rb +114 -0
  464. data/vendor/rdtool-0.6.38/lib/rd/search-file.rb +14 -0
  465. data/vendor/rdtool-0.6.38/lib/rd/tree.rb +103 -0
  466. data/vendor/rdtool-0.6.38/lib/rd/version.rb +41 -0
  467. data/vendor/rdtool-0.6.38/lib/rd/visitor.rb +86 -0
  468. data/vendor/rdtool-0.6.38/rdtool.gemspec +125 -0
  469. data/vendor/rdtool-0.6.38/setup.rb +1596 -0
  470. data/vendor/rdtool-0.6.38/test/data/includee1.html +1 -0
  471. data/vendor/rdtool-0.6.38/test/data/includee2.html +1 -0
  472. data/vendor/rdtool-0.6.38/test/data/includee3.nothtml +1 -0
  473. data/vendor/rdtool-0.6.38/test/data/includee4.xhtml +0 -0
  474. data/vendor/rdtool-0.6.38/test/data/label.rbl +2 -0
  475. data/vendor/rdtool-0.6.38/test/data/label2.rbl +2 -0
  476. data/vendor/rdtool-0.6.38/test/data/sub/includee2.html +1 -0
  477. data/vendor/rdtool-0.6.38/test/data/sub/includee4.html +0 -0
  478. data/vendor/rdtool-0.6.38/test/dummy-observer.rb +6 -0
  479. data/vendor/rdtool-0.6.38/test/dummy.rb +33 -0
  480. data/vendor/rdtool-0.6.38/test/temp-dir.rb +19 -0
  481. data/vendor/rdtool-0.6.38/test/test-block-parser.rb +46 -0
  482. data/vendor/rdtool-0.6.38/test/test-desclist-item.rb +219 -0
  483. data/vendor/rdtool-0.6.38/test/test-document-element.rb +46 -0
  484. data/vendor/rdtool-0.6.38/test/test-document-struct.rb +66 -0
  485. data/vendor/rdtool-0.6.38/test/test-element.rb +46 -0
  486. data/vendor/rdtool-0.6.38/test/test-headline.rb +80 -0
  487. data/vendor/rdtool-0.6.38/test/test-inline-parser.rb +46 -0
  488. data/vendor/rdtool-0.6.38/test/test-list-item.rb +54 -0
  489. data/vendor/rdtool-0.6.38/test/test-list.rb +53 -0
  490. data/vendor/rdtool-0.6.38/test/test-methodlist-item.rb +73 -0
  491. data/vendor/rdtool-0.6.38/test/test-nonterminal-element.rb +170 -0
  492. data/vendor/rdtool-0.6.38/test/test-nonterminal-inline.rb +33 -0
  493. data/vendor/rdtool-0.6.38/test/test-output-format-visitor.rb +48 -0
  494. data/vendor/rdtool-0.6.38/test/test-parser-util.rb +41 -0
  495. data/vendor/rdtool-0.6.38/test/test-rbl-file.rb +156 -0
  496. data/vendor/rdtool-0.6.38/test/test-rbl-suite.rb +43 -0
  497. data/vendor/rdtool-0.6.38/test/test-rd2html-lib.rb +496 -0
  498. data/vendor/rdtool-0.6.38/test/test-rdtree.rb +17 -0
  499. data/vendor/rdtool-0.6.38/test/test-rdvisitor.rb +29 -0
  500. data/vendor/rdtool-0.6.38/test/test-reference-resolver.rb +202 -0
  501. data/vendor/rdtool-0.6.38/test/test-reference.rb +132 -0
  502. data/vendor/rdtool-0.6.38/test/test-search-file.rb +22 -0
  503. data/vendor/rdtool-0.6.38/test/test-terminal-inline.rb +41 -0
  504. data/vendor/rdtool-0.6.38/test/test-textblock.rb +44 -0
  505. data/vendor/rdtool-0.6.38/test/test-tree.rb +82 -0
  506. data/vendor/rdtool-0.6.38/test/test-version.rb +57 -0
  507. data/vendor/rdtool-0.6.38/test/test-visitor.rb +230 -0
  508. data/vendor/rdtool-0.6.38/utils/rd-mode.el +464 -0
  509. metadata +666 -0
@@ -0,0 +1,67 @@
1
+ =begin
2
+ = rd2html-opt.rb
3
+ sub-OptionParser for rd2html-lib.rb.
4
+ =end
5
+ require "optparse"
6
+
7
+ q = ARGV.options
8
+
9
+ q.on_tail("rd2html-lib options:")
10
+
11
+
12
+ #q.on_tail("--use-numbering-anchor",
13
+ # "use number for anchor name (old style)") do
14
+ # $Visitor.use_old_anchor = true
15
+ #end
16
+
17
+ q.on_tail("--output-rbl",
18
+ "output external Label file") do
19
+ $Visitor.output_rbl = true
20
+ end
21
+
22
+ q.on_tail("--with-css=FILE",
23
+ String,
24
+ "use FILE as CSS of output HTML") do |i|
25
+ $Visitor.css = i
26
+ end
27
+
28
+ q.on_tail("--html-charset=CHARSET",
29
+ String,
30
+ "indicate CHARSET as charset(char encoding)") do |i|
31
+ $Visitor.charset = i
32
+ end
33
+
34
+ q.on_tail("--html-lang=LANG",
35
+ String,
36
+ "indicate LANG as lang attribute of html") do |i|
37
+ $Visitor.lang = i
38
+ end
39
+
40
+ q.on_tail("--html-title=TITLE",
41
+ String,
42
+ "content of TITLE element of HTML") do |i|
43
+ $Visitor.title = i
44
+ end
45
+
46
+ q.on_tail("--html-link-rel=REL",
47
+ String,
48
+ "add forward LINK element.(\"<rel>:<href>\")") do |i|
49
+ if /(\w+):(.+)/ =~ i
50
+ $Visitor.html_link_rel[$1] = $2
51
+ else
52
+ # warning
53
+ end
54
+ end
55
+
56
+ q.on_tail("--html-link-rev=REV",
57
+ String,
58
+ "add reverse LINK element.(\"<rev>:<href>\")") do |i|
59
+ if /(\w+):(.+)/ =~ i
60
+ $Visitor.html_link_rev[$1] = $2
61
+ else
62
+ # warning
63
+ end
64
+ end
65
+
66
+
67
+
@@ -0,0 +1,251 @@
1
+ =begin
2
+ = rd/rd2man-lib.rb
3
+ =end
4
+
5
+ require "rd/rdvisitor"
6
+ require "rd/version"
7
+
8
+ unless [].respond_to? :collect!
9
+ class Array
10
+ alias collect! filter
11
+ end
12
+ end
13
+
14
+ module RD
15
+ class RD2MANVisitor < RDVisitor
16
+ include AutoLabel
17
+ include MethodParse
18
+
19
+ SYSTEM_NAME = "RDtool -- RD2ManVisitor"
20
+ SYSTEM_VERSION = "$Version: "+RD::VERSION+"$"
21
+ VERSION = Version.new_from_version_string(SYSTEM_NAME, SYSTEM_VERSION)
22
+
23
+ def self.version
24
+ VERSION
25
+ end
26
+
27
+ # must-have constants
28
+ OUTPUT_SUFFIX = "1"
29
+ INCLUDE_SUFFIX = ["1"]
30
+
31
+ def initialize
32
+ @enumcounter = 0
33
+ @index = {}
34
+ @filename = nil
35
+ end
36
+
37
+ def visit(tree)
38
+ prepare_labels(tree, "")
39
+ super(tree)
40
+ end
41
+
42
+ def apply_to_DocumentElement(element, content)
43
+ content = content.join
44
+ title = guess_title
45
+ title = title.sub(/\.rd$/i, '').upcase
46
+ <<"EOT"
47
+ .\\" DO NOT MODIFY THIS FILE! it was generated by rd2
48
+ .TH #{title} 1 "#{Time.now.strftime '%B %Y'}"
49
+ #{content}
50
+ EOT
51
+ end # "
52
+
53
+ def apply_to_Headline(element, title)
54
+ title = title.join(" ")
55
+ element.level <= 1 ? ".SH #{title}\n" : ".SS #{title}\n"
56
+ end
57
+
58
+ # RDVisitor#apply_to_Include
59
+
60
+ def apply_to_TextBlock(element, content)
61
+ if RD::DescListItem === element.parent ||
62
+ RD::ItemListItem === element.parent ||
63
+ RD::EnumListItem === element.parent
64
+ return content.join
65
+ else
66
+ return ".PP\n" + content.join
67
+ end
68
+ end
69
+
70
+ def apply_to_Verbatim(element)
71
+ content = []
72
+ element.each_line do |i|
73
+ content.push(apply_to_String(i))
74
+ end
75
+ # Can we use BLOCKQUOTE such like?
76
+ %Q[.nf\n\\& #{content.join("\\& ")}.fi\n]
77
+ end
78
+
79
+ def apply_to_ItemList(element, items)
80
+ items.collect! do |x| x.sub(/\n\n/, "\n") end
81
+ items = items.join(".IP\n.B\n\\(bu\n") # "\\(bu" -> "" ?
82
+ ".IP\n.B\n\\(bu\n" + items
83
+ end
84
+
85
+ def apply_to_EnumList(element, items)
86
+ @enumcounter = 0
87
+ items.join
88
+ end
89
+
90
+ def apply_to_DescList(element, items)
91
+ items.map{ |i| i =~ /\n$/ ? i : i + "\n" }.join("")
92
+ end
93
+
94
+ def apply_to_MethodList(element, items)
95
+ items.map{ |i| i =~ /\n$/ ? i : i + "\n" }.join("")
96
+ end
97
+
98
+ def apply_to_ItemListItem(element, content)
99
+ content.map{ |c| c =~ /\n$/ ? c : c + "\n" }.join("")
100
+ end
101
+
102
+ def apply_to_EnumListItem(element, content)
103
+ @enumcounter += 1
104
+ %Q[.TP\n#{@enumcounter}.\n#{content.join("\n")}]
105
+ end
106
+
107
+ def apply_to_DescListItem(element, term, description)
108
+ anchor = refer(element)
109
+ if description.empty?
110
+ ".TP\n.fi\n.B\n#{term.join(" ")}"
111
+ else
112
+ %[.TP\n.fi\n.B\n#{term.join(" ")}\n#{description.join("\n")}].chomp
113
+ end
114
+ end
115
+
116
+ def apply_to_MethodListItem(element, term, description)
117
+ term = parse_method(term) # maybe: term -> element.term
118
+ anchor = refer(element)
119
+ if description.empty?
120
+ ".TP\n.fi\n.B\n#{term.join(" ")}"
121
+ else
122
+ %[.TP\n.fi\n.B\n#{term.join(" ")}\n#{description.join("\n")}]
123
+ end
124
+ end
125
+
126
+ def parse_method(method)
127
+ klass, kind, method, args = MethodParse.analize_method(method)
128
+
129
+ if kind == :function
130
+ klass = kind = nil
131
+ else
132
+ kind = MethodParse.kind2str(kind)
133
+ end
134
+
135
+ case method
136
+ when "[]"
137
+ args.strip!
138
+ args.sub!(/^\((.*)\)$/, '\\1')
139
+ "#{klass}#{kind}[#{args}]"
140
+ when "[]="
141
+ args.strip!
142
+ args.sub!(/^\((.*)\)$/, '\\1')
143
+ args, val = /^(.*),([^,]*)$/.match(args)[1,2]
144
+ args.strip!
145
+ val.strip!
146
+
147
+ "#{klass}#{kind}[#{args}] = #{val}"
148
+ else
149
+ "#{klass}#{kind}#{method}#{args}"
150
+ end
151
+ end
152
+ private :parse_method
153
+
154
+ def apply_to_StringElement(element)
155
+ apply_to_String(element.content)
156
+ end
157
+
158
+ def apply_to_Emphasis(element, content)
159
+ %Q[\\fI#{content.join}\\fP]
160
+ end
161
+
162
+ def apply_to_Code(element, content)
163
+ %{\\&\\fB#{content.join.sub(/\./, '\\.')}\\fP}
164
+ end
165
+
166
+ def apply_to_Var(element, content)
167
+ content.join
168
+ end
169
+
170
+ def apply_to_Keyboard(element, content)
171
+ content.join
172
+ end
173
+
174
+ def apply_to_Index(element, content)
175
+ tmp = []
176
+ element.each do |i|
177
+ tmp.push(i) if i.is_a?(String)
178
+ end
179
+ key = meta_char_escape(tmp.join)
180
+ if @index.has_key?(key)
181
+ # warning?
182
+ ""
183
+ else
184
+ num = @index[key] = @index.size
185
+ %{\\&\\fB#{content.join.sub(/\./, '\\.')}\\fP}
186
+ end
187
+ end
188
+
189
+ def apply_to_Reference(element, content)
190
+ case element.label
191
+ when Reference::URL
192
+ apply_to_RefToURL(element, content)
193
+ when Reference::RDLabel
194
+ if element.label.filename
195
+ apply_to_RefToOtherFile(element, content)
196
+ else
197
+ apply_to_RefToElement(element, content)
198
+ end
199
+ end
200
+ end
201
+
202
+ def apply_to_RefToElement(element, content)
203
+ content = content.join
204
+ content.sub(/^function#/, "")
205
+ end
206
+
207
+ def apply_to_RefToOtherFile(element, content)
208
+ content.join
209
+ end
210
+
211
+ def apply_to_RefToURL(element, content)
212
+ content.join
213
+ end
214
+
215
+ def apply_to_Footnote(element, content)
216
+ ""
217
+ end
218
+
219
+ def apply_to_Verb(element)
220
+ apply_to_String(element.content)
221
+ end
222
+
223
+ def apply_to_String(element)
224
+ meta_char_escape(element)
225
+ end
226
+
227
+ def meta_char_escape(str)
228
+ str.gsub(/[-\\]/, '\\\\\\&').gsub(/^[.']/, '\\&') # '
229
+ end
230
+ private :meta_char_escape
231
+
232
+ def guess_title
233
+ return @input_filename unless @input_filename == "-"
234
+ return @filename if @filename
235
+ "Untitled"
236
+ end
237
+ private :guess_title
238
+
239
+
240
+ end # RD2MANVisitor
241
+ end # RD
242
+
243
+ $Visitor_Class = RD::RD2MANVisitor
244
+
245
+ =begin
246
+ == script info.
247
+ RD to MAN translate library for rdfmt.rb
248
+ $Id: rd2man-lib.rb,v 1.9 2003/08/02 15:45:49 tosh Exp $
249
+ Copyright 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
250
+ 2012 Youhei SASAKI <uwabami@gfd-dennou.org>
251
+ =end
@@ -0,0 +1,19 @@
1
+ =begin
2
+ = rd2rdo-lib.rb
3
+ Format lib to dump tree objects.
4
+ =end
5
+
6
+ require "rd/rdvisitor"
7
+
8
+ module RD
9
+ class RD2RDOVisitor < RDVisitor
10
+ OUTPUT_SUFFIX = "rdo"
11
+ INCLUDE_SUFFIX = []
12
+
13
+ def visit(tree)
14
+ Marshal.dump(tree)
15
+ end
16
+ end
17
+ end
18
+
19
+ $Visitor_Class = RD::RD2RDOVisitor
@@ -0,0 +1,32 @@
1
+ =begin
2
+ = rd2rmi-lib.rb
3
+ library to output RMI.
4
+ =end
5
+ require "rd/rdvisitor"
6
+
7
+ module RD
8
+ class RD2RMIVisitor < RDVisitor
9
+ include AutoLabel
10
+ include MethodParse
11
+
12
+ OUTPUT_SUFFIX = "rmi"
13
+ INCLUDE_SUFFIX = ["rmi"]
14
+
15
+ def visit(tree)
16
+ ret = ""
17
+
18
+ prepare_labels(tree)
19
+
20
+ index = make_method_index(tree)
21
+ index.each do |i|
22
+ i[1] = kind2str(i[1])
23
+ i[3] = @filename
24
+ i[4] = refer(i[0]+i[1]+i[2])
25
+ ret << "$method_index.push(#{i.inspect})\n"
26
+ end
27
+ ret
28
+ end
29
+ end # class RD2RMIVisitor
30
+ end # module RD
31
+
32
+ $Visitor_Class = RD::RD2RMIVisitor
@@ -0,0 +1,518 @@
1
+
2
+ class RDParser
3
+
4
+ preclow
5
+ nonassoc DUMMY
6
+ left ITEMLISTLINE ENUMLISTLINE DESCLISTLINE METHODLISTLINE STRINGLINE
7
+ prechigh
8
+
9
+ token STRINGLINE ITEMLISTLINE ENUMLISTLINE DESCLISTLINE METHODLISTLINE
10
+ WHITELINE SUBTREE HEADLINE INCLUDE INDENT DEDENT DUMMY
11
+
12
+ rule
13
+ document : blocks { result = DocumentElement.new
14
+ add_children_to_element(result, *val[0])
15
+ }
16
+ | {
17
+ raise ParseError,
18
+ "Error: file empty."
19
+ }
20
+ ;
21
+ blocks : blocks block { result.concat(val[1]) }
22
+ | block
23
+ ;
24
+ block : textblock { result = val }
25
+ | verbatim { result = val }
26
+ | lists
27
+ | headline { result = val }
28
+ | include { result = val }
29
+ | WHITELINE { result = [] }
30
+ | SUBTREE { result = val[0].blocks }
31
+ ;
32
+
33
+ headline : HEADLINE { # val[0] is like [level, title]
34
+ title = @inline_parser.parse(val[0][1])
35
+ result = Headline.new(val[0][0])
36
+ add_children_to_element(result, *title)
37
+ }
38
+ ;
39
+ include : INCLUDE { result = Include.new(val[0]) }
40
+ ;
41
+
42
+ textblock : textblockcontent = DUMMY
43
+ { # val[0] is Array of String
44
+ content = cut_off(val[0]).join("")
45
+ contents = @inline_parser.parse(content)
46
+ result = TextBlock.new()
47
+ add_children_to_element(result, *contents)
48
+ }
49
+ ;
50
+ textblockcontent : textblockcontent STRINGLINE
51
+ { result.push(val[1]) }
52
+ | STRINGLINE { result = val }
53
+ ;
54
+
55
+ verbatim : INDENT verbatimcontent DEDENT
56
+ { # val[1] is Array of String
57
+ content = cut_off(val[1])
58
+ result = Verbatim.new(content)
59
+ # imform to lexer.
60
+ @in_verbatim = false }
61
+ ;
62
+ verbatim_after_lists : verbatimcontent
63
+ { # val[0] is Array of String
64
+ content = cut_off(val[0])
65
+ result = Verbatim.new(content)
66
+ # imform to lexer.
67
+ @in_verbatim = false }
68
+ ;
69
+ verbatimcontent : verbatimcontent STRINGLINE
70
+ { result.push(val[1]) }
71
+ | verbatimcontent INDENT verbatimcontent DEDENT
72
+ { result.concat(val[2]) }
73
+ | verbatimcontent WHITELINE
74
+ { result.push("\n") }
75
+ | STRINGLINE { result = val
76
+ # imform to lexer.
77
+ @in_verbatim = true }
78
+ ;
79
+
80
+ list : itemlist
81
+ | enumlist
82
+ | desclist
83
+ | methodlist
84
+ ;
85
+ lists : lists2 = DUMMY
86
+ | INDENT lists2 DEDENT { result = val[1] }
87
+ | INDENT lists2 verbatim_after_lists DEDENT
88
+ { result = val[1].push(val[2]) }
89
+ ;
90
+
91
+ lists2 : lists2 list { result.push(val[1]) }
92
+ | list { result = val }
93
+ ;
94
+
95
+ itemlist : itemlistitems = DUMMY {
96
+ result = ItemList.new
97
+ add_children_to_element(result, *val[0])
98
+ }
99
+ ;
100
+ itemlistitems : itemlistitems itemlistitem
101
+ { result.push(val[1]) }
102
+ | itemlistitem { result = val }
103
+ ;
104
+ itemlistitem : first_textblock_in_itemlist other_blocks_in_list DEDENT
105
+ {
106
+ result = ItemListItem.new
107
+ add_children_to_element(result, val[0], *val[1])
108
+ }
109
+ ;
110
+
111
+ enumlist : enumlistitems = DUMMY {
112
+ result = EnumList.new
113
+ add_children_to_element(result, *val[0])
114
+ }
115
+ ;
116
+ enumlistitems : enumlistitems enumlistitem
117
+ { result.push(val[1]) }
118
+ | enumlistitem { result = val }
119
+ ;
120
+ enumlistitem : first_textblock_in_enumlist other_blocks_in_list DEDENT
121
+ {
122
+ result = EnumListItem.new
123
+ add_children_to_element(result, val[0], *val[1])
124
+ }
125
+ ;
126
+
127
+ desclist : desclistitems = DUMMY {
128
+ result = DescList.new
129
+ add_children_to_element(result, *val[0])
130
+ }
131
+ ;
132
+ desclistitems : desclistitems desclistitem {
133
+ result.push(val[1]) }
134
+ | desclistitem { result = val }
135
+ ;
136
+ desclistitem : DESCLISTLINE description_part DEDENT
137
+ {
138
+ term = DescListItem::Term.new
139
+ term_contents = @inline_parser.parse(val[0].strip)
140
+ add_children_to_element(term, *term_contents)
141
+
142
+ result = DescListItem.new
143
+ set_term_to_element(result, term)
144
+ add_children_to_element(result, *val[1])
145
+ }
146
+ ;
147
+
148
+ methodlist : methodlistitems = DUMMY {
149
+ result = MethodList.new
150
+ add_children_to_element(result, *val[0])
151
+ }
152
+ ;
153
+ methodlistitems : methodlistitems methodlistitem
154
+ { result.push(val[1]) }
155
+ | methodlistitem { result = val }
156
+ ;
157
+ methodlistitem : METHODLISTLINE description_part DEDENT
158
+ {
159
+ term = MethodListItem::Term.new(val[0].strip)
160
+ result = MethodListItem.new
161
+ set_term_to_element(result, term)
162
+ add_children_to_element(result, *val[1])
163
+ }
164
+ ;
165
+
166
+ description_part : whitelines textblock blocks_in_list
167
+ { result = [val[1]].concat(val[2]) }
168
+ | whitelines textblock { result = [val[1]] }
169
+ | whitelines INDENT blocks_in_list DEDENT
170
+ { result = val[2] }
171
+ | whitelines { result = [] }
172
+ ;
173
+
174
+ blocks_in_list : blocks_in_list block_in_list { result.concat(val[1]) }
175
+ | block_in_list
176
+ ;
177
+ block_in_list : textblock { result = val }
178
+ | verbatim { result = val }
179
+ | lists
180
+ | WHITELINE { result = [] }
181
+ ;
182
+ whitelines : whitelines2
183
+ |
184
+ ;
185
+ whitelines2 : WHITELINE whitelines2
186
+ | WHITELINE
187
+ ;
188
+
189
+ first_textblock_in_itemlist : ITEMLISTLINE textblockcontent
190
+
191
+ { content = cut_off([val[0]].concat(val[1])).join("")
192
+ contents = @inline_parser.parse(content)
193
+ result = TextBlock.new()
194
+ add_children_to_element(result, *contents)
195
+ }
196
+ | ITEMLISTLINE
197
+
198
+ { content = cut_off([val[0]]).join("")
199
+ contents = @inline_parser.parse(content)
200
+ result = TextBlock.new()
201
+ add_children_to_element(result, *contents)
202
+ }
203
+ ;
204
+ first_textblock_in_enumlist : ENUMLISTLINE textblockcontent
205
+
206
+ { content = cut_off([val[0]].concat(val[1])).join("")
207
+ contents = @inline_parser.parse(content)
208
+ result = TextBlock.new()
209
+ add_children_to_element(result, *contents)
210
+ }
211
+ | ENUMLISTLINE
212
+
213
+ { content = cut_off([val[0]]).join("")
214
+ contents = @inline_parser.parse(content)
215
+ result = TextBlock.new()
216
+ add_children_to_element(result, *contents)
217
+ }
218
+ ;
219
+ other_blocks_in_list : verbatim blocks_in_list
220
+ { result = [val[0]].concat(val[1]) }
221
+ | lists blocks_in_list { result.concat(val[1]) }
222
+ | WHITELINE blocks_in_list { result = val[1] }
223
+ | verbatim { result = val }
224
+ | lists
225
+ | WHITELINE { result = [] }
226
+ | { result = [] }
227
+ ;
228
+ end
229
+
230
+ ---- inner
231
+ include ParserUtility
232
+
233
+ TMPFILE = ["rdtmp", $$, 0]
234
+
235
+ attr_reader :tree
236
+
237
+ def initialize
238
+ @inline_parser = RDInlineParser.new(self)
239
+ end
240
+
241
+ def parse(src, tree)
242
+ @src = src
243
+ @src.push(false)
244
+ # RDtree
245
+ @tree = tree
246
+
247
+ # @i: index(line no.) of src
248
+ @i = 0
249
+ # stack for current indentation
250
+ @indent_stack = []
251
+ # how indented.
252
+ @current_indent = @indent_stack.join("")
253
+ # RDParser for tmp src
254
+ @subparser = nil
255
+ # which part is in now
256
+ @in_part = nil
257
+ @part_content = []
258
+
259
+ @in_verbatim = false
260
+
261
+ @yydebug = true
262
+ do_parse
263
+ end
264
+
265
+ def next_token
266
+ # preprocessing
267
+ # if it is not in RD part
268
+ # => method
269
+ while @in_part != "rd"
270
+ line = @src[@i]
271
+ @i += 1 # next line
272
+
273
+ case line
274
+ # src end
275
+ when false
276
+ return [false, false]
277
+ # RD part begin
278
+ when /^=begin\s*(?:\bRD\b.*)?\s*$/
279
+ if @in_part # if in non-RD part
280
+ @part_content.push(line)
281
+ else
282
+ @in_part = "rd"
283
+ return [:WHITELINE, "=begin\n"] # <= for textblockand
284
+ end
285
+ # non-RD part begin
286
+ when /^=begin\s+(\w+)/
287
+ part = $1
288
+ if @in_part # if in non-RD part
289
+ @part_content.push(line)
290
+ else
291
+ @in_part = part if @tree.filter[part] # if filter exists
292
+ # p "BEGIN_PART: #{@in_part}" # DEBUG
293
+ end
294
+ # non-RD part end
295
+ when /^=end/
296
+ if @in_part # if in non-RD part
297
+ # p "END_PART: #{@in_part}" # DEBUG
298
+ # make Part-in object
299
+ part = RD::Part.new(@part_content.join(""), @tree, "r")
300
+ @part_content.clear
301
+ # call filter, part_out is output(Part object)
302
+ part_out = @tree.filter[@in_part].call(part)
303
+
304
+ if @tree.filter[@in_part].mode == :rd # if output is RD formated
305
+ subtree = parse_subtree( (RUBY_VERSION >= '1.9.0' ? part_out.lines.to_a : part_out.to_a ) )
306
+ else # if output is target formated
307
+ basename = TMPFILE.join('.')
308
+ TMPFILE[-1] += 1
309
+ tmpfile = open(@tree.tmp_dir + "/" + basename + ".#{@in_part}", "w")
310
+ tmpfile.print(part_out)
311
+ tmpfile.close
312
+ subtree = parse_subtree(["=begin\n", "<<< #{basename}\n", "=end\n"])
313
+ end
314
+ @in_part = nil
315
+ return [:SUBTREE, subtree]
316
+ end
317
+ else
318
+ if @in_part # if in non-RD part
319
+ @part_content.push(line)
320
+ end
321
+ end
322
+ end
323
+
324
+ @current_indent = @indent_stack.join("")
325
+ line = @src[@i]
326
+ case line
327
+ when false
328
+ if_current_indent_equal("") do
329
+ [false, false]
330
+ end
331
+ when /^=end/
332
+ if_current_indent_equal("") do
333
+ @in_part = nil
334
+ [:WHITELINE, "=end"] # MUST CHANGE??
335
+ end
336
+ when /^\s*$/
337
+ @i += 1 # next line
338
+ return [:WHITELINE, ':WHITELINE']
339
+ when /^\#/ # comment line
340
+ @i += 1 # next line
341
+ self.next_token()
342
+ when /^(={1,4})(?!=)\s*(?=\S)/, /^(\+{1,2})(?!\+)\s*(?=\S)/
343
+ rest = $' # '
344
+ rest.strip!
345
+ mark = $1
346
+ if_current_indent_equal("") do
347
+ return [:HEADLINE, [Headline.mark_to_level(mark), rest]]
348
+ end
349
+ when /^<<<\s*(\S+)/
350
+ file = $1
351
+ if_current_indent_equal("") do
352
+ suffix = file[-3 .. -1]
353
+ if suffix == ".rd" or suffix == ".rb"
354
+ subtree = parse_subtree(get_included(file))
355
+ [:SUBTREE, subtree]
356
+ else
357
+ [:INCLUDE, file]
358
+ end
359
+ end
360
+ when /^(\s*)\*(\s*)/
361
+ rest = $' # '
362
+ newIndent = $2
363
+ if_current_indent_equal($1) do
364
+ if @in_verbatim
365
+ [:STRINGLINE, line]
366
+ else
367
+ @indent_stack.push("\s" << newIndent)
368
+ [:ITEMLISTLINE, rest]
369
+ end
370
+ end
371
+ when /^(\s*)(\(\d+\))(\s*)/
372
+ rest = $' # '
373
+ mark = $2
374
+ newIndent = $3
375
+ if_current_indent_equal($1) do
376
+ if @in_verbatim
377
+ [:STRINGLINE, line]
378
+ else
379
+ @indent_stack.push("\s" * mark.size << newIndent)
380
+ [:ENUMLISTLINE, rest]
381
+ end
382
+ end
383
+ when /^(\s*):(\s*)/
384
+ rest = $' # '
385
+ newIndent = $2
386
+ if_current_indent_equal($1) do
387
+ if @in_verbatim
388
+ [:STRINGLINE, line]
389
+ else
390
+ @indent_stack.push("\s" << $2)
391
+ [:DESCLISTLINE, rest]
392
+ end
393
+ end
394
+ when /^(\s*)---(?!-|\s*$)/
395
+ indent = $1
396
+ rest = $'
397
+ /\s*/ === rest
398
+ term = $'
399
+ new_indent = $&
400
+ if_current_indent_equal(indent) do
401
+ if @in_verbatim
402
+ [:STRINGLINE, line]
403
+ else
404
+ @indent_stack.push("\s\s\s" + new_indent)
405
+ [:METHODLISTLINE, term]
406
+ end
407
+ end
408
+ when /^(\s*)/
409
+ if_current_indent_equal($1) do
410
+ [:STRINGLINE, line]
411
+ end
412
+ else
413
+ raise "[BUG] parsing error may occured."
414
+ end
415
+ end
416
+
417
+ =begin private
418
+ --- RDParser#if_current_indent_equal(indent)
419
+ if (({@current_indent == ((|indent|))})) then yield block, otherwise
420
+ process indentation.
421
+ =end
422
+ # always @current_indent = @indent_stack.join("")
423
+ def if_current_indent_equal(indent)
424
+ indent = indent.sub(/\t/, "\s" * 8)
425
+ if @current_indent == indent
426
+ @i += 1 # next line
427
+ yield
428
+ elsif indent.index(@current_indent) == 0
429
+ @indent_stack.push(indent[@current_indent.size .. -1])
430
+ [:INDENT, ":INDENT"]
431
+ else
432
+ @indent_stack.pop
433
+ [:DEDENT, ":DEDENT"]
434
+ end
435
+ end
436
+ private :if_current_indent_equal
437
+
438
+ def cut_off(src)
439
+ ret = []
440
+ whiteline_buf = []
441
+ line = src.shift
442
+ /^\s*/ =~ line
443
+ indent = Regexp.quote($&)
444
+ ret.push($') # '
445
+ while line = src.shift
446
+ if /^(\s*)$/ =~ line
447
+ whiteline_buf.push(line)
448
+ elsif /^#{indent}/ =~ line
449
+ unless whiteline_buf.empty?
450
+ ret.concat(whiteline_buf)
451
+ whiteline_buf.clear
452
+ end
453
+ ret.push($') # '
454
+ else
455
+ raise "[BUG]: probably Parser Error while cutting off.\n"
456
+ end
457
+ end
458
+ ret
459
+ end
460
+ private :cut_off
461
+
462
+ def set_term_to_element(parent, term)
463
+ # parent.set_term_under_document_struct(term, @tree.document_struct)
464
+ parent.set_term_without_document_struct(term)
465
+ end
466
+ private :set_term_to_element
467
+
468
+ def on_error( et, ev, _values )
469
+ line = @src[@i]
470
+ prv, cur, nxt = format_line_num(@i, @i+1, @i+2)
471
+
472
+ raise ParseError, <<Msg
473
+
474
+ RD syntax error: line #{@i+1}:
475
+ #{prv} |#{@src[@i-1].chomp}
476
+ #{cur}=>|#{@src[@i].chomp}
477
+ #{nxt} |#{@src[@i+1].chomp}
478
+
479
+ Msg
480
+ end
481
+
482
+ def line_index
483
+ @i
484
+ end
485
+
486
+ def parse_subtree(src)
487
+ @subparser = RD::RDParser.new() unless @subparser
488
+
489
+ @subparser.parse(src, @tree)
490
+ end
491
+ private :parse_subtree
492
+
493
+ def get_included(file)
494
+ included = ""
495
+ @tree.include_path.each do |dir|
496
+ file_name = dir + "/" + file
497
+ if test(?e, file_name)
498
+ included = IO.readlines(file_name)
499
+ break
500
+ end
501
+ end
502
+ included
503
+ end
504
+ private :get_included
505
+
506
+ def format_line_num(*args)
507
+ width = args.collect{|i| i.to_s.length }.max
508
+ args.collect{|i| sprintf("%#{width}d", i) }
509
+ end
510
+ private :format_line_num
511
+
512
+ ---- header
513
+ require "rd/rdinlineparser.tab.rb"
514
+ require "rd/parser-util"
515
+
516
+ module RD
517
+ ---- footer
518
+ end # end of module RD