tdiary-contrib 3.2.2.20130518

Sign up to get free protection for your applications and to get access to all the features.
Files changed (393) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +13 -0
  5. data/Gemfile.lock +35 -0
  6. data/README.en.md +12 -0
  7. data/README.md +13 -0
  8. data/Rakefile +41 -0
  9. data/doc/en/filter/spambayes.txt +3 -0
  10. data/doc/en/plugin.txt +1 -0
  11. data/doc/en/style/hatena.txt +10 -0
  12. data/doc/en/style/markdown.txt +16 -0
  13. data/doc/en/util.txt +1 -0
  14. data/doc/ja/filter/antirefspam.history.txt +59 -0
  15. data/doc/ja/filter/antirefspam.txt +86 -0
  16. data/doc/ja/filter/comment_key.ja.html +182 -0
  17. data/doc/ja/filter/spambayes.txt +3 -0
  18. data/doc/ja/plugin/add_bookmark.txt +50 -0
  19. data/doc/ja/plugin/category_to_tag.txt +21 -0
  20. data/doc/ja/plugin/cocoment.txt +31 -0
  21. data/doc/ja/plugin/google_adsense.txt +25 -0
  22. data/doc/ja/plugin/google_analytics.txt +7 -0
  23. data/doc/ja/plugin/image_detail.txt +69 -0
  24. data/doc/ja/plugin/image_gps.txt +36 -0
  25. data/doc/ja/plugin/image_gps2.txt +41 -0
  26. data/doc/ja/plugin/livedoor_weather.txt +105 -0
  27. data/doc/ja/plugin/opensearch_ad.txt +16 -0
  28. data/doc/ja/plugin/section_footer.txt +84 -0
  29. data/doc/ja/plugin/select_theme.txt +1 -0
  30. data/doc/ja/plugin.txt +13 -0
  31. data/doc/ja/style/hatena.txt +10 -0
  32. data/doc/ja/style/markdown.txt +13 -0
  33. data/doc/ja/util.txt +12 -0
  34. data/filter/antirefspam.rb +263 -0
  35. data/filter/commentkey.rb +29 -0
  36. data/filter/commentsize.rb +18 -0
  37. data/filter/hidecomment.rb +13 -0
  38. data/filter/iplookup.rb +55 -0
  39. data/filter/plugin/antirefspam.rb +59 -0
  40. data/filter/plugin/commentkey.rb +58 -0
  41. data/filter/plugin/commentsize.rb +12 -0
  42. data/filter/plugin/en/iplookup.rb +9 -0
  43. data/filter/plugin/en/spambayes.rb +123 -0
  44. data/filter/plugin/iplookup.rb +39 -0
  45. data/filter/plugin/ja/antirefspam.rb +91 -0
  46. data/filter/plugin/ja/commentkey.rb +17 -0
  47. data/filter/plugin/ja/commentsize.rb +6 -0
  48. data/filter/plugin/ja/iplookup.rb +9 -0
  49. data/filter/plugin/ja/spambayes.rb +124 -0
  50. data/filter/plugin/spambayes.rb +501 -0
  51. data/filter/plugin/zh/iplookup.rb +9 -0
  52. data/filter/rblcheck.rb +36 -0
  53. data/filter/spambayes.rb +535 -0
  54. data/filter/spamlookup.rb +37 -0
  55. data/io/dbi_io/ChangeLog +19 -0
  56. data/io/dbi_io/README.ja +39 -0
  57. data/io/dbi_io/dbi_io.rb +181 -0
  58. data/io/dbi_io/plugin/refererDbiIO.rb +76 -0
  59. data/io/dbi_io/tdiary_table.sql +42 -0
  60. data/js/appstore.js +109 -0
  61. data/js/datepicker.js +69 -0
  62. data/js/editor.js +82 -0
  63. data/js/flickr.js +157 -0
  64. data/js/image_ex.js +79 -0
  65. data/js/jquery.socialbutton.js +842 -0
  66. data/js/nicovideo.js +17 -0
  67. data/js/picasa.js +322 -0
  68. data/js/plugin_checker.js +71 -0
  69. data/js/prettify/lang-apollo.js +2 -0
  70. data/js/prettify/lang-clj.js +18 -0
  71. data/js/prettify/lang-css.js +2 -0
  72. data/js/prettify/lang-go.js +1 -0
  73. data/js/prettify/lang-hs.js +2 -0
  74. data/js/prettify/lang-lisp.js +3 -0
  75. data/js/prettify/lang-lua.js +2 -0
  76. data/js/prettify/lang-ml.js +2 -0
  77. data/js/prettify/lang-n.js +4 -0
  78. data/js/prettify/lang-proto.js +1 -0
  79. data/js/prettify/lang-scala.js +2 -0
  80. data/js/prettify/lang-sql.js +2 -0
  81. data/js/prettify/lang-tex.js +1 -0
  82. data/js/prettify/lang-vb.js +2 -0
  83. data/js/prettify/lang-vhdl.js +3 -0
  84. data/js/prettify/lang-wiki.js +2 -0
  85. data/js/prettify/lang-xq.js +3 -0
  86. data/js/prettify/lang-yaml.js +2 -0
  87. data/js/prettify/prettify.css +1 -0
  88. data/js/prettify/prettify.js +28 -0
  89. data/js/referer.js +17 -0
  90. data/js/show_and_hide.js +39 -0
  91. data/js/socialbutton.js +126 -0
  92. data/js/twitter_anywhere.js +28 -0
  93. data/js/yahoo_kousei.js +21 -0
  94. data/lib/bayes/convert.rb +34 -0
  95. data/lib/bayes.rb +232 -0
  96. data/lib/exifparser/BUGS +1 -0
  97. data/lib/exifparser/ChangeLog +169 -0
  98. data/lib/exifparser/README +15 -0
  99. data/lib/exifparser/install.rb +1015 -0
  100. data/lib/exifparser/lib/exifparser/makernote/canon.rb +502 -0
  101. data/lib/exifparser/lib/exifparser/makernote/fujifilm.rb +415 -0
  102. data/lib/exifparser/lib/exifparser/makernote/minolta.rb +84 -0
  103. data/lib/exifparser/lib/exifparser/makernote/mk_nikonflensname.rb +39 -0
  104. data/lib/exifparser/lib/exifparser/makernote/nikon.rb +267 -0
  105. data/lib/exifparser/lib/exifparser/makernote/nikon2.rb +581 -0
  106. data/lib/exifparser/lib/exifparser/makernote/nikonflensname.rb +438 -0
  107. data/lib/exifparser/lib/exifparser/makernote/olympus.rb +225 -0
  108. data/lib/exifparser/lib/exifparser/makernote/prove.rb +84 -0
  109. data/lib/exifparser/lib/exifparser/makernote/sigma.rb +237 -0
  110. data/lib/exifparser/lib/exifparser/pre-setup.rb +1 -0
  111. data/lib/exifparser/lib/exifparser/scan.rb +278 -0
  112. data/lib/exifparser/lib/exifparser/tag.rb +2298 -0
  113. data/lib/exifparser/lib/exifparser/thumbnail.rb +76 -0
  114. data/lib/exifparser/lib/exifparser/utils.rb +88 -0
  115. data/lib/exifparser/lib/exifparser.rb +265 -0
  116. data/lib/exifparser/sample/exifview.rb +279 -0
  117. data/lib/tdiary-contrib.rb +19 -0
  118. data/lib/wgs2tky.rb +93 -0
  119. data/misc/section_footer2/buzzurl.yaml +6 -0
  120. data/misc/section_footer2/fc2.yaml +6 -0
  121. data/misc/section_footer2/ldc.yaml +6 -0
  122. data/misc/section_footer2/retweet.yaml +7 -0
  123. data/misc/section_footer2/twitter.yaml +7 -0
  124. data/misc/section_footer2/yahoo.yaml +6 -0
  125. data/misc/tdiarygraph/tdiarygraph120x90e.swf +0 -0
  126. data/misc/tdiarygraph/tdiarygraph125x125e.swf +0 -0
  127. data/misc/tdiarygraph/tdiarygraph240x180e.swf +0 -0
  128. data/misc/tdiarygraph/tdiarygraph468x60e.swf +0 -0
  129. data/misc/tdiarygraph/tdiarygraph728x90e.swf +0 -0
  130. data/misc/tdiarytimes/tdiarytimes125x125r.swf +0 -0
  131. data/misc/tdiarytimes/tdiarytimes125x125r7.swf +0 -0
  132. data/misc/tdiarytimes/tdiarytimes125x125s.swf +0 -0
  133. data/misc/tdiarytimes/tdiarytimes125x30.swf +0 -0
  134. data/misc/tdiarytimes/tdiarytimes234x30.swf +0 -0
  135. data/misc/tdiarytimes/tdiarytimes468x30.swf +0 -0
  136. data/plugin/add_bookmark.rb +89 -0
  137. data/plugin/apple_webclip.rb +26 -0
  138. data/plugin/appstore.rb +47 -0
  139. data/plugin/bigpresen.rb +86 -0
  140. data/plugin/bitly.rb +39 -0
  141. data/plugin/bootstrap-navi.rb +54 -0
  142. data/plugin/canonical.rb +9 -0
  143. data/plugin/category_similar.rb +73 -0
  144. data/plugin/category_to_tag.rb +60 -0
  145. data/plugin/category_to_tagcloud.rb +172 -0
  146. data/plugin/cocomment.rb +37 -0
  147. data/plugin/code-prettify.rb +23 -0
  148. data/plugin/coderwall.rb +34 -0
  149. data/plugin/datepicker.rb +28 -0
  150. data/plugin/day2section.rb +20 -0
  151. data/plugin/del_footer.rb +111 -0
  152. data/plugin/description_from_body.rb +23 -0
  153. data/plugin/development.rb +16 -0
  154. data/plugin/editor.rb +11 -0
  155. data/plugin/en/add_bookmark.rb +20 -0
  156. data/plugin/en/del_footer.rb +10 -0
  157. data/plugin/en/git-register.rb +3 -0
  158. data/plugin/en/livedoor_weather.rb +25 -0
  159. data/plugin/en/microsummary.rb +18 -0
  160. data/plugin/en/nicovideo.rb +38 -0
  161. data/plugin/en/openid.rb +8 -0
  162. data/plugin/en/section_footer.rb +6 -0
  163. data/plugin/en/section_footer2.rb +3 -0
  164. data/plugin/en/socialbutton.rb +5 -0
  165. data/plugin/everytrail.rb +39 -0
  166. data/plugin/facebook_comments.rb +59 -0
  167. data/plugin/flickr.rb +209 -0
  168. data/plugin/gist.rb +16 -0
  169. data/plugin/git-register.rb +240 -0
  170. data/plugin/github_badge.rb +27 -0
  171. data/plugin/github_link.rb +9 -0
  172. data/plugin/goo_gl.rb +42 -0
  173. data/plugin/google_adsense.rb +132 -0
  174. data/plugin/google_analytics.rb +39 -0
  175. data/plugin/google_map.rb +168 -0
  176. data/plugin/google_sitemaps.rb +60 -0
  177. data/plugin/google_webmaster.rb +22 -0
  178. data/plugin/hatena_bookmark_nocomment.rb +9 -0
  179. data/plugin/hatena_star.rb +66 -0
  180. data/plugin/hb_footer.rb +255 -0
  181. data/plugin/hb_footer4sec.rb +244 -0
  182. data/plugin/hb_footer4sec_js.rb +30 -0
  183. data/plugin/hide_comment_form.rb +4 -0
  184. data/plugin/hide_sidebar_iphone.rb +21 -0
  185. data/plugin/iddy.rb +81 -0
  186. data/plugin/image_detail.rb +143 -0
  187. data/plugin/image_ex.rb +462 -0
  188. data/plugin/image_gps.rb +128 -0
  189. data/plugin/inline_wiki.rb +6 -0
  190. data/plugin/instagr.rb +64 -0
  191. data/plugin/ja/add_bookmark.rb +20 -0
  192. data/plugin/ja/del_footer.rb +10 -0
  193. data/plugin/ja/flickr.rb +62 -0
  194. data/plugin/ja/git-register.rb +3 -0
  195. data/plugin/ja/google_sitemaps.rb +35 -0
  196. data/plugin/ja/livedoor_weather.rb +25 -0
  197. data/plugin/ja/microsummary.rb +18 -0
  198. data/plugin/ja/nicovideo.rb +41 -0
  199. data/plugin/ja/openid.rb +7 -0
  200. data/plugin/ja/section_footer.rb +6 -0
  201. data/plugin/ja/section_footer2.rb +4 -0
  202. data/plugin/ja/socialbutton.rb +6 -0
  203. data/plugin/jdate.rb +20 -0
  204. data/plugin/jholiday.rb +16 -0
  205. data/plugin/jmonth.rb +20 -0
  206. data/plugin/jquery_ui_theme.rb +55 -0
  207. data/plugin/jroku.rb +28 -0
  208. data/plugin/jyear.rb +37 -0
  209. data/plugin/latlonglab_route.rb +25 -0
  210. data/plugin/lazy_referer.rb +38 -0
  211. data/plugin/livedoor_weather.rb +180 -0
  212. data/plugin/make_link.rb +44 -0
  213. data/plugin/makerss_category.rb +43 -0
  214. data/plugin/makerss_comment.rb +35 -0
  215. data/plugin/microsummary.rb +62 -0
  216. data/plugin/mm_footer.rb +215 -0
  217. data/plugin/monthly_autopagerize.rb +67 -0
  218. data/plugin/my_hotentry.rb +132 -0
  219. data/plugin/navi_day.rb +118 -0
  220. data/plugin/navi_this_month.rb +15 -0
  221. data/plugin/nicovideo.rb +115 -0
  222. data/plugin/notify_miniblog.rb +134 -0
  223. data/plugin/ogp.rb +55 -0
  224. data/plugin/ohmsha_estore.rb +71 -0
  225. data/plugin/openid.rb +90 -0
  226. data/plugin/opensearch_ad.rb +33 -0
  227. data/plugin/picasa.rb +56 -0
  228. data/plugin/plugin_checker.rb +41 -0
  229. data/plugin/popit.rb +22 -0
  230. data/plugin/prettify.rb +19 -0
  231. data/plugin/prezi.rb +10 -0
  232. data/plugin/profile.rb +222 -0
  233. data/plugin/puboo.rb +93 -0
  234. data/plugin/pygments_css.rb +76 -0
  235. data/plugin/rating.rb +419 -0
  236. data/plugin/recent_estraier.rb +50 -0
  237. data/plugin/recent_tweet.rb +71 -0
  238. data/plugin/retweet.rb +86 -0
  239. data/plugin/rubykaigi.rb +99 -0
  240. data/plugin/search-bing.rb +87 -0
  241. data/plugin/search-default.rb +264 -0
  242. data/plugin/search-google-custom.rb +60 -0
  243. data/plugin/search-yahoo-websearch.rb +121 -0
  244. data/plugin/search-yahoo.rb +109 -0
  245. data/plugin/section_footer.rb +195 -0
  246. data/plugin/section_footer2.rb +278 -0
  247. data/plugin/section_permalink.rb +73 -0
  248. data/plugin/section_permalink_anchor.rb +39 -0
  249. data/plugin/select_style.rb +42 -0
  250. data/plugin/select_theme.rb +90 -0
  251. data/plugin/show_and_hide.rb +77 -0
  252. data/plugin/slideshare.rb +10 -0
  253. data/plugin/socialbutton.rb +60 -0
  254. data/plugin/tatsu_zine.rb +93 -0
  255. data/plugin/tdiarygraph_flashstyle.rb +296 -0
  256. data/plugin/tdiarytimes.rb +166 -0
  257. data/plugin/tdiarytimes2.rb +406 -0
  258. data/plugin/tdiarytimes_flashstyle.rb +263 -0
  259. data/plugin/tdiarytimes_textstyle.rb +290 -0
  260. data/plugin/title_anchor.rb +16 -0
  261. data/plugin/tweet_quote.rb +106 -0
  262. data/plugin/twitpic.rb +10 -0
  263. data/plugin/twitter.rb +46 -0
  264. data/plugin/twitter_anywhere.rb +209 -0
  265. data/plugin/twitter_badge.rb +42 -0
  266. data/plugin/twitter_js.rb +59 -0
  267. data/plugin/ustream.rb +19 -0
  268. data/plugin/vimeo.rb +14 -0
  269. data/plugin/volatile.rb +89 -0
  270. data/plugin/vote.rb +100 -0
  271. data/plugin/wikiloc.rb +27 -0
  272. data/plugin/windex.rb +512 -0
  273. data/plugin/yahoo_kousei.rb +79 -0
  274. data/plugin/yahoo_map.rb +97 -0
  275. data/plugin/youtube.rb +33 -0
  276. data/plugin/yshop.rb +189 -0
  277. data/plugin/zenback.rb +46 -0
  278. data/spec/apple_webclip_spec.rb +46 -0
  279. data/spec/fixtures/friendfeed.xml +2 -0
  280. data/spec/fixtures/github.json +1 -0
  281. data/spec/fixtures/twitter.xml +73 -0
  282. data/spec/gist_spec.rb +16 -0
  283. data/spec/github_link_spec.rb +39 -0
  284. data/spec/google_analytics_spec.rb +60 -0
  285. data/spec/jdate_spec.rb +23 -0
  286. data/spec/jmonth_spec.rb +28 -0
  287. data/spec/jyear_spec.rb +21 -0
  288. data/spec/my_hotentry_spec.rb +78 -0
  289. data/spec/openid_spec.rb +246 -0
  290. data/spec/opensearch_ad_spec.rb +50 -0
  291. data/spec/profile_spec.rb +88 -0
  292. data/spec/rcov.opts +2 -0
  293. data/spec/spec_helper.rb +223 -0
  294. data/spec/title_anchor_spec.rb +39 -0
  295. data/spec/twitter_js_spec.rb +116 -0
  296. data/spec/youtube_spec.rb +20 -0
  297. data/style/hatena_style.rb +1011 -0
  298. data/style/markdown_style.rb +239 -0
  299. data/style/wikiext_style.rb +21 -0
  300. data/tdiary-contrib.gemspec +25 -0
  301. data/util/clean-spam/README.ja +1 -0
  302. data/util/clean-spam/tdiary-comment-clean +46 -0
  303. data/util/clean-spam/tdiary-comment-clean2 +81 -0
  304. data/util/clean-spam/tdiary-referer-clean +46 -0
  305. data/util/convert_pstore.rb +82 -0
  306. data/util/estraier-search/ChangeLog +36 -0
  307. data/util/estraier-search/README.ja +114 -0
  308. data/util/estraier-search/en/estraier-register.rb +3 -0
  309. data/util/estraier-search/estraier-register.rb +298 -0
  310. data/util/estraier-search/estraier-search.rb +273 -0
  311. data/util/estraier-search/estraier.rhtml +73 -0
  312. data/util/estraier-search/estraier.rxml +23 -0
  313. data/util/estraier-search/i.estraier.rhtml +31 -0
  314. data/util/estraier-search/ja/estraier-register.rb +3 -0
  315. data/util/image-gallery/README.ja +27 -0
  316. data/util/image-gallery/image-gallery.rb +523 -0
  317. data/util/image-gallery/image-gallery.rb.euc-jp +523 -0
  318. data/util/image-gallery/js/SmoothGallery/Changelog +52 -0
  319. data/util/image-gallery/js/SmoothGallery/css/ReMooz.css +186 -0
  320. data/util/image-gallery/js/SmoothGallery/css/img/carrow1.gif +0 -0
  321. data/util/image-gallery/js/SmoothGallery/css/img/carrow2.gif +0 -0
  322. data/util/image-gallery/js/SmoothGallery/css/img/closebox.gif +0 -0
  323. data/util/image-gallery/js/SmoothGallery/css/img/closebox.png +0 -0
  324. data/util/image-gallery/js/SmoothGallery/css/img/fleche1.gif +0 -0
  325. data/util/image-gallery/js/SmoothGallery/css/img/fleche1.png +0 -0
  326. data/util/image-gallery/js/SmoothGallery/css/img/fleche2.gif +0 -0
  327. data/util/image-gallery/js/SmoothGallery/css/img/fleche2.png +0 -0
  328. data/util/image-gallery/js/SmoothGallery/css/img/loading-bar-black.gif +0 -0
  329. data/util/image-gallery/js/SmoothGallery/css/img/open.gif +0 -0
  330. data/util/image-gallery/js/SmoothGallery/css/img/open.png +0 -0
  331. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_e.png +0 -0
  332. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_n.png +0 -0
  333. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_ne.png +0 -0
  334. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_nw.png +0 -0
  335. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_s.png +0 -0
  336. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_se.png +0 -0
  337. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_sw.png +0 -0
  338. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_w.png +0 -0
  339. data/util/image-gallery/js/SmoothGallery/css/img/spinner.gif +0 -0
  340. data/util/image-gallery/js/SmoothGallery/css/jd.gallery.css +371 -0
  341. data/util/image-gallery/js/SmoothGallery/css/layout.css +91 -0
  342. data/util/image-gallery/js/SmoothGallery/license.txt +621 -0
  343. data/util/image-gallery/js/SmoothGallery/resizer.php +113 -0
  344. data/util/image-gallery/js/SmoothGallery/scripts/Changelog +52 -0
  345. data/util/image-gallery/js/SmoothGallery/scripts/History.Routing.js +126 -0
  346. data/util/image-gallery/js/SmoothGallery/scripts/History.js +109 -0
  347. data/util/image-gallery/js/SmoothGallery/scripts/ReMooz.js +364 -0
  348. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.js +843 -0
  349. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.set.js +183 -0
  350. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.transitions.js +90 -0
  351. data/util/image-gallery/js/SmoothGallery/scripts/jdgalleryresize.js +828 -0
  352. data/util/image-gallery/js/SmoothGallery/scripts/license.txt +621 -0
  353. data/util/image-gallery/js/SmoothGallery/scripts/mootools-1.2-more.js +103 -0
  354. data/util/image-gallery/js/SmoothGallery/scripts/mootools-1.2.1-core-yc.js +349 -0
  355. data/util/image-gallery/js/SmoothGallery/scripts/resizer.php +113 -0
  356. data/util/image-gallery/misc/plugin/recent_image.rb +406 -0
  357. data/util/image-gallery/skel/gallery.rhtml +154 -0
  358. data/util/image-gallery/skel/gallery.rhtml.euc-jp +154 -0
  359. data/util/image-gallery/tdiary.conf.igsample +8 -0
  360. data/util/image-gallery/theme/image-gallery.css +85 -0
  361. data/util/image2flickr.rb +282 -0
  362. data/util/posttdiary/README.ja +12 -0
  363. data/util/posttdiary/posttdiary-ex.rb +1155 -0
  364. data/util/posttdiary/posttdiary.rb +245 -0
  365. data/util/rast-search/ChangeLog +55 -0
  366. data/util/rast-search/README.ja +99 -0
  367. data/util/rast-search/en/rast-register.rb +3 -0
  368. data/util/rast-search/i.rast.rhtml +33 -0
  369. data/util/rast-search/ja/rast-register.rb +3 -0
  370. data/util/rast-search/rast-register.rb +326 -0
  371. data/util/rast-search/rast-search.rb +249 -0
  372. data/util/rast-search/rast.rhtml +66 -0
  373. data/util/rast-search/rast.rxml +21 -0
  374. data/util/section_link/README +11 -0
  375. data/util/section_link/misc/plugin/section_link.rb +68 -0
  376. data/util/section_link/misc/plugin/section_link_anchor.rb +38 -0
  377. data/util/section_link/tdiary/tdiary_day_ext.rb +21 -0
  378. data/util/section_link/tdiary/tdiaryext_style.rb +36 -0
  379. data/util/section_link/tdiary/wikiext_style.rb +36 -0
  380. data/util/tdiary-for-ruby1.9/compatible.rb +97 -0
  381. data/util/tdiary-for-ruby1.9/tdiary-2.2.0.patch +98 -0
  382. data/util/tdiary-for-ruby1.9/tdiary-2.3.1.patch +212 -0
  383. data/util/tdiary-grep/README +4 -0
  384. data/util/tdiary-grep/grep.rb +445 -0
  385. data/util/tdiary-mode/http.el +130 -0
  386. data/util/tdiary-mode/tdiary-mode.el +613 -0
  387. data/util/tdiary-vim/ChangeLog +25 -0
  388. data/util/tdiary-vim/README +60 -0
  389. data/util/tdiary-vim/tdiary.vim +350 -0
  390. data/util/tdiarysearch/README.en +53 -0
  391. data/util/tdiarysearch/README.ja +99 -0
  392. data/util/tdiarysearch/search.rb +504 -0
  393. metadata +497 -0
data/plugin/vote.rb ADDED
@@ -0,0 +1,100 @@
1
+ # tdiary_vote.rb $Revision: 2 $
2
+ # Copyright (C) 2006 Michitaka Ohno <elpeo@mars.dti.ne.jp>
3
+ # You can redistribute it and/or modify it under GPL2.
4
+ #
5
+ # ref. http://elpeo.jp/diary/20060622.html#p01
6
+ #
7
+ # .tdiary-vote {
8
+ # float: left;
9
+ # background-color: aqua;
10
+ # }
11
+
12
+ require 'digest/md5'
13
+ require 'pstore'
14
+
15
+ @tdiary_vote_db = "#{@cache_path}/tdiary_vote"
16
+ @tdiary_vote_label = "投票"
17
+ @tdiary_vote_date = nil
18
+
19
+ def vote( *items )
20
+ return '' unless @tdiary_vote_date
21
+ h, voted = get_vote( @tdiary_vote_date, @cgi.cookies['tdiary_vote'][0] )
22
+ max = h.empty? ? 1 : h.values.max
23
+ r = %Q[<table border="1">]
24
+ items.sort{|a, b| h[b] <=> h[a]}.each do |item|
25
+ num = h[item]
26
+ r << %Q[<tr>]
27
+ r << %Q[<td>#{CGI.escapeHTML( item )}</td>]
28
+ r << %Q[<td><span class="tdiary-vote" style="height: 2.5ex; width: #{(100*num/max).to_i}px"></span>#{num}</td>]
29
+ unless voted then
30
+ r << %Q[<td>]
31
+ r << %Q[<form submit="#{@conf.index}" method="POST" style="margin: 0px; padding: 0px">]
32
+ r << %Q[#{csrf_protection}]
33
+ r << %Q[<input type="hidden" name="date" value="#{@tdiary_vote_date.strftime( "%Y%m%d" )}">]
34
+ r << %Q[<input type="hidden" name="name" value="">]
35
+ r << %Q[<input type="hidden" name="body" value="">]
36
+ r << %Q[<input type="hidden" name="vote" value="#{CGI.escapeHTML( item )}">]
37
+ r << %Q[<input type="submit" name="comment" value="#{@tdiary_vote_label}">]
38
+ r << %Q[</form>]
39
+ r << %Q[</td>]
40
+ end
41
+ r << %Q[</tr>]
42
+ end
43
+ r << %Q[</table>]
44
+ end
45
+
46
+ def get_vote( date, uid )
47
+ h = Hash.new(0)
48
+ voted = false
49
+ file = "#{@tdiary_vote_db}/#{date.strftime( "%Y%m%d" )}.db"
50
+ if File.exist?( file ) then
51
+ PStore.new( file ).transaction do |db|
52
+ h.update( db['vote'] ) if db.root?( 'vote' )
53
+ voted = db['voter'].include?( uid ) if db.root?( 'voter' )
54
+ db.abort
55
+ end
56
+ end
57
+ [h, voted]
58
+ end
59
+
60
+ def add_vote( date, item, uid )
61
+ Dir::mkdir( @tdiary_vote_db ) unless File::directory?( @tdiary_vote_db )
62
+ file = "#{@tdiary_vote_db}/#{date.strftime( "%Y%m%d" )}.db"
63
+ PStore.new( file ).transaction do |db|
64
+ db['voter'] = Hash.new unless db.root?( 'voter' )
65
+ db.abort if db['voter'].include?( uid )
66
+ db['voter'][uid] = @cgi.remote_addr
67
+ db['vote'] = Hash.new(0) unless db.root?( 'vote' )
68
+ db['vote'][item] += 1
69
+ end
70
+ end
71
+
72
+ add_body_enter_proc do |date|
73
+ @tdiary_vote_date = date
74
+ ''
75
+ end
76
+
77
+ add_body_leave_proc do |date|
78
+ @tdiary_vote_date = nil
79
+ ''
80
+ end
81
+
82
+ unless bot? then
83
+ if @mode == 'comment' && @cgi.valid?( 'vote' ) && @cgi.cookies['tdiary_vote'][0] then
84
+ add_vote( @date, @cgi.params['vote'][0], @cgi.cookies['tdiary_vote'][0] )
85
+ end
86
+
87
+ add_footer_proc do
88
+ uid = @cgi.cookies['tdiary_vote'][0] || Digest::MD5.hexdigest( @cgi.remote_addr + Time.now.to_s + rand.to_s )
89
+ cookie_path = File::dirname( @cgi.script_name )
90
+ cookie_path += '/' if cookie_path !~ /\/$/
91
+ cookie = CGI::Cookie::new(
92
+ 'name' => 'tdiary_vote',
93
+ 'value' => uid,
94
+ 'path' => cookie_path,
95
+ 'expires' => Time.now.gmtime + 30*24*60*60
96
+ )
97
+ add_cookie( cookie )
98
+ ''
99
+ end
100
+ end
data/plugin/wikiloc.rb ADDED
@@ -0,0 +1,27 @@
1
+ #
2
+ # wikiloc.rb: plugin embedding trip map on wikiloc.
3
+ #
4
+ # Copyright (C) 2008 MUNEDA Takahiro <mux03@panda64.net>
5
+ # You can redistribute it and/or modify it under GPL2.
6
+ #
7
+ # derived from everytrail.rb, Copyright (C) 2008 TADA Tadashi <sho@spc.gr.jp>
8
+ #
9
+ # Parameters:
10
+ # @trip_id : your trip id
11
+ # @measures : on/off
12
+ # @maptype : M/S/H/T
13
+ # @size : [width,height]
14
+ #
15
+ # Please see the following address about the details:
16
+ # http://www.wikiloc.com/forum/posts/list/14.page
17
+ #
18
+ # ChangeLog:
19
+ # 20080706: Initial release
20
+ # 20080713: Change default parameters
21
+ #
22
+ def wikiloc( trip_id, measures = "off", maptype = "M", size = [500,400] )
23
+ size.collect! {|i| i.to_i }
24
+ size[0] = 500 if size[0] == 0
25
+ size[1] = 400 if size[1] == 0
26
+ %Q|<iframe frameBorder="0" src="http://www.wikiloc.com/wikiloc/spatialArtifacts.do?event=view&amp;id=#{h trip_id}&amp;measures=#{h measures}&amp;title=on&amp;near=on&amp;images=on&amp;maptype=#{maptype}" width="#{size[0]}px" height="#{size[1]}px"></iframe>|
27
+ end
data/plugin/windex.rb ADDED
@@ -0,0 +1,512 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # windex.rb $Revision: 1.2 $
4
+ #
5
+ # windex: 索引を生成する
6
+ # パラメタ:
7
+ # str: キーワード文字列
8
+ # readname: 読み仮名
9
+ #
10
+ # wikw: 索引からアンカーを生成する
11
+ # パラメタ:
12
+ # str: キーワード文字列
13
+ #
14
+ # このファイルをtDiaryのトップディレクトリにも配置し、CGIとして
15
+ # 実行することで索引ページを出力できます。
16
+ #
17
+ # CGI動作時の引数
18
+ # http://(日記URL)/windex.rb?kw=(キーワード文字列)
19
+ # とキーワードを指定してアクセスすることでそのキーワードに関係する日記の
20
+ # 日付一覧を出力できます。一つだけの場合にはその日付の日記への
21
+ # リダイレクトを出力します。
22
+ #
23
+ # tdiary.confによる設定
24
+ # @options['windex.generate_all'] = true
25
+ # 全ての日記から索引を生成します。これは時間がかかるので、索引の全生成を
26
+ # 行いたいときだけtrueに設定して更新を行うような使い方を想定しています。
27
+ #
28
+ # Copyright (c) 2003 Gony <gony@sm.rim.or.jp>
29
+ # Distributed under the GPL
30
+ #
31
+
32
+ mode = ""
33
+ if $0 == __FILE__
34
+ mode = "CGI"
35
+ if FileTest.symlink?(__FILE__) == true
36
+ org_path = File.dirname(File.readlink(__FILE__))
37
+ else
38
+ org_path = File.dirname(__FILE__)
39
+ end
40
+ $:.unshift(org_path)
41
+ require "pstore"
42
+ require "tdiary"
43
+
44
+ tdiarybase = TDiary::TDiaryBase
45
+ else
46
+ tdiarybase = TDiaryBase
47
+ end
48
+
49
+ class WITDiary < tdiarybase
50
+ def load_plugins
51
+ super
52
+ end
53
+
54
+ def generate_wordindex(date,plugin,index)
55
+ wordindex = WIWordIndex.new
56
+ @io.transaction(date) do |diaries|
57
+ wordindex.generate(diaries,plugin,index)
58
+ end
59
+
60
+ return wordindex
61
+ end
62
+ end
63
+
64
+ class WIWordIndex
65
+ def initialize
66
+ @windex = {}
67
+ @dates = []
68
+ end
69
+
70
+ def generate(diaries,plugin,index)
71
+ diaries.each_value do |diary|
72
+ num_section = 1
73
+ diary.each_section do |section|
74
+ anchor = index \
75
+ + plugin.anchor(diary.date.strftime("%Y%m%d")) \
76
+ + "#p%02d" % num_section
77
+ if section.subtitle != nil
78
+ scan(section.subtitle,anchor)
79
+ end
80
+ scan(section.body,anchor)
81
+ num_section = num_section + 1
82
+ end
83
+ end
84
+ end
85
+
86
+ def load(dir)
87
+ @windex = {}
88
+ Dir.mkdir(dir) unless File.directory?(dir)
89
+ PStore.new(dir + "/windex").transaction do |pstore|
90
+ @dates = pstore.roots
91
+ @dates.each do |key|
92
+ windex_tmp = pstore[key]
93
+ windex_tmp.each_key do |key_windex|
94
+ if @windex.has_key?(key_windex) == false
95
+ @windex[key_windex] = {"readname" => nil,
96
+ "anchor" => []}
97
+ end
98
+ if @windex[key_windex]["readname"] == nil \
99
+ && windex_tmp[key_windex].has_key?("readname") == true
100
+ @windex[key_windex]["readname"] = windex_tmp[key_windex]["readname"]
101
+ end
102
+ @windex[key_windex]["anchor"].concat(windex_tmp[key_windex]["anchor"])
103
+ end
104
+ end
105
+ end
106
+ end
107
+
108
+ def save(dir,keyname)
109
+ if File.directory?(dir) == false
110
+ Dir.mkdir(dir,0755)
111
+ end
112
+ PStore.new(dir + "/windex").transaction do |pstore|
113
+ pstore[keyname] = @windex
114
+ end
115
+ end
116
+
117
+ def generate_html(page)
118
+ return page.generate_html(@windex)
119
+ end
120
+
121
+ def has_key?(key)
122
+ return @windex.has_key?(key)
123
+ end
124
+
125
+ def [](key)
126
+ return @windex[key]
127
+ end
128
+
129
+ private
130
+ def scan(body,anchor)
131
+ to_delimiter_end = {
132
+ "(" => ")","[" => "]","{" => "}","<" => ">",
133
+ }
134
+
135
+ wistrs = body.scan(%r[<%\s*=\s*windex\s*[^(<%)]*\s*%>])
136
+ wistrs.each do |wistr|
137
+ # 引数抽出
138
+ argstr = wistr.gsub(%r[<%\s*=\s*windex\s*],"")
139
+ argstr = argstr.gsub(%r[\s*%>],"")
140
+ args = []
141
+ flag_done = false
142
+ while flag_done == false
143
+ pos_delimiter = argstr.index(%r['|"|%[Qq].]) #"'
144
+ if pos_delimiter != nil
145
+ # デリミタ文字取得
146
+ delimiter = argstr.scan(%r['|"|%[Qq].])[0] #"'
147
+ if delimiter.length == 3
148
+ delimiter_end = delimiter[2].chr
149
+ if to_delimiter_end.has_key?(delimiter_end)
150
+ delimiter_end = to_delimiter_end[delimiter_end]
151
+ end
152
+ else
153
+ delimiter_end = delimiter
154
+ end
155
+
156
+ # デリミタまでの文字列を削除
157
+ argstr = argstr[(pos_delimiter + delimiter.length)..-1]
158
+ pos_delimiter = argstr.index(delimiter_end)
159
+ if pos_delimiter != nil
160
+ if pos_delimiter > 0
161
+ # 引数として取得
162
+ args << argstr[0..(pos_delimiter - 1)]
163
+ else
164
+ args << ""
165
+ end
166
+ # デリミタまでの文字列を削除
167
+ argstr = argstr[(pos_delimiter + delimiter_end.length)..-1]
168
+ else
169
+ flag_done = true
170
+ end
171
+ else
172
+ flag_done = true
173
+ end
174
+ end
175
+
176
+ if args.length > 0
177
+ if @windex.has_key?(args[0]) == false
178
+ # ハッシュを生成
179
+ @windex[args[0]] = {"readname" => nil,"anchor" => []}
180
+ end
181
+ if args.length > 1 && @windex[args[0]]["readname"] == nil && args[1] != ""
182
+ @windex[args[0]]["readname"] = args[1]
183
+ end
184
+ @windex[args[0]]["anchor"] << anchor
185
+ end
186
+ end
187
+ end
188
+ end
189
+
190
+ class WIIndexPage
191
+ def initialize(title,css)
192
+ @title = title
193
+ @css = css
194
+ end
195
+
196
+ def generate_html(windex)
197
+ body = ""
198
+
199
+ # 大項目名 => 名前の配列 のハッシュを生成
200
+ subindex_to_name = {}
201
+ windex.keys.each do |key|
202
+ subindex = ""
203
+ if windex[key]["readname"] != nil
204
+ subindex = get_subindex(windex[key]["readname"])
205
+ else
206
+ subindex = get_subindex(key)
207
+ end
208
+ if subindex_to_name.has_key?(subindex) == false
209
+ subindex_to_name[subindex] = []
210
+ end
211
+ subindex_to_name[subindex] << key
212
+ end
213
+
214
+ # 大項目名ごとにHTMLを生成
215
+ if subindex_to_name.has_key?("記号") == true
216
+ body << generate_html_subindex(windex,subindex_to_name,"記号")
217
+ end
218
+ subindex_to_name.keys.sort.each do |key|
219
+ if key != "記号"
220
+ body << generate_html_subindex(windex,subindex_to_name,key)
221
+ end
222
+ end
223
+
224
+ body = <<-BODY
225
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
226
+ <html>
227
+ <head>
228
+ <title>#{h @title}(索引)</title>
229
+ #{@css}
230
+ </head>
231
+ <body>
232
+ <h1>#{@title} [索引]</h1>
233
+ <div class="day"><div class="body">
234
+ #{body}
235
+ </div></div>
236
+ </body>
237
+ </html>
238
+ BODY
239
+
240
+ return body
241
+ end
242
+
243
+ private
244
+ def generate_html_subindex(windex,subindex_to_name,key)
245
+ readname_to_name = {}
246
+ subindex_to_name[key].each do |name|
247
+ key_new = ""
248
+ if windex[name]["readname"] != nil
249
+ key_new = windex[name]["readname"]
250
+ else
251
+ key_new = name
252
+ end
253
+ if readname_to_name.has_key?(key_new) == false
254
+ readname_to_name[key_new] = []
255
+ end
256
+ readname_to_name[key_new] << name
257
+ end
258
+
259
+ body = %Q[<div class="section"><h2>#{key}</h2>\n]
260
+
261
+ # 読み仮名のソートでループ -> 名前のソートでループ
262
+ keys = readname_to_name.keys
263
+ if keys.empty? == false
264
+ keys.sort.each do |readname|
265
+ readname_to_name[readname].sort.each do |name|
266
+ body << "<p>#{name} ... "
267
+ num_anchor = 1
268
+ windex[name]["anchor"].sort.each do |anchor|
269
+ body = body + %Q[<a href="#{h anchor}">#{num_anchor}</a>]
270
+ if num_anchor < windex[name]["anchor"].length
271
+ body = body + ","
272
+ end
273
+ num_anchor = num_anchor + 1
274
+ end
275
+ body << "</p>"
276
+ end
277
+ end
278
+ end
279
+ body << "\n</div>\n"
280
+
281
+ return body
282
+ end
283
+
284
+ def get_subindex(name)
285
+ to_plainhiragana = {
286
+ "ぁ" => "あ","ぃ" => "い","ぅ" => "う","ぇ" => "え","ぉ" => "お",
287
+ "が" => "か","ぎ" => "き","ぐ" => "く","げ" => "け","ご" => "こ",
288
+ "ざ" => "さ","じ" => "し","ず" => "す","ぜ" => "せ","ぞ" => "そ",
289
+ "だ" => "た","ぢ" => "ち","っ" => "つ","づ" => "つ","で" => "て","ど" => "と",
290
+ "ば" => "は","ぱ" => "は","び" => "ひ","ぴ" => "ひ","ぶ" => "ふ","ぷ" => "ふ","べ" => "へ","ぺ" => "へ","ぼ" => "ほ","ぽ" => "ほ",
291
+ "ゃ" => "や","ゅ" => "ゆ","ょ" => "よ",
292
+ "ゎ" => "わ","ヴ" => "う","ヵ" => "か","ヶ" => "け",
293
+ }
294
+ to_1byte = {
295
+ "!" => "!",'”' => '"',"#" => "#","$" => "$","%" => "%","&" => "&","’" => "'","(" => "(",")" => ")","*" => "*","+" => "+","," => ",","−" => "-","." => ".","/" => "/",
296
+ "0" => "0","1" => "1","2" => "2","3" => "3","4" => "4","5" => "5","6" => "6","7" => "7","8" => "8","9" => "9",":" => ":",";" => ";","<" => "<","=" => "=",">" => ">","?" => "?",
297
+ "@" => "@","A" => "A","B" => "B","C" => "C","D" => "D","E" => "E","F" => "F","G" => "G","H" => "H","I" => "I","J" => "J","K" => "K","L" => "L","M" => "M","N" => "N","O" => "O",
298
+ "P" => "P","Q" => "Q","R" => "R","S" => "S","T" => "T","U" => "U","V" => "V","W" => "W","X" => "X","Y" => "Y","Z" => "Z","[" => "[","¥" => "\\","]" => "]","^" => "^","_" => "_",
299
+ "a" => "a","b" => "b","c" => "c","d" => "d","e" => "e","f" => "f","g" => "g","h" => "h","i" => "i","j" => "j","k" => "k","l" => "l","m" => "m","n" => "n","o" => "o",
300
+ "p" => "p","q" => "q","r" => "r","s" => "s","t" => "t","u" => "u","v" => "v","w" => "w","x" => "x","y" => "y","z" => "z","{" => "{","|" => "|","}" => "}","‾" => "~",
301
+ }
302
+
303
+ topchr = name[0,1]
304
+ if topchr.count("\xA1-\xFE") == 1
305
+ # マルチバイト文字
306
+ topchr = name[0,2]
307
+ end
308
+ if to_1byte.has_key?(topchr) == true
309
+ topchr = to_1byte[topchr]
310
+ end
311
+ if topchr.length == 1
312
+ # シングルバイト文字の処理
313
+ topchr = topchr.upcase
314
+
315
+ if (0x21 <= topchr[0] && topchr[0] <= 0x2F) \
316
+ || (0x3A <= topchr[0] && topchr[0] <= 0x40) \
317
+ || (0x5B <= topchr[0] && topchr[0] <= 0x60) \
318
+ || (0x7B <= topchr[0] && topchr[0] <= 0x7B)
319
+ topchr = "記号"
320
+ end
321
+ else
322
+ # マルチバイト文字の処理
323
+ # カタカナ->ひらがな変換
324
+ code = topchr[0] * 0x100 + topchr[1]
325
+ if 0xA5A1 <= code && code <= 0xA5F3
326
+ topchr = 0xA4.chr + topchr[1].chr
327
+ end
328
+
329
+ # 濁点 / 半濁点 撥音など変換
330
+ if to_plainhiragana.has_key?(topchr) == true
331
+ topchr = to_plainhiragana[topchr]
332
+ end
333
+ end
334
+
335
+ return topchr
336
+ end
337
+ end
338
+
339
+ class WIRedirectPage
340
+ def initialize(key)
341
+ @key = key
342
+ end
343
+
344
+ def generate_html(windex)
345
+ anchor = windex[@key]["anchor"][0]
346
+ body = <<-BODY
347
+ <html>
348
+ <head>
349
+ <meta http-equiv="refresh" content="0;url=#{h anchor}">
350
+ <title>moving...</title>
351
+ </head>
352
+ <body>Wait or <a href="#{h anchor}">Click here!</a></body>
353
+ </html>
354
+ BODY
355
+
356
+ return body
357
+ end
358
+ end
359
+
360
+ class WISinglePage
361
+ def initialize(title,date_format,css,key)
362
+ @title = title
363
+ @date_format = date_format
364
+ @css = css
365
+ @key = key
366
+ end
367
+
368
+ def generate_html(windex)
369
+ anchors = windex[@key]["anchor"]
370
+ body = %Q[<div class="section"><h2>#{@key}</h2>\n]
371
+ anchors.sort.each do |anchor|
372
+ str_date = anchor.scan(/\d{8}/)[0]
373
+ date = Time.local(str_date[0..3].to_i,str_date[4..5].to_i,str_date[6..7].to_i)
374
+ body << %Q[<p><a href="#{h anchor}">#{date.strftime(@date_format)}</a></p>\n]
375
+ end
376
+ body << "\n</div>\n"
377
+ body = <<-BODY
378
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
379
+ <html>
380
+ <head>
381
+ <title>#{h @title}(索引)</title>
382
+ #{@css}
383
+ </head>
384
+ <body>
385
+ <h1>#{@title} [索引]</h1>
386
+ <div class="day"><div class="body">
387
+ #{body}
388
+ </div></div>
389
+ </body>
390
+ </html>
391
+ BODY
392
+
393
+ return body
394
+ end
395
+ end
396
+
397
+ class WIErrorPage
398
+ def initialize(title,css,key)
399
+ @title = title
400
+ @css = css
401
+ @key = key
402
+ end
403
+
404
+ def generate_html(windex)
405
+ body = <<-BODY
406
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
407
+ <html>
408
+ <head>
409
+ <title>#{h @title}(索引)</title>
410
+ #{@css}
411
+ </head>
412
+ <body>
413
+ <h1>#{@title} [索引]</h1>
414
+ <div class="day"><div class="body">
415
+ キーワード「#{h @key}」は登録されていません。
416
+ </div></div>
417
+ </body>
418
+ </html>
419
+ BODY
420
+
421
+ return body
422
+ end
423
+ end
424
+
425
+ def windex(str,readname = "")
426
+ return str
427
+ end
428
+
429
+ def wikw(str)
430
+ if @wordindex.has_key?(str) == true
431
+ anchors = @wordindex[str]["anchor"]
432
+ if anchors.length == 1
433
+ return %Q[<a href="#{h anchors[0]}">#{str}</a>]
434
+ else
435
+ body = "#{str}("
436
+ num_anchor = 1
437
+ anchors.sort.each do |anchor|
438
+ body << %Q[<a href="#{h anchor}">#{num_anchor}</a>]
439
+ if num_anchor < anchors.length
440
+ body << ","
441
+ end
442
+ num_anchor = num_anchor + 1
443
+ end
444
+ body << ")"
445
+
446
+ return body
447
+ end
448
+ end
449
+
450
+ return str
451
+ end
452
+
453
+ if mode != "CGI"
454
+ @wordindex = WIWordIndex.new
455
+ @wordindex.load(@cache_path + "/windex")
456
+
457
+ add_update_proc do
458
+ if @conf.options["windex.generate_all"] == true
459
+ tdiary = WITDiary.new(@cgi,"day.rhtml",@conf)
460
+ @years.each_key do |year|
461
+ @years[year.to_s].each do |month|
462
+ date = Time::local(year,month)
463
+ wordindex = tdiary.generate_wordindex(date,self,@conf.index)
464
+ wordindex.save(@cache_path + "/windex",date.strftime('%Y%m'))
465
+ end
466
+ end
467
+ else
468
+ wordindex = WIWordIndex.new
469
+ wordindex.generate(@diaries,self,@conf.index)
470
+ wordindex.save(@cache_path + "/windex",@date.strftime('%Y%m'))
471
+ end
472
+ end
473
+ else
474
+ cgi = CGI.new
475
+ conf = TDiary::Config.new(cgi)
476
+ cache_path = conf.data_path + "cache"
477
+ plugin = WITDiary.new(cgi,"day.rhtml",conf).load_plugins
478
+
479
+ wordindex = WIWordIndex.new
480
+ wordindex.load(cache_path + "/windex")
481
+ if cgi.valid?('kw') == true
482
+ key = cgi.params['kw'][0]
483
+ if wordindex.has_key?(key) == true
484
+ num_anchor = wordindex[key]["anchor"].length
485
+ if num_anchor == 0
486
+ page = WIErrorPage.new(conf.html_title,plugin.css_tag,key)
487
+ elsif num_anchor == 1
488
+ page = WIRedirectPage.new(key)
489
+ else
490
+ page = WISinglePage.new(conf.html_title,conf.date_format,plugin.css_tag,key)
491
+ end
492
+ else
493
+ page = WIErrorPage.new(conf.html_title,plugin.css_tag,key)
494
+ end
495
+ else
496
+ page = WIIndexPage.new(conf.html_title,plugin.css_tag)
497
+ end
498
+ body = wordindex.generate_html(page)
499
+
500
+ header = {
501
+ "type" => "text/html",
502
+ "charset" => "UTF-8",
503
+ "Content-Length" => body.size.to_s,
504
+ "Pragma" => "no-cache",
505
+ "Cache-Control" => "no-cache",
506
+ "Vary" => "User-Agent",
507
+ }
508
+ head = cgi.header(header)
509
+
510
+ print head
511
+ print body
512
+ end