tdiary-contrib 3.2.2.20130518

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 (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
@@ -0,0 +1,501 @@
1
+ # Copyright (C) 2007, KURODA Hiraku <hiraku@hinet.mydns.jp>
2
+ # You can redistribute it and/or modify it under GPL2.
3
+
4
+ require "bayes"
5
+
6
+ add_conf_proc("spambayes", SpambayesConfig::Res.title, "security") do
7
+ spambayes_conf_proc
8
+ end
9
+
10
+ def spambayes_conf_proc
11
+ SpambayesConfig.new(@mode, @cgi, @conf).show
12
+ end
13
+
14
+ module ::TDiary
15
+ module Filter
16
+ class Filter; end
17
+ class SpambayesFilter < Filter
18
+ class Comment; end
19
+ class Referer; end
20
+ end
21
+ end
22
+ end
23
+
24
+ class SpambayesConfig
25
+ Comment = ::TDiary::Filter::SpambayesFilter::Comment
26
+ Referer = ::TDiary::Filter::SpambayesFilter::Referer
27
+
28
+ RE_FILENAME_BODY = /\d+[a-z0-9]+/
29
+ RE_SPAM_FILE = /^S#{RE_FILENAME_BODY}$/o
30
+ RE_HAM_FILE = /^H#{RE_FILENAME_BODY}$/o
31
+ RE_DOUBT_FILE = /^D#{RE_FILENAME_BODY}$/o
32
+ RE_FILENAME = /^[SHD]#{RE_FILENAME_BODY}$/o
33
+
34
+ def initialize(mode, cgi, conf)
35
+ @mode = mode
36
+ @cgi = cgi
37
+ @conf = conf
38
+ filter_path = conf.filter_path || "#{PATH}/tdiary/filter"
39
+ require "#{filter_path}/spambayes" unless ::TDiary::Filter::SpambayesFilter.const_defined?(:Misc)
40
+
41
+ extend ::TDiary::Filter::SpambayesFilter::Misc
42
+ ::TDiary::Filter::SpambayesFilter::Misc.conf = conf
43
+ bayes_filter
44
+ end
45
+
46
+ def save_mode?
47
+ @mode=="saveconf"
48
+ end
49
+
50
+ def add_spam(data)
51
+ t = data.token
52
+ return if t.empty?
53
+ bayes_filter.spam << t if t.any?{|i| !bayes_filter.spam.include?(i)}
54
+ bayes_filter.spam << t while (bayes_filter.estimate(t)||0.0) <= threshold
55
+ @db_updated = true
56
+ end
57
+
58
+ def add_ham(data, with_add_comment=false)
59
+ t = data.token
60
+ return if t.empty?
61
+ bayes_filter.ham << t if t.any?{|i| !bayes_filter.ham.include?(i)}
62
+ bayes_filter.ham << t while (bayes_filter.estimate(t)||1.0) > threshold
63
+ @db_updated = true
64
+ add_comment(data) if data.is_a?(Comment) && with_add_comment
65
+ end
66
+
67
+ def save_db
68
+ bayes_filter.save if @db_updated
69
+ @db_updated = false
70
+ end
71
+
72
+ def show
73
+ case @cgi.params["sb_mode"][0]
74
+ when "show_comment"
75
+ show_all_comment
76
+ when "process_comment"
77
+ process_comment + show_config
78
+ when "show_ham_tokens"
79
+ show_db_token_list(:ham)
80
+ when "show_spam_tokens"
81
+ show_db_token_list(:spam)
82
+ when "confirm_ham"
83
+ confirm(:ham)
84
+ when "confirm_spam"
85
+ confirm(:spam)
86
+ when "register_ham"
87
+ register(:ham) + show_config
88
+ when "register_spam"
89
+ register(:spam) + show_config
90
+ when "confirm_rebuild_db"
91
+ confirm_rebuild_db
92
+ when "rebuild_db"
93
+ rebuild_db + show_config
94
+ when "show_all_referer"
95
+ show_all_referer
96
+ when "process_referer"
97
+ process_referer + show_config
98
+ when "show_comment_token"
99
+ show_comment_token
100
+ when "show_referer_token"
101
+ show_referer_token
102
+ when "save_config"
103
+ save_config + show_config
104
+ else
105
+ show_config
106
+ end
107
+ end
108
+
109
+ def save_config
110
+ return "" unless save_mode?
111
+ r = ""
112
+ @conf[conf_use] = @cgi.params[conf_use][0] || nil
113
+ @conf[conf_for_referer] = @cgi.params[conf_for_referer][0] || nil
114
+ @conf[conf_log] = @cgi.params[conf_log][0] || nil
115
+ @conf[conf_mail] = @cgi.params[conf_mail][0] || nil
116
+ cpt_ham = (@cgi.params[conf_threshold_ham][0]||threshold_ham).to_f
117
+ cpt_spam = (@cgi.params[conf_threshold][0]||threshold).to_f
118
+ if 0<cpt_ham and cpt_ham<=cpt_spam and cpt_spam<1.0
119
+ @conf[conf_threshold] = cpt_spam
120
+ @conf[conf_threshold_ham] = cpt_ham
121
+ end
122
+ prm = @cgi.params[conf_filter][0] || "Plain"
123
+ @conf[conf_filter] ||= "Plain"
124
+ if @conf[conf_filter] != prm
125
+ @conf[conf_filter] = prm
126
+ rebuild_db
127
+ end
128
+ r
129
+ end
130
+
131
+ def show_config
132
+ selected = "selected='selected'"
133
+ @conf[conf_filter] ||= "Plain"
134
+ <<EOT
135
+ <ul>
136
+ <li><a href="#{update_url}?conf=spambayes;sb_mode=show_comment">#{Res.check_comment}</a></li>
137
+ <li><a href="#{update_url}?conf=spambayes;sb_mode=show_all_referer">#{Res.check_referer}</a></li>
138
+ <li><a href="#{update_url}?conf=spambayes;sb_mode=show_spam_tokens">#{Res.token_list("Spam")}</a></li>
139
+ <li><a href="#{update_url}?conf=spambayes;sb_mode=show_ham_tokens">#{Res.token_list("Ham")}</a></li>
140
+ <li><a href="#{update_url}?conf=spambayes;sb_mode=confirm_rebuild_db">#{Res.rebuild_db}</a></li>
141
+ </ul>
142
+ <hr>
143
+ <ul>
144
+ <li>#{Res.use_bayes_filter} : <input type='checkbox' name='#{conf_use}' #{@conf[conf_use] ? "checked='checked'" : ""}>
145
+ <li>#{Res.use_filter_to_referer} : <input type='checkbox' name='#{conf_for_referer}' #{@conf[conf_for_referer] ? "checked='checked'" : ""}>
146
+ <li>#{Res.save_error_log} : <input type='checkbox' name='#{conf_log}' #{@conf[conf_log] ? "checked='checked'" : ""}>
147
+ <li>#{Res.threshold}: 0 &lt;= Ham &lt; <input type="text" name="#{conf_threshold_ham}" value="#{threshold_ham}"> &lt;= Doubt &lt;= <input type="text" name="#{conf_threshold}" value="#{threshold}"> &lt; Spam &lt;= 1.0</li>
148
+ <li>#{Res.receiver_addr} : <input type="text" name="#{conf_mail}" value="#{@conf[conf_mail]}"></li>
149
+ <li><select name='#{conf_filter}'>
150
+ <option #{@conf[conf_filter]=="Plain" ? selected : ""}>Plain</option>
151
+ <option #{@conf[conf_filter]=="PaulGraham" ? selected : ""}>PaulGraham</option>
152
+ </select></li>
153
+ </ul>
154
+ <input type='hidden' name='sb_mode' value='save_config'>
155
+ EOT
156
+ end
157
+
158
+ def show_comment(data, name=nil)
159
+ r = <<EOT
160
+ <a href='#{update_url}?edit=true;year=#{data.diary_date.year};month=#{data.diary_date.month};day=#{data.diary_date.day}'>
161
+ <span>#{data.name}(#{data.mail}) / #{data.date}</span>
162
+ </a>
163
+ <pre>#{CGI.escapeHTML(data.body)}</pre>
164
+ EOT
165
+ rate = bayes_filter.estimate(data.token)
166
+ r << "#{Res.spam_rate} : #{rate}" if rate
167
+ if name
168
+ r << <<EOT
169
+ <input type='hidden' name='process_#{name}' value='1'>
170
+ <br>
171
+ <input type='radio' name='#{name}' value='ham' id='H#{name}'>
172
+ <label for='H#{name}'>#{Res.register_ham}</label><br>
173
+ <input type='radio' name='#{name}' value='spam' id='S#{name}'>
174
+ <label for='S#{name}'>#{Res.register_spam}</label><br>
175
+ <a href='#{update_url}?conf=spambayes;sb_mode=show_comment_token;comment_id=#{name}'>token</a>
176
+ EOT
177
+ end
178
+ r
179
+ end
180
+
181
+ def show_all_comment
182
+ r = ""
183
+ spam_list = Dir["#{bayes_cache}/S*"].map{|i| File.basename(i)}.sort
184
+ ham_list = Dir["#{bayes_cache}/H*"].map{|i| File.basename(i)}.sort
185
+ doubt_list = Dir["#{bayes_cache}/D*"].map{|i| File.basename(i)}.sort
186
+ r << "<h2>Ham</h2><ul>"
187
+ ham_list.each do |f|
188
+ data = Comment.load(data_file(f))
189
+ r << "<li>\n#{show_comment(data, f)}\n</li>\n"
190
+ end
191
+ r << "</ul><h2>Doubt</h2><ul>"
192
+ doubt_list.each do |f|
193
+ data = Comment.load(data_file(f))
194
+ r << "<li>\n#{show_comment(data, f)}\n</li>\n"
195
+ end
196
+ r << "</ul><h2>Spam</h2><ul>"
197
+ spam_list.each do |f|
198
+ data = Comment.load(data_file(f))
199
+ r << "<li>\n#{show_comment(data, f)}\n</li>\n"
200
+ end
201
+ r << "</ul>"
202
+ r << "<input type='hidden' name='conf' value='spambayes'>"
203
+ r << "<input type='hidden' name='sb_mode' value='process_comment'>"
204
+ r
205
+ end
206
+
207
+ def data_file(f)
208
+ raise "InvalidData: #{CGI.escapeHTML(f)}" unless /^O?[SHD]\d+[a-z0-9]+$/ =~ f
209
+ "#{bayes_cache}/#{f}"
210
+ end
211
+
212
+ def register_data(f, type)
213
+ require "fileutils"
214
+ case type
215
+ when :ham
216
+ prefix = "H"
217
+ when :spam
218
+ prefix = "S"
219
+ else
220
+ prefix = "D"
221
+ end
222
+ if RE_FILENAME =~ f
223
+ new_name = "#{corpus_path}/#{prefix}#{f[/^[SHD](#{RE_FILENAME_BODY})$/o, 1]}"
224
+ FileUtils.mv(data_file(f), new_name)
225
+ end
226
+ end
227
+
228
+ def process_comment
229
+ return "" unless save_mode?
230
+ @cgi.params.each do |k, v|
231
+ next unless k=~/^[SHD]\d+[a-z0-9]+$/
232
+ v = v[0]
233
+ data = Comment.load(data_file(k))
234
+ case v
235
+ when "spam"
236
+ add_spam(data)
237
+ when "ham"
238
+ add_ham(data, k !~ RE_HAM_FILE)
239
+ else
240
+ raise "INVALID VALUE:#{k}"
241
+ end
242
+ register_data(k, v=="spam" ? :spam : :ham)
243
+ end
244
+ @cgi.params.keys.select{|k| k=~/\Aprocess_[SHD]\d+[a-z0-9]+\z/}.each do |k|
245
+ FileUtils.rm_f(data_file(k[/^process_(.*)$/, 1]))
246
+ end
247
+
248
+ save_db
249
+
250
+ "<p>#{Res.comment_processed}</p><hr>"
251
+ end
252
+
253
+ def comment_date(data)
254
+ data.diary_date.strftime("%Y%m%d")
255
+ end
256
+
257
+ def add_comment(data)
258
+ comment = ::TDiary::Comment.new(data.name, data.mail, data.body, data.date)
259
+ cgi = Struct.new(:params, :referer, :request_method, :remote_addr, :script_name).new("", "", "", "", "")
260
+ cgi.params = Hash.new{[]}.update("name"=>[data.name], "mail"=>[data.mail], "body"=>[data.body], "date"=>[comment_date(data)])
261
+ cgi.remote_addr = data.remote_addr
262
+ io = force_filtering do
263
+ @conf.io_class.new(::TDiary::TDiaryComment.new(cgi, "day.rhtml", @conf))
264
+ end
265
+ io.transaction(data.diary_date) do |diaries|
266
+ diary = diaries[comment_date(data)]
267
+ if diary
268
+ without_filtering do
269
+ diary.add_comment(comment)
270
+ end
271
+ ::TDiary::TDiaryBase::DIRTY_COMMENT
272
+ else
273
+ ::TDiary::TDiaryBase::DIRTY_NONE
274
+ end
275
+ end
276
+ end
277
+
278
+ def token_table(label, tokens, prefix)
279
+ return "" if tokens.empty?
280
+ r = "<h3>#{label}</h3>\n"
281
+ r << "<table border='1'><tr><th>#{Res.token}</th><th>#{Res.probability("Spam")}</th></tr>"
282
+ bf = bayes_filter
283
+ tokens = tokens.sort do |a, b|
284
+ a=prefix+a
285
+ b=prefix+b
286
+ sa = bf.score(a) || 1.1
287
+ sb = bf.score(b) || 1.1
288
+ sa==sb ? a<=>b : sb<=>sa
289
+ end
290
+ tokens.each do |t|
291
+ pt = prefix+t
292
+ r << "<tr><th align='right'>#{t}</th><td>#{bf[pt] ? format("%10.4f", bf[pt]) : "Doubt"}</td></tr>\n"
293
+ end
294
+ r << "</table>"
295
+ end
296
+
297
+ def show_token_list(token_list)
298
+ tl = {}
299
+ token_list.uniq.each do |t|
300
+ k =
301
+ case t
302
+ when /^A (.*)/
303
+ :addr
304
+ when /^M (.*)/
305
+ :mail
306
+ when /^N (.*)/
307
+ :name
308
+ when /^R (.*)/
309
+ :referer
310
+ when /^U (.*)/
311
+ :url
312
+ else
313
+ :body
314
+ end
315
+
316
+ tl[k] ||= []
317
+ tl[k] << ($1 ? $1 : t)
318
+ end
319
+
320
+ r = ""
321
+ [[:body, Res.comment_body_and_keyword, ""],
322
+ [:referer, Res.referer, "R "],
323
+ [:url, Res.url_in_comment, "U "],
324
+ [:name, Res.name, "N "],
325
+ [:mail, Res.mail, "M "],
326
+ [:addr, Res.posted_host_addr, "A "]].each do |i|
327
+ key, label, prefix = i
328
+ r << token_table(label, tl[key]||[], prefix)
329
+ end
330
+ if r.strip.empty?
331
+ Res.no_token_exist
332
+ else
333
+ r
334
+ end
335
+ end
336
+
337
+ def show_db_token_list(type)
338
+ r = "<h2>#{Res.token_list(type.to_s.upcase)}</h2>"
339
+ r << "<p>#{bayes_filter.class.name}</p>"
340
+
341
+ show_token_list(bayes_filter.send(type).keys)
342
+ end
343
+
344
+ def confirm(type)
345
+ r = "<h2>"
346
+ id = @cgi.params["comment_id"][0]
347
+ case type
348
+ when :ham
349
+ r << Res.register_ham
350
+ when :spam
351
+ r << Res.register_spam
352
+ end
353
+ r << "</h2>"
354
+ r << "<input type='hidden' name='sb_mode' value='register_#{type.to_s}'>"
355
+ r << "<input type='hidden' name='comment_id' value='#{id}'>"
356
+ r << "<p><strong>#{Res.execute_after_click_OK}</strong></p>"
357
+ r << "<hr>" << show_comment(Comment.load(data_file(id)))
358
+ end
359
+
360
+ def register(type)
361
+ return "" unless save_mode?
362
+ id = @cgi.params["comment_id"][0]
363
+ data = Comment.load(data_file(id))
364
+ r = ""
365
+ case type
366
+ when :ham
367
+ add_ham(data, true)
368
+ when :spam
369
+ add_spam(data)
370
+ end
371
+ r << Res.registered_as(type)
372
+ save_db
373
+ register_data(id, type)
374
+ r << show_comment(data) << "<hr>"
375
+ end
376
+
377
+ def confirm_rebuild_db
378
+ <<EOT
379
+ <h2>#{Res.rebuild_db_after_click_OK}</h2>
380
+ <input type='hidden' name='sb_mode' value='rebuild_db'>
381
+ EOT
382
+ end
383
+
384
+ def rebuild_db
385
+ return "NotSave" unless save_mode?
386
+
387
+ bayes_filter(true).save
388
+
389
+ r = ""
390
+
391
+ spams = Dir["#{corpus_path}/S*"]
392
+ hams = Dir["#{corpus_path}/H*"]
393
+ all = []
394
+ while spams.size>0 and hams.size>0
395
+ all << spams.shift
396
+ all << hams.shift
397
+ end
398
+ all.concat(spams)
399
+ all.concat(hams)
400
+ all.each do |f|
401
+ n = f[/^#{Regexp.escape("#{corpus_path}/")}(.*)$/, 1]
402
+ next unless RE_FILENAME =~ n
403
+ data = Comment.load(f)
404
+ case n[/^./]
405
+ when "S"
406
+ add_spam(data)
407
+ when "H"
408
+ add_ham(data)
409
+ end
410
+ end
411
+
412
+ PStore.new(referer_corpus).transaction(true) do |db|
413
+ (db["spam"]||[]).each do |ref|
414
+ add_spam(ref)
415
+ end
416
+ (db["ham"]||[]).each do |ref|
417
+ add_ham(ref)
418
+ end
419
+ end
420
+
421
+ bayes_filter.save
422
+ ""
423
+ end
424
+
425
+ def show_referer_list(referer_list, type)
426
+ h = "r"+type[0, 1]
427
+
428
+ r = "<h3>#{type.upcase}</h3>\n"
429
+ r << "<ul>\n"
430
+ referer_list.uniq.sort.each do |l|
431
+ r << "<li>#{l.viewable_html}<br>\n"
432
+ r << "from #{l.remote_addr}<br>\n"
433
+ rate = bayes_filter.estimate(l.token)
434
+ r << "#{Res.spam_rate} : #{rate}<br>\n" if rate
435
+ r << "<input type='radio' name='#{h}#{l.to_html}' id='H#{h}#{l.to_html}' value='ham'><label for='H#{h}#{l.to_html}'>#{Res.register_ham}</label><br>\n"
436
+ r << "<input type='radio' name='#{h}#{l.to_html}' id='S#{h}#{l.to_html}' value='spam'><label for='S#{h}#{l.to_html}'>#{Res.register_spam}</label><br>\n"
437
+ r << "<a href='#{update_url}?conf=spambayes;sb_mode=show_referer_token;referer=#{l.to_link}'>token</a>"
438
+ r << "</li>"
439
+ end
440
+ r << "</ul>\n"
441
+ r << "<input type='hidden' name='#{type[0, 1]}size' value='#{referer_list.size}'>\n"
442
+ end
443
+
444
+ def show_all_referer
445
+ r = ""
446
+ spams = Referer.load_list(referer_cache("spam"))
447
+ hams = Referer.load_list(referer_cache("ham"))
448
+ doubts = Referer.load_list(referer_cache("doubt"))
449
+
450
+ r << show_referer_list(hams, "ham")
451
+ r << show_referer_list(spams, "spam")
452
+ r << show_referer_list(doubts, "doubt")
453
+ r << "<input type='hidden' name='sb_mode' value='process_referer'>\n"
454
+ end
455
+
456
+ def process_referer
457
+ return "" unless save_mode?
458
+ spams = []
459
+ hams = []
460
+ @cgi.params.each do |k, v|
461
+ next unless k=~/^r([shd])(.*)$/
462
+ type = $1
463
+ referer = Referer.from_html($2)
464
+ v = v[0]
465
+ case v
466
+ when "spam"
467
+ add_spam(referer) if type=~/^[dh]/
468
+ spams << referer
469
+ when "ham"
470
+ add_ham(referer) if type=~/^[ds]/
471
+ hams << referer
472
+ end
473
+ end
474
+
475
+ bayes_filter.save
476
+ ["ham", "spam", "doubt"].each do |k|
477
+ size = (@cgi.params[k[0, 1]+"size"][0]||"0").to_i
478
+ Referer.truncate_list(referer_cache(k), size)
479
+ end
480
+
481
+ PStore.new(referer_corpus).transaction do |db|
482
+ spams.concat(db['spam']||[])
483
+ hams.concat(db['ham']||[])
484
+ db["spam"] = spams.uniq
485
+ db["ham"] = hams.uniq
486
+ end
487
+
488
+ "<p>#{Res.processed_referer}</p><hr>"
489
+ end
490
+
491
+ def show_comment_token
492
+ c = Comment.load(data_file(@cgi.params["comment_id"][0]))
493
+ show_token_list(c.token)
494
+ end
495
+
496
+ def show_referer_token
497
+ ref = Referer.from_html(@cgi.params["referer"][0]||"")
498
+ url = CGI.escapeHTML(ref.referer)
499
+ "<a href='#{url}'>#{url}</a>"+show_token_list(ref.token)
500
+ end
501
+ end
@@ -0,0 +1,9 @@
1
+ # zh/iplookup.rb
2
+ #
3
+ # Copyright (c) 2005 SHIBATA Hiroshi <h-sbt@nifty.com>
4
+ # Distributed under the GPL
5
+
6
+ @iplookup_label = 'IP Blacklist'
7
+
8
+ @iplookup_ip_label = 'IP Blacklist Services'
9
+ @iplookup_ip_label_desc = 'List of IP Blacklist Services'
@@ -0,0 +1,36 @@
1
+ # rblcheck.rb
2
+ # Copyright (c) 2004 MoonWolf <moonwolf@moonwolf.com>
3
+ # Distributed under the GPL
4
+ #
5
+ # options:
6
+ # @options['rblcheck.list'] = [
7
+ # 'bl.moonwollf.com', # RBL list
8
+ # ]
9
+ require 'socket'
10
+
11
+ module TDiary
12
+ module Filter
13
+ class RblcheckFilter < Filter
14
+ alias :_filter :referer_filter
15
+ alias :_filter :comment_filter
16
+
17
+ private
18
+
19
+ def _filter( *args )
20
+ rev_addr = @cgi.remote_addr.split(".").reverse.join(".")
21
+ @conf['rblcheck.list'].each {|rbl|
22
+ addr = "#{rev_addr}.#{rbl}"
23
+ begin
24
+ host = Socket.getaddrinfo(addr, "http")[0][3]
25
+ case host
26
+ when "127.0.0.2"
27
+ return false
28
+ end
29
+ rescue SocketError
30
+ end
31
+ }
32
+ true
33
+ end
34
+ end
35
+ end
36
+ end