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,445 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ #
4
+ # $Id$
5
+ #
6
+ # Copyright (C) 2003,2004 Minero Aoki <aamine@loveruby.net>
7
+ #
8
+ # This program is free software.
9
+ # You can distribute/modify this program under the terms of
10
+ # the GNU LGPL, Lesser General Public License version 2.1.
11
+ #
12
+
13
+ TDIARY_DATA_PATH = nil
14
+ CGI_URL = './'
15
+ LOGGING = true
16
+ DEBUG = $DEBUG
17
+
18
+ #
19
+ # HTML Templates
20
+ #
21
+
22
+ def unindent(str, n)
23
+ str.gsub(/^ {0,#{n}}/, '')
24
+ end
25
+
26
+ HEADER = unindent(<<-'EOS', 2)
27
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
28
+ <html lang="ja-JP">
29
+ <head>
30
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
31
+ <meta http-equiv="Content-Language" content="ja-JP">
32
+ <meta name="robots" content="none">
33
+ <title>tDiary Grep</title>
34
+ </head>
35
+ <body>
36
+ EOS
37
+
38
+ FOOTER = unindent(<<'EOS', 2)
39
+ </body>
40
+ </html>
41
+ EOS
42
+
43
+ SEARCH_FORM = unindent(<<"EOS", 2)
44
+ <form method="post" action="#{File.basename(__FILE__)}">
45
+ <p>% fgrep -i '<input type="text" name="q" size="20" value="">' */*.td2
46
+ <input type="submit" value="Return"></p>
47
+ </form>
48
+ EOS
49
+
50
+ SEARCH_RESULT = unindent(<<-'EOS', 2) + SEARCH_FORM
51
+ <pre>
52
+ % fgrep -i '<%= patterns.map {|re| escape(re.source) }.join(' ') %>' */*.td2
53
+ <%
54
+ toomanyhits = match_sections(patterns) {|section|
55
+ %><a href="<%= section.url %>"><%= format_date(section.date)
56
+ %></a>: <%= escape(section.short_text) %>
57
+ <%
58
+ }
59
+ %><%= toomanyhits ? 'too many hits.' : ''
60
+ %></pre>
61
+ EOS
62
+
63
+ SEARCH_ERROR = unindent(<<'EOS', 2) + SEARCH_FORM
64
+ <pre>
65
+ % fgrep -i '<%= escape(query) %>' */*.td2
66
+ <%= escape(reason) %>.
67
+ </pre>
68
+ EOS
69
+
70
+ HISTORY = unindent(<<"EOS", 2)
71
+ <pre>
72
+ <%
73
+ cmd = ['ls', 'cd .', 'cvsdiffl', 'ps -ef', 'w', './configure --help',
74
+ 'date', 'make', 'echo $?', 'vi log', 'jobs', 'cvs up', 'who']
75
+ recent_queries.sort_by {|t,q| t }.each do |time, query|
76
+ n = rand(100)
77
+ if n < cmd.size
78
+ %><%= time.to_i - 10 %>: <%= cmd[n] %>
79
+ <% end
80
+ %><%= time.to_i %>: fgrep -i '<a href="#{File.basename(__FILE__)}?q=<%= escape_url(query) %>"><%= escape(query) %></a>' */*.td2
81
+ <%
82
+ end
83
+ %></pre>
84
+ #{SEARCH_FORM}
85
+ EOS
86
+
87
+ #
88
+ # Load Libraries
89
+ #
90
+
91
+ require 'cgi'
92
+
93
+ class CGI
94
+ def valid?(name)
95
+ self.params[name] and self.params[name][0]
96
+ end
97
+ end
98
+
99
+ require 'erb'
100
+ require 'uri'
101
+
102
+ # borrowed from tdiary
103
+ require 'nkf'
104
+ begin
105
+ require 'uconv'
106
+
107
+ def Uconv.unknown_unicode_handler(unicode)
108
+ if unicode == 0xff5e
109
+ "~"
110
+ else
111
+ raise Uconv::Error
112
+ end
113
+ end
114
+
115
+ def to_euc(str)
116
+ begin
117
+ Uconv.u8toeuc(str)
118
+ rescue Uconv::Error
119
+ NKF::nkf('-w -m0', str)
120
+ end
121
+ end
122
+ rescue LoadError
123
+ def to_euc(str)
124
+ NKF::nkf('-w -m0', str)
125
+ end
126
+ end
127
+
128
+ #
129
+ # Main
130
+ #
131
+
132
+ class TDiaryGrepError < StandardError; end
133
+ class WrongQuery < TDiaryGrepError; end
134
+ class InvalidTDiaryFormat < TDiaryGrepError; end
135
+ class ConfigError < TDiaryGrepError; end
136
+
137
+ Z_SPACE = " " # zen-kaku space
138
+
139
+ BEGIN { $stdout.binmode }
140
+
141
+ def main
142
+ cgi = CGI.new
143
+ html = '<html><head><title></title></head><body><p>error</p></body></html>'
144
+ begin
145
+ html = generate_page(cgi)
146
+ ensure
147
+ send_html cgi, html
148
+ end
149
+ exit 0
150
+ end
151
+
152
+ def generate_page(cgi)
153
+ query = nil
154
+ begin
155
+ begin
156
+ if LOGGING and File.file?(query_log()) and cgi.valid?('history')
157
+ return history_page()
158
+ elsif not cgi.valid?('q')
159
+ return search_form_page()
160
+ else
161
+ query = [cgi.params['q']].compact.flatten.join(' ')
162
+ html = search_result_page(setup_patterns(query))
163
+ save_query(query, query_log()) if LOGGING
164
+ return html
165
+ end
166
+ rescue WrongQuery => err
167
+ return search_error_page(query, err.message)
168
+ end
169
+ rescue Exception => err
170
+ html = ''
171
+ html << HEADER
172
+ html << "<pre>\n"
173
+ html << 'q=' << escape(query) << "\n" if query
174
+ html << escape(err.class.name) << "\n" if DEBUG
175
+ html << escape(err.message) << "\n"
176
+ html << err.backtrace.map {|i| escape(i) }.join("\n") if DEBUG
177
+ html << "</pre>\n"
178
+ html << FOOTER
179
+ return html
180
+ end
181
+ end
182
+
183
+ def send_html(cgi, html)
184
+ print cgi.header('status' => '200 OK',
185
+ 'type' => 'text/html',
186
+ 'charset' => 'UTF-8',
187
+ 'Content-Length' => html.length.to_s,
188
+ 'Cache-Control' => 'no-cache',
189
+ 'Pragma' => 'no-cache')
190
+ print html unless cgi.request_method == 'HEAD'
191
+ end
192
+
193
+ def setup_patterns(query)
194
+ patterns = split_string(query).map {|pat|
195
+ check_pattern pat
196
+ /#{Regexp.quote(pat)}/iu
197
+ }
198
+ raise WrongQuery, 'no pattern' if patterns.empty?
199
+ raise WrongQuery, 'too many sub patterns' if patterns.length > 8
200
+ patterns
201
+ end
202
+
203
+ def check_pattern(pat)
204
+ raise WrongQuery, 'no pattern' unless pat
205
+ raise WrongQuery, 'empty pattern' if pat.empty?
206
+ raise WrongQuery, "pattern too short: #{pat}" if pat.length < 2
207
+ raise WrongQuery, 'pattern too long' if pat.length > 128
208
+ end
209
+
210
+ def split_string(str)
211
+ str.split(/[\s#{Z_SPACE}]+/ou).reject {|w| w.empty? }
212
+ end
213
+
214
+ def save_query(query, file)
215
+ File.open(file, 'a') {|f|
216
+ begin
217
+ f.flock(File::LOCK_EX)
218
+ f.puts "#{Time.now.to_i}: #{query.dump}"
219
+ ensure
220
+ f.flock(File::LOCK_UN)
221
+ end
222
+ }
223
+ end
224
+
225
+ def read_query_logs(file)
226
+ File.open(file) {|f|
227
+ begin
228
+ f.flock(File::LOCK_SH)
229
+ return f.readlines
230
+ ensure
231
+ f.flock(File::LOCK_UN)
232
+ end
233
+ }
234
+ end
235
+
236
+ def query_log
237
+ "#{tdiary_data_path()}/grep.log"
238
+ end
239
+
240
+ #
241
+ # eRuby Dispatchers and Helper Routines
242
+ #
243
+
244
+ def search_form_page
245
+ patterns = []
246
+ ERB.new(HEADER + SEARCH_FORM + FOOTER).result(binding())
247
+ end
248
+
249
+ def search_result_page(patterns)
250
+ ERB.new(HEADER + SEARCH_RESULT + FOOTER).result(binding())
251
+ end
252
+
253
+ def search_error_page(query, reason)
254
+ ERB.new(HEADER + SEARCH_ERROR + FOOTER).result(binding())
255
+ end
256
+
257
+ def history_page
258
+ patterns = []
259
+ ERB.new(HEADER + HISTORY + FOOTER).result(binding())
260
+ end
261
+
262
+ N_SHOW_QUERY_MAX = 20
263
+
264
+ def recent_queries
265
+ return unless File.file?(query_log())
266
+ read_query_logs(query_log()).reverse[0, N_SHOW_QUERY_MAX].map {|line|
267
+ time, q = *line.split(/:/, 2)
268
+ [Time.at(time.to_i), eval(q)]
269
+ }
270
+ end
271
+
272
+ def format_time(time)
273
+ sprintf('%04d-%02d-%02d %02d:%02d:%02d',
274
+ time.year, time.month, time.day,
275
+ time.hour, time.min, time.sec)
276
+ end
277
+
278
+ def format_date(ymd)
279
+ y, m, d = /\A(\d{4})(\d{2})(\d{2})/.match(ymd).captures
280
+ "#{y}-#{m}-#{d}"
281
+ end
282
+
283
+ TOO_MANY_HITS = 50
284
+
285
+ def match_sections(patterns)
286
+ hit = 0
287
+ match_sections0(patterns) do |section|
288
+ yield section
289
+ hit += 1
290
+ return true if hit > TOO_MANY_HITS
291
+ end
292
+ false
293
+ end
294
+
295
+ def match_sections0(patterns)
296
+ foreach_data_file(tdiary_data_path()) do |path|
297
+ read_diaries(path).sort_by {|diary| diary.date }.reverse_each do |diary|
298
+ diary.each_section do |section|
299
+ yield section if patterns.all? {|re| re =~ section.source }
300
+ end
301
+ end
302
+ end
303
+ end
304
+
305
+ #
306
+ # tDiary Implementation Dependent
307
+ #
308
+
309
+ def foreach_data_file(data_path, &block)
310
+ Dir.glob("#{data_path}/[0-9]*/*.td2").sort.reverse_each(&block)
311
+ end
312
+
313
+ def read_diaries(path)
314
+ diaries = []
315
+ File.open(path, :encoding => 'UTF-8') {|f|
316
+ f.each('') do |header|
317
+ diaries.push Diary.parse(header, f.gets("\n.\n").chomp(".\n"))
318
+ end
319
+ }
320
+ diaries
321
+ end
322
+
323
+ class Diary
324
+ def Diary.parse(header, body)
325
+ ymd = header.slice(/^Date:\s*(\d{4}\d{2}\d{2})/, 1) or
326
+ raise "unexpected tdiary format: Date=nil:\n#{header.strip}"
327
+ format = header.slice(/^Format:\s*(\S+)/, 1) or
328
+ raise "unexpected tdiary format: Format=nil:\n#{header.strip}"
329
+ visible = case header.slice(/^Visible:\s*(\S+)/, 1)
330
+ when 'true' then true
331
+ when 'false' then false
332
+ when nil then true
333
+ else
334
+ raise 'must not happen (parsing Visible:)'
335
+ end
336
+ new(ymd, visible, split_sections(body, format))
337
+ end
338
+
339
+ SPLITTER = {
340
+ 'tdiary' => /\n\n/,
341
+ 'rd' => /^=(?!=)/,
342
+ 'wiki' => /^!/,
343
+ 'blog' => /\n\n/,
344
+ 'blogrd' => /^=(?!=)/,
345
+ 'blogwiki' => /^!/
346
+ }
347
+
348
+ def Diary.split_sections(diary, format)
349
+ re = SPLITTER[format.downcase] or
350
+ raise ArgumentError, "unknown diary format: #{format}"
351
+ diary.strip.split(re)
352
+ end
353
+ private_class_method :split_sections
354
+
355
+ def initialize(ymd, visible, section_texts)
356
+ @date = ymd
357
+ @visible = visible
358
+ @sections = []
359
+ section_texts.each_with_index do |src, idx|
360
+ @sections.push DiarySection.new(self, idx + 1, src)
361
+ end
362
+ end
363
+
364
+ attr_reader :date
365
+
366
+ def each_section(&block)
367
+ return unless @visible
368
+ @sections.each(&block)
369
+ end
370
+ end
371
+
372
+ class DiarySection
373
+ def initialize(day, num, src)
374
+ @day = day
375
+ @number = num
376
+ @source = src
377
+ end
378
+
379
+ def inspect
380
+ "\#<#{self.class} #{@day.date}.#{@number}>"
381
+ end
382
+
383
+ def date
384
+ @day.date
385
+ end
386
+
387
+ def format
388
+ @day.format
389
+ end
390
+
391
+ attr_reader :source
392
+
393
+ def url
394
+ "#{CGI_URL}?date=#{@day.date}\#p#{sprintf('%02d', @number)}"
395
+ end
396
+
397
+ def short_text
398
+ title, body = @source.split(/\n/, 2)
399
+ sprintf('%-30s | %s',
400
+ title.to_s.strip,
401
+ remove_tags(body.to_s).gsub(/[\s#{Z_SPACE}]+/ou, ' ').slice(/\A.{0,60}/mu))
402
+ end
403
+
404
+ private
405
+
406
+ def remove_tags(str)
407
+ str.gsub(/<.*?>|\(\([{|'<]|[>}|']\)\)|\(\(-(?m).*?(?-m)-\)\)/, '')
408
+ end
409
+ end
410
+
411
+ @tdiary_data_path = nil
412
+ def tdiary_data_path
413
+ @tdiary_data_path ||= (TDIARY_DATA_PATH || data_path_config())
414
+ end
415
+
416
+ def data_path_config
417
+ tdiary_conf().slice(/^\s*@data_path\s*=\s*(['"])(.*?)\1/, 2) or
418
+ raise ConfigError, 'cannot get tDiary @data_path'
419
+ end
420
+
421
+ @tdiary_conf = nil
422
+ def tdiary_conf
423
+ @tdiary_conf ||= File.read("#{File.dirname(__FILE__)}/tdiary.conf", :encoding => 'UTF-8')
424
+ end
425
+
426
+ #
427
+ # Utils
428
+ #
429
+
430
+ ESC = {
431
+ '&' => '&amp;',
432
+ '<' => '&lt;',
433
+ '>' => '&gt;',
434
+ '"' => '&quot;'
435
+ }
436
+
437
+ def escape(str)
438
+ str.gsub(/[&"<>]/) {|s| ESC[s] }
439
+ end
440
+
441
+ def escape_url(u)
442
+ escape(URI.encode(u))
443
+ end
444
+
445
+ main
@@ -0,0 +1,130 @@
1
+ ;;; http.el -- utils for HTTP
2
+
3
+ ;; Copyright (C) 2002 Junichiro Kita
4
+
5
+ ;; Author: Junichiro Kita <kita@kitaj.no-ip.com>
6
+
7
+ ;; $Id: http.el,v 1.3 2005/07/20 08:39:56 tadatadashi Exp $
8
+ ;;
9
+ ;; This program is free software; you can redistribute it and/or
10
+ ;; modify it under the terms of the GNU General Public License as
11
+ ;; published by the Free Software Foundation; either version 2, or (at
12
+ ;; your option) any later version.
13
+
14
+ ;; This program is distributed in the hope that it will be useful, but
15
+ ;; WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ ;; General Public License for more details.
18
+
19
+ ;; You should have received a copy of the GNU General Public License
20
+ ;; along with this program; see the file COPYING. If not, write to the
21
+ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22
+ ;; Boston, MA 02111-1307, USA.
23
+
24
+ ;;; Commentary:
25
+
26
+ ;;; Code:
27
+
28
+ (require 'pces)
29
+
30
+ (defvar http-proxy-server nil "Proxy server for HTTP.")
31
+ (defvar http-proxy-port nil "Proxy port for HTTP.")
32
+
33
+ (defvar http-timeout 10
34
+ "Timeout for HTTP.")
35
+
36
+ ;; derived from url.el
37
+ (defconst http-url-unreserved-chars
38
+ '(
39
+ ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z
40
+ ?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z
41
+ ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9
42
+ ?$ ?- ?_ ?. ?! ?~ ?* ?' ?\( ?\) ?,)
43
+ "A list of characters that are _NOT_ reserve in the URL spec.
44
+ This is taken from draft-fielding-url-syntax-02.txt - check your local
45
+ internet drafts directory for a copy.")
46
+
47
+ ;; derived from url.el
48
+ (defun http-url-hexify-string (str coding)
49
+ "Escape characters in a string.
50
+ At first, encode STR using CODING, then url-hexify."
51
+ (mapconcat
52
+ (function
53
+ (lambda (char)
54
+ (if (not (memq char http-url-unreserved-chars))
55
+ (if (< char 16)
56
+ (upcase (format "%%0%x" char))
57
+ (upcase (format "%%%x" char)))
58
+ (char-to-string char))))
59
+ (encode-coding-string str coding) ""))
60
+
61
+ (defvar http-fetch-terminator "</body>"
62
+ "content body end mark.")
63
+ (defun http-fetch (url method &optional user pass data)
64
+ "Fetch via HTTP.
65
+
66
+ URL is a url to be POSTed.
67
+ METHOD is 'get or 'post.
68
+ USER and PASS must be a valid username and password, if required.
69
+ DATA is an alist, each element is in the form of (FIELD . DATA).
70
+
71
+ If no error, return a buffer which contains output from the web server.
72
+ If error, return a cons cell (ERRCODE . DESCRIPTION)."
73
+ (let (connection server port path buf str len)
74
+ (string-match "^http://\\([^/:]+\\)\\(:\\([0-9]+\\)\\)?\\(/.*$\\)" url)
75
+ (setq server (match-string 1 url)
76
+ port (string-to-int (or (match-string 3 url) "80"))
77
+ path (if http-proxy-server url (match-string 4 url)))
78
+ (setq str (mapconcat
79
+ '(lambda (x)
80
+ (concat (car x) "=" (cdr x)))
81
+ data "&"))
82
+ (setq len (length str))
83
+ (save-excursion
84
+ (setq buf (get-buffer-create (concat "*result from " server "*")))
85
+ (set-buffer buf)
86
+ (erase-buffer)
87
+ (setq connection
88
+ (as-binary-process
89
+ (open-network-stream (concat "*request to " server "*")
90
+ buf
91
+ (or http-proxy-server server)
92
+ (or http-proxy-port port))))
93
+ (process-send-string
94
+ connection
95
+ (concat (if (eq method 'post)
96
+ (concat "POST " path)
97
+ (concat "GET " path (if (> len 0)
98
+ (concat "?" str))))
99
+ " HTTP/1.0\r\n"
100
+ (concat "Host: " server "\r\n")
101
+ "Connection: close\r\n"
102
+ "Referer: " url "\r\n"
103
+ "Content-type: application/x-www-form-urlencoded\r\n"
104
+ (if (and user pass)
105
+ (concat "Authorization: Basic "
106
+ (base64-encode-string
107
+ (concat user ":" pass))
108
+ "\r\n"))
109
+ (if (eq method 'post)
110
+ (concat "Content-length: " (int-to-string len) "\r\n"
111
+ "\r\n"
112
+ str))
113
+ "\r\n"))
114
+ (goto-char (point-min))
115
+ (while (not (search-forward http-fetch-terminator nil t))
116
+ (unless (accept-process-output connection http-timeout)
117
+ (error "HTTP fetch: Connection timeout!"))
118
+ (goto-char (point-min)))
119
+ (goto-char (point-min))
120
+ (save-excursion
121
+ (if (re-search-forward "HTTP/1.[01] \\([0-9][0-9][0-9]\\) \\(.*\\)" nil t)
122
+ (let ((code (match-string 1))
123
+ (desc (match-string 2)))
124
+ (cond ((equal code "200")
125
+ buf)
126
+ (t
127
+ (cons code desc)))))))))
128
+
129
+ (provide 'http)
130
+ ;;; http.el ends here