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,504 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # tdiarysearch
4
+ #
5
+ # Copyright (C) 2003-2005 Minero Aoki
6
+ #
7
+ # This program is free software.
8
+ # You can distribute/modify this program under the terms of
9
+ # the GNU GPL, General Public License version 2.
10
+ #
11
+ # $originalId: search.rb,v 1.14 2005/07/27 07:16:07 aamine Exp $
12
+ #
13
+ # Project home page: http://i.loveruby.net/w/tdiarysearch.html
14
+ #
15
+
16
+ #
17
+ # Static Configurations
18
+ #
19
+
20
+ LOGGING = false
21
+ LOGFILE_NAME = 'search.log'
22
+ DEBUG = $DEBUG
23
+
24
+ #
25
+ # HTML Templates
26
+ #
27
+
28
+ def unindent(str)
29
+ str.gsub(/^#{str[/\A(?:\t+| +)/]}/, '')
30
+ end
31
+
32
+ HEADER = unindent <<'EOS'
33
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
34
+ <html lang="ja">
35
+ <head>
36
+ <meta http-equiv="Content-Type" content="text/html; charset=<%= TDIARY_ENCODING %>">
37
+ <meta http-equiv="Content-Language" content="ja">
38
+ <meta name="robots" content="noindex">
39
+ <link rel="stylesheet" href="theme/base.css" type="text/css" media="all">
40
+ <link rel="stylesheet" href="theme/<%= theme %>/<%= theme %>.css" title="<%= theme %>" type="text/css" media="all">
41
+ <title>tDiary Search</title>
42
+ </head>
43
+ <body>
44
+ <div class="whole-content">
45
+ EOS
46
+
47
+ FOOTER = unindent <<'EOS'
48
+ </div>
49
+ </body>
50
+ </html>
51
+ EOS
52
+
53
+ SEARCH_FORM = unindent <<"EOS"
54
+ <form method="post" action="#{File.basename(__FILE__)}">
55
+ <input type="text" name="q" size="20" value="<%= patterns.map {|re| escape(re.source) }.join(' ') %>">
56
+ <input type="submit" value="Search">
57
+ <%
58
+ if theme
59
+ %><input type="hidden" name="theme" value="on"><%
60
+ end
61
+ %>
62
+ </form>
63
+ EOS
64
+
65
+ SEARCH_PAGE = unindent <<"EOS"
66
+ <h1>tDiary Search</h1>
67
+ #{SEARCH_FORM}
68
+ EOS
69
+
70
+ TOO_MANY_HITS = 50
71
+
72
+ SEARCH_RESULT = unindent <<"EOS"
73
+ <h1>tDiary Search: Search Result</h1>
74
+ #{SEARCH_FORM}
75
+ <%
76
+ nhits = 0
77
+ toomanyhits = false
78
+ match_components(patterns) {|diary, fragment, component|
79
+ nhits += 1
80
+ if nhits > TOO_MANY_HITS
81
+ toomanyhits = true
82
+ break
83
+ end
84
+ %>
85
+ <div class="day">
86
+ <h2><a href="<%= url(diary, fragment) %>"><%= diary.y_m_d %></a></h2>
87
+ <div class="body">
88
+ <div class="section">
89
+ <p><%= short_html(component) %></p>
90
+ </div>
91
+ </div>
92
+ </div><%
93
+ }
94
+ %>
95
+ <p><%= toomanyhits ? 'too many hits.' : nhits.to_s+' hits.' %></p>
96
+ #{SEARCH_FORM}
97
+ EOS
98
+
99
+ SEARCH_ERROR = unindent <<"EOS"
100
+ #{SEARCH_FORM}
101
+ <%= escape(reason) %>.
102
+ EOS
103
+
104
+ HISTORY = unindent <<"EOS"
105
+ <h1>tDiary Search: Search History</h1>
106
+ #{SEARCH_FORM}
107
+ <ul>
108
+ <%
109
+ recent_queries.sort_by {|t,q| -t.to_i }.each do |time, query|
110
+ %><li><%= time.strftime('%Y-%m-%d %H:%M:%S') %> | <a href="#{File.basename(__FILE__)}?q=<%= escape_url(query) %>"><%= escape(query) %></a></li>
111
+ <%
112
+ end
113
+ %></ul>
114
+ #{SEARCH_FORM}
115
+ EOS
116
+
117
+ #
118
+ # Main
119
+ #
120
+
121
+ if File.symlink?(__FILE__)
122
+ tdiarylib = File.dirname(File.readlink(__FILE__))
123
+ else
124
+ tdiarylib = File.dirname(__FILE__)
125
+ end
126
+ $:.unshift tdiarylib
127
+ require 'tdiary'
128
+ require 'tdiary/io/default'
129
+ require 'erb'
130
+
131
+ TDIARY_ENCODING = (TDIARY_VERSION >= '2.3.0') ? 'utf-8' : 'euc-jp'
132
+
133
+ class WrongQuery < StandardError; end
134
+
135
+ Z_SPACE = "\241\241" # zen-kaku space
136
+
137
+ BEGIN { $stdout.binmode }
138
+
139
+ def main
140
+ $KCODE = TDIARY_ENCODING
141
+ cgi = CGI.new
142
+ @config = TDiary::Config.new(cgi)
143
+ @config.options['apply_plugin'] = true
144
+ html = '<html><head><title></title></head><body><p>error</p></body></html>'
145
+ begin
146
+ html = generate_page(cgi)
147
+ ensure
148
+ send_html cgi, html
149
+ end
150
+ exit 0
151
+ end
152
+
153
+ def generate_page(cgi)
154
+ query = nil
155
+ begin
156
+ theme = @config.theme
157
+ if LOGGING and File.file?(query_log()) and cgi.valid?('history')
158
+ return history_page(theme)
159
+ end
160
+ begin
161
+ return search_form_page(theme) unless cgi.valid?('q')
162
+ initialize_tdiary_plugins cgi
163
+ query = @config.to_native([cgi.params['q']].flatten.compact.join(' '))
164
+ patterns = setup_patterns(query)
165
+ html = search_result_page(theme, patterns)
166
+ save_query(query, query_log()) if LOGGING
167
+ return html
168
+ rescue WrongQuery => err
169
+ return search_error_page(theme, (patterns || []), err.message)
170
+ end
171
+ rescue Exception => err
172
+ html = ''
173
+ html << HEADER
174
+ html << "<pre>\n"
175
+ html << 'q=' << escape(query) << "\n" if query
176
+ html << escape(err.class.name) << "\n" if DEBUG
177
+ html << escape(err.message) << "\n"
178
+ html << err.backtrace.map {|i| escape(i) }.join("\n") if DEBUG
179
+ html << "</pre>\n"
180
+ html << FOOTER
181
+ return html
182
+ end
183
+ end
184
+
185
+ def send_html(cgi, html)
186
+ print cgi.header('status' => '200 OK',
187
+ 'type' => 'text/html',
188
+ 'charset' => TDIARY_ENCODING,
189
+ 'Content-Length' => html.length.to_s,
190
+ 'Cache-Control' => 'no-cache',
191
+ 'Pragma' => 'no-cache')
192
+ print html unless cgi.request_method == 'HEAD'
193
+ end
194
+
195
+ def setup_patterns(query)
196
+ patterns = split_string(query).map {|pat|
197
+ check_pattern pat
198
+ Regexp.new( Regexp.quote(pat), Regexp::IGNORECASE, TDIARY_ENCODING )
199
+ }
200
+ raise WrongQuery, 'no pattern' if patterns.empty?
201
+ raise WrongQuery, 'too many sub patterns' if patterns.length > 8
202
+ patterns
203
+ end
204
+
205
+ def check_pattern(pat)
206
+ raise WrongQuery, 'no pattern' unless pat
207
+ raise WrongQuery, 'empty pattern' if pat.empty?
208
+ raise WrongQuery, "pattern too short: #{pat}" if pat.length < 2
209
+ raise WrongQuery, 'pattern too long' if pat.length > 128
210
+ end
211
+
212
+ def split_string(str)
213
+ str.split(/[\s#{Z_SPACE}]+/ou).reject {|w| w.empty? }
214
+ end
215
+
216
+ def save_query(query, file)
217
+ File.open(file, 'a') {|f|
218
+ begin
219
+ f.flock(File::LOCK_EX)
220
+ f.puts "#{Time.now.to_i}: #{query.dump}"
221
+ ensure
222
+ f.flock(File::LOCK_UN)
223
+ end
224
+ }
225
+ end
226
+
227
+ #
228
+ # eRuby Dispatchers and Helper Routines
229
+ #
230
+
231
+ def search_form_page(theme)
232
+ patterns = []
233
+ ERB.new(HEADER + SEARCH_FORM + FOOTER).result(binding())
234
+ end
235
+
236
+ def search_result_page(theme, patterns)
237
+ ERB.new(HEADER + SEARCH_RESULT + FOOTER).result(binding())
238
+ end
239
+
240
+ def search_error_page(theme, patterns, reason)
241
+ ERB.new(HEADER + SEARCH_ERROR + FOOTER).result(binding())
242
+ end
243
+
244
+ def history_page(theme)
245
+ patterns = []
246
+ ERB.new(HEADER + HISTORY + FOOTER).result(binding())
247
+ end
248
+
249
+ def query_log
250
+ "#{@config.data_path}#{LOGFILE_NAME}"
251
+ end
252
+
253
+ N_SHOW_QUERY_MAX = 20
254
+
255
+ def recent_queries
256
+ return unless File.file?(query_log())
257
+ File.readlines(query_log()).reverse[0, N_SHOW_QUERY_MAX].map {|line|
258
+ time, q = *line.split(/:/, 2)
259
+ [Time.at(time.to_i), eval(q)]
260
+ }
261
+ end
262
+
263
+ INF = 1 / 0.0
264
+
265
+ def match_components(patterns)
266
+ foreach_diary_from_latest do |diary|
267
+ next unless diary.visible?
268
+ num = 1
269
+ diary.each_section do |sec|
270
+ if patterns.all? {|re| re =~ sec.to_src }
271
+ yield diary, fragment('p', num), sec
272
+ end
273
+ num += 1
274
+ end
275
+ diary.each_visible_comment(INF) do |cmt, num|
276
+ if patterns.all? {|re| re =~ cmt.body }
277
+ yield diary, fragment('c', num), cmt
278
+ end
279
+ end
280
+ end
281
+ end
282
+
283
+ def fragment(type, num)
284
+ sprintf('%s%02d', type, num)
285
+ end
286
+
287
+ #
288
+ # tDiary Implementation Dependent
289
+ #
290
+
291
+ def foreach_diary_from_latest(&block)
292
+ foreach_data_file(@config.data_path.sub(%r</+\z>, '')) do |path|
293
+ read_diaries(path).sort_by {|diary| diary.date }.reverse_each(&block)
294
+ end
295
+ end
296
+
297
+ def foreach_data_file(data_path, &block)
298
+ Dir.glob("#{data_path}/[0-9]*/*.td2").sort.reverse_each do |path|
299
+ yield path.untaint
300
+ end
301
+ end
302
+
303
+ def read_diaries(path)
304
+ d = nil
305
+ diaries = {}
306
+ load_tdiary_textdb(path) do |header, body|
307
+ d = diary_class(header['Format']).new(header['Date'], '', body)
308
+ d.show(header['Visible'] != 'false')
309
+ diaries[d.ymd] = d
310
+ end
311
+ (Years[d.y] ||= []).push(d.m) if d
312
+ load_comments diaries, path
313
+ diaries.values
314
+ end
315
+
316
+ DIARY_CLASS_CACHE = {}
317
+
318
+ def diary_class(style)
319
+ c = DIARY_CLASS_CACHE[style]
320
+ return c if c
321
+ require "tdiary/style/#{style.downcase}_style.rb"
322
+ c = eval("TDiary::#{style.capitalize}Diary")
323
+ c.__send__(:include, DiaryClassDelta)
324
+ DIARY_CLASS_CACHE[style] = c
325
+ c
326
+ end
327
+
328
+ module DiaryClassDelta
329
+ def ymd
330
+ date().strftime('%Y%m%d')
331
+ end
332
+
333
+ def y_m_d
334
+ date().strftime('%Y-%m-%d')
335
+ end
336
+
337
+ def y
338
+ '%04d' % date().year
339
+ end
340
+
341
+ def m
342
+ '%02d' % date().month
343
+ end
344
+ end
345
+
346
+ def load_comments(diaries, path)
347
+ cmtfile = path.sub(/2\z/, 'c')
348
+ return unless File.file?(cmtfile)
349
+ load_tdiary_textdb(cmtfile) do |header, body|
350
+ c = TDiary::Comment.new(header['Name'], header['Mail'], body,
351
+ Time.at(header['Last-Modified'].to_i))
352
+ c.show = (header['Visible'] != 'false')
353
+ d = diaries[header['Date']]
354
+ d.add_comment c if d
355
+ end
356
+ end
357
+
358
+ def load_tdiary_textdb(path)
359
+ File.open(path) {|f|
360
+ ver = f.gets.strip
361
+ raise "unkwnown format: #{ver}" unless ver == 'TDIARY2.00.00' or ver == 'TDIARY2.01.00'
362
+ f.each('') do |header|
363
+ h = {}
364
+ header.untaint.strip.each do |line|
365
+ n, v = *line.split(':', 2)
366
+ h[n.strip] = v.strip
367
+ end
368
+ yield h, f.gets("\n.\n").chomp(".\n").untaint
369
+ end
370
+ }
371
+ end
372
+
373
+ def short_html(component)
374
+ # Section classes do not have common superclass, we can't use class here.
375
+ case component.class.name
376
+ when /Section/
377
+ section = component
378
+ if section.subtitle
379
+ sprintf('%s<br>%s',
380
+ tdiary2text(section.subtitle_to_html),
381
+ tdiary2text(section.body_to_html))
382
+ else
383
+ tdiary2text(section.body_to_html)
384
+ end
385
+ when /Comment/
386
+ cmt = component
387
+ shorten(escape((cmt.name + ': ' + cmt.body)))
388
+ else
389
+ raise "must not happen: #{component.class}"
390
+ end
391
+ end
392
+
393
+ def tdiary2text(html)
394
+ re = Regexp.new('<[^>]*>', Regexp::EXTENDED, TDIARY_ENCODING)
395
+ shorten(apply_tdiary_plugins(html).gsub(re, ''))
396
+ end
397
+
398
+ Years = {}
399
+
400
+ TDiary::Plugin.__send__(:public, :apply_plugin)
401
+ def apply_tdiary_plugins(html)
402
+ @plugin.apply_plugin(html, false)
403
+ end
404
+
405
+ @plugin = nil
406
+
407
+ def initialize_tdiary_plugins(cgi)
408
+ @plugin = TDiary::Plugin.new('conf' => @config,
409
+ 'secure' => false,
410
+ 'diaries' => {},
411
+ 'cgi' => cgi,
412
+ 'index' => @config.index,
413
+ 'years' => Years,
414
+ 'cache_path' => @config.cache_path ||
415
+ @config.data_path)
416
+ end
417
+
418
+ #
419
+ # Utils
420
+ #
421
+
422
+ HTML_ESCAPE_TABLE = {
423
+ '&' => '&amp;',
424
+ '<' => '&lt;',
425
+ '>' => '&gt;',
426
+ '"' => '&quot;'
427
+ }
428
+
429
+ def escape(str)
430
+ tbl = HTML_ESCAPE_TABLE
431
+ str.gsub(/[&"<>]/) {|ch| tbl[ch] }
432
+ end
433
+
434
+ def escape_url(u)
435
+ escape(urlencode(u))
436
+ end
437
+
438
+ def urlencode(str)
439
+ str.gsub(/[^\w-]/n) {|ch| sprintf('%%%02x', ch[0]) }
440
+ end
441
+
442
+ def shorten(str)
443
+ re = Regexp.new('\A.{0,120}', Regexp::MULTILINE, TDIARY_ENCODING)
444
+ str.slice(re)
445
+ end
446
+
447
+ def url(diary, fragment)
448
+ if ( html_anchor_enabled? )
449
+ "#{@config.index}#{diary.ymd}.html\##{fragment}"
450
+ else
451
+ "#{@config.index}?date=#{diary.ymd}\##{fragment}"
452
+ end
453
+ end
454
+
455
+ def html_anchor_enabled?
456
+ if ( @html_anchor.nil? )
457
+ @html_anchor = @config.options2['sp.selected'].include?( 'html_anchor.rb' )
458
+ end
459
+
460
+ return @html_anchor
461
+ end
462
+
463
+ #
464
+ # Old Ruby Compatibility
465
+ #
466
+
467
+ if RUBY_VERSION < '1.8.0'
468
+ class String
469
+ remove_method :slice
470
+ def slice(re, n = 0)
471
+ m = re.match(self) or return nil
472
+ m[n]
473
+ end
474
+ end
475
+ end
476
+
477
+ unless Array.method_defined?(:all?)
478
+ module Enumerable
479
+ def all?
480
+ each do |i|
481
+ return false unless yield(i)
482
+ end
483
+ true
484
+ end
485
+ end
486
+ end
487
+
488
+ unless Array.method_defined?(:sort_by)
489
+ module Enumerable
490
+ def sort_by
491
+ map {|i| [yield(i), i] }.sort.map {|val, i| i }
492
+ end
493
+ end
494
+ end
495
+
496
+ unless MatchData.method_defined?(:captures)
497
+ class MatchData
498
+ def captures
499
+ to_a()[1..-1]
500
+ end
501
+ end
502
+ end
503
+
504
+ main