tdiary-contrib 3.2.2.20130518

Sign up to get free protection for your applications and to get access to all the features.
Files changed (393) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +13 -0
  5. data/Gemfile.lock +35 -0
  6. data/README.en.md +12 -0
  7. data/README.md +13 -0
  8. data/Rakefile +41 -0
  9. data/doc/en/filter/spambayes.txt +3 -0
  10. data/doc/en/plugin.txt +1 -0
  11. data/doc/en/style/hatena.txt +10 -0
  12. data/doc/en/style/markdown.txt +16 -0
  13. data/doc/en/util.txt +1 -0
  14. data/doc/ja/filter/antirefspam.history.txt +59 -0
  15. data/doc/ja/filter/antirefspam.txt +86 -0
  16. data/doc/ja/filter/comment_key.ja.html +182 -0
  17. data/doc/ja/filter/spambayes.txt +3 -0
  18. data/doc/ja/plugin/add_bookmark.txt +50 -0
  19. data/doc/ja/plugin/category_to_tag.txt +21 -0
  20. data/doc/ja/plugin/cocoment.txt +31 -0
  21. data/doc/ja/plugin/google_adsense.txt +25 -0
  22. data/doc/ja/plugin/google_analytics.txt +7 -0
  23. data/doc/ja/plugin/image_detail.txt +69 -0
  24. data/doc/ja/plugin/image_gps.txt +36 -0
  25. data/doc/ja/plugin/image_gps2.txt +41 -0
  26. data/doc/ja/plugin/livedoor_weather.txt +105 -0
  27. data/doc/ja/plugin/opensearch_ad.txt +16 -0
  28. data/doc/ja/plugin/section_footer.txt +84 -0
  29. data/doc/ja/plugin/select_theme.txt +1 -0
  30. data/doc/ja/plugin.txt +13 -0
  31. data/doc/ja/style/hatena.txt +10 -0
  32. data/doc/ja/style/markdown.txt +13 -0
  33. data/doc/ja/util.txt +12 -0
  34. data/filter/antirefspam.rb +263 -0
  35. data/filter/commentkey.rb +29 -0
  36. data/filter/commentsize.rb +18 -0
  37. data/filter/hidecomment.rb +13 -0
  38. data/filter/iplookup.rb +55 -0
  39. data/filter/plugin/antirefspam.rb +59 -0
  40. data/filter/plugin/commentkey.rb +58 -0
  41. data/filter/plugin/commentsize.rb +12 -0
  42. data/filter/plugin/en/iplookup.rb +9 -0
  43. data/filter/plugin/en/spambayes.rb +123 -0
  44. data/filter/plugin/iplookup.rb +39 -0
  45. data/filter/plugin/ja/antirefspam.rb +91 -0
  46. data/filter/plugin/ja/commentkey.rb +17 -0
  47. data/filter/plugin/ja/commentsize.rb +6 -0
  48. data/filter/plugin/ja/iplookup.rb +9 -0
  49. data/filter/plugin/ja/spambayes.rb +124 -0
  50. data/filter/plugin/spambayes.rb +501 -0
  51. data/filter/plugin/zh/iplookup.rb +9 -0
  52. data/filter/rblcheck.rb +36 -0
  53. data/filter/spambayes.rb +535 -0
  54. data/filter/spamlookup.rb +37 -0
  55. data/io/dbi_io/ChangeLog +19 -0
  56. data/io/dbi_io/README.ja +39 -0
  57. data/io/dbi_io/dbi_io.rb +181 -0
  58. data/io/dbi_io/plugin/refererDbiIO.rb +76 -0
  59. data/io/dbi_io/tdiary_table.sql +42 -0
  60. data/js/appstore.js +109 -0
  61. data/js/datepicker.js +69 -0
  62. data/js/editor.js +82 -0
  63. data/js/flickr.js +157 -0
  64. data/js/image_ex.js +79 -0
  65. data/js/jquery.socialbutton.js +842 -0
  66. data/js/nicovideo.js +17 -0
  67. data/js/picasa.js +322 -0
  68. data/js/plugin_checker.js +71 -0
  69. data/js/prettify/lang-apollo.js +2 -0
  70. data/js/prettify/lang-clj.js +18 -0
  71. data/js/prettify/lang-css.js +2 -0
  72. data/js/prettify/lang-go.js +1 -0
  73. data/js/prettify/lang-hs.js +2 -0
  74. data/js/prettify/lang-lisp.js +3 -0
  75. data/js/prettify/lang-lua.js +2 -0
  76. data/js/prettify/lang-ml.js +2 -0
  77. data/js/prettify/lang-n.js +4 -0
  78. data/js/prettify/lang-proto.js +1 -0
  79. data/js/prettify/lang-scala.js +2 -0
  80. data/js/prettify/lang-sql.js +2 -0
  81. data/js/prettify/lang-tex.js +1 -0
  82. data/js/prettify/lang-vb.js +2 -0
  83. data/js/prettify/lang-vhdl.js +3 -0
  84. data/js/prettify/lang-wiki.js +2 -0
  85. data/js/prettify/lang-xq.js +3 -0
  86. data/js/prettify/lang-yaml.js +2 -0
  87. data/js/prettify/prettify.css +1 -0
  88. data/js/prettify/prettify.js +28 -0
  89. data/js/referer.js +17 -0
  90. data/js/show_and_hide.js +39 -0
  91. data/js/socialbutton.js +126 -0
  92. data/js/twitter_anywhere.js +28 -0
  93. data/js/yahoo_kousei.js +21 -0
  94. data/lib/bayes/convert.rb +34 -0
  95. data/lib/bayes.rb +232 -0
  96. data/lib/exifparser/BUGS +1 -0
  97. data/lib/exifparser/ChangeLog +169 -0
  98. data/lib/exifparser/README +15 -0
  99. data/lib/exifparser/install.rb +1015 -0
  100. data/lib/exifparser/lib/exifparser/makernote/canon.rb +502 -0
  101. data/lib/exifparser/lib/exifparser/makernote/fujifilm.rb +415 -0
  102. data/lib/exifparser/lib/exifparser/makernote/minolta.rb +84 -0
  103. data/lib/exifparser/lib/exifparser/makernote/mk_nikonflensname.rb +39 -0
  104. data/lib/exifparser/lib/exifparser/makernote/nikon.rb +267 -0
  105. data/lib/exifparser/lib/exifparser/makernote/nikon2.rb +581 -0
  106. data/lib/exifparser/lib/exifparser/makernote/nikonflensname.rb +438 -0
  107. data/lib/exifparser/lib/exifparser/makernote/olympus.rb +225 -0
  108. data/lib/exifparser/lib/exifparser/makernote/prove.rb +84 -0
  109. data/lib/exifparser/lib/exifparser/makernote/sigma.rb +237 -0
  110. data/lib/exifparser/lib/exifparser/pre-setup.rb +1 -0
  111. data/lib/exifparser/lib/exifparser/scan.rb +278 -0
  112. data/lib/exifparser/lib/exifparser/tag.rb +2298 -0
  113. data/lib/exifparser/lib/exifparser/thumbnail.rb +76 -0
  114. data/lib/exifparser/lib/exifparser/utils.rb +88 -0
  115. data/lib/exifparser/lib/exifparser.rb +265 -0
  116. data/lib/exifparser/sample/exifview.rb +279 -0
  117. data/lib/tdiary-contrib.rb +19 -0
  118. data/lib/wgs2tky.rb +93 -0
  119. data/misc/section_footer2/buzzurl.yaml +6 -0
  120. data/misc/section_footer2/fc2.yaml +6 -0
  121. data/misc/section_footer2/ldc.yaml +6 -0
  122. data/misc/section_footer2/retweet.yaml +7 -0
  123. data/misc/section_footer2/twitter.yaml +7 -0
  124. data/misc/section_footer2/yahoo.yaml +6 -0
  125. data/misc/tdiarygraph/tdiarygraph120x90e.swf +0 -0
  126. data/misc/tdiarygraph/tdiarygraph125x125e.swf +0 -0
  127. data/misc/tdiarygraph/tdiarygraph240x180e.swf +0 -0
  128. data/misc/tdiarygraph/tdiarygraph468x60e.swf +0 -0
  129. data/misc/tdiarygraph/tdiarygraph728x90e.swf +0 -0
  130. data/misc/tdiarytimes/tdiarytimes125x125r.swf +0 -0
  131. data/misc/tdiarytimes/tdiarytimes125x125r7.swf +0 -0
  132. data/misc/tdiarytimes/tdiarytimes125x125s.swf +0 -0
  133. data/misc/tdiarytimes/tdiarytimes125x30.swf +0 -0
  134. data/misc/tdiarytimes/tdiarytimes234x30.swf +0 -0
  135. data/misc/tdiarytimes/tdiarytimes468x30.swf +0 -0
  136. data/plugin/add_bookmark.rb +89 -0
  137. data/plugin/apple_webclip.rb +26 -0
  138. data/plugin/appstore.rb +47 -0
  139. data/plugin/bigpresen.rb +86 -0
  140. data/plugin/bitly.rb +39 -0
  141. data/plugin/bootstrap-navi.rb +54 -0
  142. data/plugin/canonical.rb +9 -0
  143. data/plugin/category_similar.rb +73 -0
  144. data/plugin/category_to_tag.rb +60 -0
  145. data/plugin/category_to_tagcloud.rb +172 -0
  146. data/plugin/cocomment.rb +37 -0
  147. data/plugin/code-prettify.rb +23 -0
  148. data/plugin/coderwall.rb +34 -0
  149. data/plugin/datepicker.rb +28 -0
  150. data/plugin/day2section.rb +20 -0
  151. data/plugin/del_footer.rb +111 -0
  152. data/plugin/description_from_body.rb +23 -0
  153. data/plugin/development.rb +16 -0
  154. data/plugin/editor.rb +11 -0
  155. data/plugin/en/add_bookmark.rb +20 -0
  156. data/plugin/en/del_footer.rb +10 -0
  157. data/plugin/en/git-register.rb +3 -0
  158. data/plugin/en/livedoor_weather.rb +25 -0
  159. data/plugin/en/microsummary.rb +18 -0
  160. data/plugin/en/nicovideo.rb +38 -0
  161. data/plugin/en/openid.rb +8 -0
  162. data/plugin/en/section_footer.rb +6 -0
  163. data/plugin/en/section_footer2.rb +3 -0
  164. data/plugin/en/socialbutton.rb +5 -0
  165. data/plugin/everytrail.rb +39 -0
  166. data/plugin/facebook_comments.rb +59 -0
  167. data/plugin/flickr.rb +209 -0
  168. data/plugin/gist.rb +16 -0
  169. data/plugin/git-register.rb +240 -0
  170. data/plugin/github_badge.rb +27 -0
  171. data/plugin/github_link.rb +9 -0
  172. data/plugin/goo_gl.rb +42 -0
  173. data/plugin/google_adsense.rb +132 -0
  174. data/plugin/google_analytics.rb +39 -0
  175. data/plugin/google_map.rb +168 -0
  176. data/plugin/google_sitemaps.rb +60 -0
  177. data/plugin/google_webmaster.rb +22 -0
  178. data/plugin/hatena_bookmark_nocomment.rb +9 -0
  179. data/plugin/hatena_star.rb +66 -0
  180. data/plugin/hb_footer.rb +255 -0
  181. data/plugin/hb_footer4sec.rb +244 -0
  182. data/plugin/hb_footer4sec_js.rb +30 -0
  183. data/plugin/hide_comment_form.rb +4 -0
  184. data/plugin/hide_sidebar_iphone.rb +21 -0
  185. data/plugin/iddy.rb +81 -0
  186. data/plugin/image_detail.rb +143 -0
  187. data/plugin/image_ex.rb +462 -0
  188. data/plugin/image_gps.rb +128 -0
  189. data/plugin/inline_wiki.rb +6 -0
  190. data/plugin/instagr.rb +64 -0
  191. data/plugin/ja/add_bookmark.rb +20 -0
  192. data/plugin/ja/del_footer.rb +10 -0
  193. data/plugin/ja/flickr.rb +62 -0
  194. data/plugin/ja/git-register.rb +3 -0
  195. data/plugin/ja/google_sitemaps.rb +35 -0
  196. data/plugin/ja/livedoor_weather.rb +25 -0
  197. data/plugin/ja/microsummary.rb +18 -0
  198. data/plugin/ja/nicovideo.rb +41 -0
  199. data/plugin/ja/openid.rb +7 -0
  200. data/plugin/ja/section_footer.rb +6 -0
  201. data/plugin/ja/section_footer2.rb +4 -0
  202. data/plugin/ja/socialbutton.rb +6 -0
  203. data/plugin/jdate.rb +20 -0
  204. data/plugin/jholiday.rb +16 -0
  205. data/plugin/jmonth.rb +20 -0
  206. data/plugin/jquery_ui_theme.rb +55 -0
  207. data/plugin/jroku.rb +28 -0
  208. data/plugin/jyear.rb +37 -0
  209. data/plugin/latlonglab_route.rb +25 -0
  210. data/plugin/lazy_referer.rb +38 -0
  211. data/plugin/livedoor_weather.rb +180 -0
  212. data/plugin/make_link.rb +44 -0
  213. data/plugin/makerss_category.rb +43 -0
  214. data/plugin/makerss_comment.rb +35 -0
  215. data/plugin/microsummary.rb +62 -0
  216. data/plugin/mm_footer.rb +215 -0
  217. data/plugin/monthly_autopagerize.rb +67 -0
  218. data/plugin/my_hotentry.rb +132 -0
  219. data/plugin/navi_day.rb +118 -0
  220. data/plugin/navi_this_month.rb +15 -0
  221. data/plugin/nicovideo.rb +115 -0
  222. data/plugin/notify_miniblog.rb +134 -0
  223. data/plugin/ogp.rb +55 -0
  224. data/plugin/ohmsha_estore.rb +71 -0
  225. data/plugin/openid.rb +90 -0
  226. data/plugin/opensearch_ad.rb +33 -0
  227. data/plugin/picasa.rb +56 -0
  228. data/plugin/plugin_checker.rb +41 -0
  229. data/plugin/popit.rb +22 -0
  230. data/plugin/prettify.rb +19 -0
  231. data/plugin/prezi.rb +10 -0
  232. data/plugin/profile.rb +222 -0
  233. data/plugin/puboo.rb +93 -0
  234. data/plugin/pygments_css.rb +76 -0
  235. data/plugin/rating.rb +419 -0
  236. data/plugin/recent_estraier.rb +50 -0
  237. data/plugin/recent_tweet.rb +71 -0
  238. data/plugin/retweet.rb +86 -0
  239. data/plugin/rubykaigi.rb +99 -0
  240. data/plugin/search-bing.rb +87 -0
  241. data/plugin/search-default.rb +264 -0
  242. data/plugin/search-google-custom.rb +60 -0
  243. data/plugin/search-yahoo-websearch.rb +121 -0
  244. data/plugin/search-yahoo.rb +109 -0
  245. data/plugin/section_footer.rb +195 -0
  246. data/plugin/section_footer2.rb +278 -0
  247. data/plugin/section_permalink.rb +73 -0
  248. data/plugin/section_permalink_anchor.rb +39 -0
  249. data/plugin/select_style.rb +42 -0
  250. data/plugin/select_theme.rb +90 -0
  251. data/plugin/show_and_hide.rb +77 -0
  252. data/plugin/slideshare.rb +10 -0
  253. data/plugin/socialbutton.rb +60 -0
  254. data/plugin/tatsu_zine.rb +93 -0
  255. data/plugin/tdiarygraph_flashstyle.rb +296 -0
  256. data/plugin/tdiarytimes.rb +166 -0
  257. data/plugin/tdiarytimes2.rb +406 -0
  258. data/plugin/tdiarytimes_flashstyle.rb +263 -0
  259. data/plugin/tdiarytimes_textstyle.rb +290 -0
  260. data/plugin/title_anchor.rb +16 -0
  261. data/plugin/tweet_quote.rb +106 -0
  262. data/plugin/twitpic.rb +10 -0
  263. data/plugin/twitter.rb +46 -0
  264. data/plugin/twitter_anywhere.rb +209 -0
  265. data/plugin/twitter_badge.rb +42 -0
  266. data/plugin/twitter_js.rb +59 -0
  267. data/plugin/ustream.rb +19 -0
  268. data/plugin/vimeo.rb +14 -0
  269. data/plugin/volatile.rb +89 -0
  270. data/plugin/vote.rb +100 -0
  271. data/plugin/wikiloc.rb +27 -0
  272. data/plugin/windex.rb +512 -0
  273. data/plugin/yahoo_kousei.rb +79 -0
  274. data/plugin/yahoo_map.rb +97 -0
  275. data/plugin/youtube.rb +33 -0
  276. data/plugin/yshop.rb +189 -0
  277. data/plugin/zenback.rb +46 -0
  278. data/spec/apple_webclip_spec.rb +46 -0
  279. data/spec/fixtures/friendfeed.xml +2 -0
  280. data/spec/fixtures/github.json +1 -0
  281. data/spec/fixtures/twitter.xml +73 -0
  282. data/spec/gist_spec.rb +16 -0
  283. data/spec/github_link_spec.rb +39 -0
  284. data/spec/google_analytics_spec.rb +60 -0
  285. data/spec/jdate_spec.rb +23 -0
  286. data/spec/jmonth_spec.rb +28 -0
  287. data/spec/jyear_spec.rb +21 -0
  288. data/spec/my_hotentry_spec.rb +78 -0
  289. data/spec/openid_spec.rb +246 -0
  290. data/spec/opensearch_ad_spec.rb +50 -0
  291. data/spec/profile_spec.rb +88 -0
  292. data/spec/rcov.opts +2 -0
  293. data/spec/spec_helper.rb +223 -0
  294. data/spec/title_anchor_spec.rb +39 -0
  295. data/spec/twitter_js_spec.rb +116 -0
  296. data/spec/youtube_spec.rb +20 -0
  297. data/style/hatena_style.rb +1011 -0
  298. data/style/markdown_style.rb +239 -0
  299. data/style/wikiext_style.rb +21 -0
  300. data/tdiary-contrib.gemspec +25 -0
  301. data/util/clean-spam/README.ja +1 -0
  302. data/util/clean-spam/tdiary-comment-clean +46 -0
  303. data/util/clean-spam/tdiary-comment-clean2 +81 -0
  304. data/util/clean-spam/tdiary-referer-clean +46 -0
  305. data/util/convert_pstore.rb +82 -0
  306. data/util/estraier-search/ChangeLog +36 -0
  307. data/util/estraier-search/README.ja +114 -0
  308. data/util/estraier-search/en/estraier-register.rb +3 -0
  309. data/util/estraier-search/estraier-register.rb +298 -0
  310. data/util/estraier-search/estraier-search.rb +273 -0
  311. data/util/estraier-search/estraier.rhtml +73 -0
  312. data/util/estraier-search/estraier.rxml +23 -0
  313. data/util/estraier-search/i.estraier.rhtml +31 -0
  314. data/util/estraier-search/ja/estraier-register.rb +3 -0
  315. data/util/image-gallery/README.ja +27 -0
  316. data/util/image-gallery/image-gallery.rb +523 -0
  317. data/util/image-gallery/image-gallery.rb.euc-jp +523 -0
  318. data/util/image-gallery/js/SmoothGallery/Changelog +52 -0
  319. data/util/image-gallery/js/SmoothGallery/css/ReMooz.css +186 -0
  320. data/util/image-gallery/js/SmoothGallery/css/img/carrow1.gif +0 -0
  321. data/util/image-gallery/js/SmoothGallery/css/img/carrow2.gif +0 -0
  322. data/util/image-gallery/js/SmoothGallery/css/img/closebox.gif +0 -0
  323. data/util/image-gallery/js/SmoothGallery/css/img/closebox.png +0 -0
  324. data/util/image-gallery/js/SmoothGallery/css/img/fleche1.gif +0 -0
  325. data/util/image-gallery/js/SmoothGallery/css/img/fleche1.png +0 -0
  326. data/util/image-gallery/js/SmoothGallery/css/img/fleche2.gif +0 -0
  327. data/util/image-gallery/js/SmoothGallery/css/img/fleche2.png +0 -0
  328. data/util/image-gallery/js/SmoothGallery/css/img/loading-bar-black.gif +0 -0
  329. data/util/image-gallery/js/SmoothGallery/css/img/open.gif +0 -0
  330. data/util/image-gallery/js/SmoothGallery/css/img/open.png +0 -0
  331. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_e.png +0 -0
  332. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_n.png +0 -0
  333. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_ne.png +0 -0
  334. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_nw.png +0 -0
  335. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_s.png +0 -0
  336. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_se.png +0 -0
  337. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_sw.png +0 -0
  338. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_w.png +0 -0
  339. data/util/image-gallery/js/SmoothGallery/css/img/spinner.gif +0 -0
  340. data/util/image-gallery/js/SmoothGallery/css/jd.gallery.css +371 -0
  341. data/util/image-gallery/js/SmoothGallery/css/layout.css +91 -0
  342. data/util/image-gallery/js/SmoothGallery/license.txt +621 -0
  343. data/util/image-gallery/js/SmoothGallery/resizer.php +113 -0
  344. data/util/image-gallery/js/SmoothGallery/scripts/Changelog +52 -0
  345. data/util/image-gallery/js/SmoothGallery/scripts/History.Routing.js +126 -0
  346. data/util/image-gallery/js/SmoothGallery/scripts/History.js +109 -0
  347. data/util/image-gallery/js/SmoothGallery/scripts/ReMooz.js +364 -0
  348. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.js +843 -0
  349. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.set.js +183 -0
  350. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.transitions.js +90 -0
  351. data/util/image-gallery/js/SmoothGallery/scripts/jdgalleryresize.js +828 -0
  352. data/util/image-gallery/js/SmoothGallery/scripts/license.txt +621 -0
  353. data/util/image-gallery/js/SmoothGallery/scripts/mootools-1.2-more.js +103 -0
  354. data/util/image-gallery/js/SmoothGallery/scripts/mootools-1.2.1-core-yc.js +349 -0
  355. data/util/image-gallery/js/SmoothGallery/scripts/resizer.php +113 -0
  356. data/util/image-gallery/misc/plugin/recent_image.rb +406 -0
  357. data/util/image-gallery/skel/gallery.rhtml +154 -0
  358. data/util/image-gallery/skel/gallery.rhtml.euc-jp +154 -0
  359. data/util/image-gallery/tdiary.conf.igsample +8 -0
  360. data/util/image-gallery/theme/image-gallery.css +85 -0
  361. data/util/image2flickr.rb +282 -0
  362. data/util/posttdiary/README.ja +12 -0
  363. data/util/posttdiary/posttdiary-ex.rb +1155 -0
  364. data/util/posttdiary/posttdiary.rb +245 -0
  365. data/util/rast-search/ChangeLog +55 -0
  366. data/util/rast-search/README.ja +99 -0
  367. data/util/rast-search/en/rast-register.rb +3 -0
  368. data/util/rast-search/i.rast.rhtml +33 -0
  369. data/util/rast-search/ja/rast-register.rb +3 -0
  370. data/util/rast-search/rast-register.rb +326 -0
  371. data/util/rast-search/rast-search.rb +249 -0
  372. data/util/rast-search/rast.rhtml +66 -0
  373. data/util/rast-search/rast.rxml +21 -0
  374. data/util/section_link/README +11 -0
  375. data/util/section_link/misc/plugin/section_link.rb +68 -0
  376. data/util/section_link/misc/plugin/section_link_anchor.rb +38 -0
  377. data/util/section_link/tdiary/tdiary_day_ext.rb +21 -0
  378. data/util/section_link/tdiary/tdiaryext_style.rb +36 -0
  379. data/util/section_link/tdiary/wikiext_style.rb +36 -0
  380. data/util/tdiary-for-ruby1.9/compatible.rb +97 -0
  381. data/util/tdiary-for-ruby1.9/tdiary-2.2.0.patch +98 -0
  382. data/util/tdiary-for-ruby1.9/tdiary-2.3.1.patch +212 -0
  383. data/util/tdiary-grep/README +4 -0
  384. data/util/tdiary-grep/grep.rb +445 -0
  385. data/util/tdiary-mode/http.el +130 -0
  386. data/util/tdiary-mode/tdiary-mode.el +613 -0
  387. data/util/tdiary-vim/ChangeLog +25 -0
  388. data/util/tdiary-vim/README +60 -0
  389. data/util/tdiary-vim/tdiary.vim +350 -0
  390. data/util/tdiarysearch/README.en +53 -0
  391. data/util/tdiarysearch/README.ja +99 -0
  392. data/util/tdiarysearch/search.rb +504 -0
  393. metadata +497 -0
@@ -0,0 +1,76 @@
1
+ #
2
+ # exifparser/thumbnail.rb -
3
+ #
4
+ # Copyright (C) 2002 Ryuichi Tamura (r-tam@fsinet.or.jp)
5
+ #
6
+ # $Revision: 1.1.1.1 $
7
+ # $Date: 2002/12/16 07:59:00 $
8
+ #
9
+
10
+ module Exif
11
+
12
+ class Parser
13
+
14
+ alias orig_thumbnail thumbnail
15
+
16
+ #
17
+ # redefine method.
18
+ #
19
+ def thumbnail
20
+ Thumbnail.new(@result[:IFD1], @data)
21
+ end
22
+
23
+ end
24
+
25
+ #
26
+ # APIs are subject to change.
27
+ #
28
+ class Thumbnail
29
+
30
+ def initialize(ifd1, data)
31
+ @ifd1 = ifd1
32
+ @data = data
33
+ end
34
+
35
+ def size
36
+ @data.size
37
+ end
38
+
39
+ def write(dest)
40
+ dest << @data
41
+ end
42
+
43
+ def width
44
+ search_tag('ImageWidth')
45
+ end
46
+
47
+ def height
48
+ search_tag('ImageLength')
49
+ end
50
+ alias length height
51
+
52
+ def bits_per_sample
53
+ search_tag('BitsPerSample')
54
+ end
55
+
56
+ def compression
57
+ search_tag('Compression')
58
+ end
59
+
60
+ def photometric_interpretation
61
+ search_tag('PhotometricInterpretation')
62
+ end
63
+
64
+ def strip_offsets
65
+ search_tag('StripOffsets')
66
+ end
67
+
68
+ private
69
+
70
+ def search_tag(tag)
71
+ @ifd1.find { |t| t.name == tag }
72
+ end
73
+
74
+ end
75
+
76
+ end
@@ -0,0 +1,88 @@
1
+ #
2
+ # exifparser/utils.rb -
3
+ #
4
+ # Copyright (C) 2002 Ryuichi Tamura (r-tam@fsinet.or.jp)
5
+ #
6
+ # $Revision: 1.1.1.1 $
7
+ # $Date: 2002/12/16 07:59:00 $
8
+ #
9
+
10
+ module Exif
11
+
12
+ #
13
+ # utility module that will be included in some classes.
14
+ #
15
+ module Utils
16
+
17
+ module Decode
18
+
19
+ module Motorola
20
+
21
+ def byte_order
22
+ :motorola
23
+ end
24
+
25
+ def decode_ubytes(str)
26
+ str.unpack('C*')
27
+ end
28
+
29
+ def decode_ushort(str)
30
+ str[0,2].unpack('n').first
31
+ end
32
+
33
+ def decode_ulong(str)
34
+ str[0,4].unpack('N').first
35
+ end
36
+
37
+ def decode_sshort(str)
38
+ str[0,2].unpack('n').pack('s').unpack('s').first
39
+ end
40
+
41
+ def decode_slong(str)
42
+ str[0,4].unpack('N').pack('l').unpack('l').first
43
+ end
44
+
45
+ def parseTagID(str)
46
+ sprintf("0x%02x%02x", *(str.unpack("C*")))
47
+ end
48
+
49
+
50
+ end
51
+
52
+ module Intel
53
+
54
+ def byte_order
55
+ :intel
56
+ end
57
+
58
+ def decode_ubytes(str)
59
+ str.unpack('C*')
60
+ end
61
+
62
+ def decode_ushort(str)
63
+ str[0,2].unpack('v').first
64
+ end
65
+
66
+ def decode_ulong(str)
67
+ str[0,4].unpack('V').first
68
+ end
69
+
70
+ def decode_sshort(str)
71
+ str[0,2].unpack('s').first
72
+ end
73
+
74
+ def decode_slong(str)
75
+ str[0,4].unpack('l').first
76
+ end
77
+
78
+ def parseTagID(str)
79
+ "0x" + str.unpack("C*").reverse.collect{ |e| sprintf("%02x", e) }.join("")
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
86
+ end
87
+
88
+ end
@@ -0,0 +1,265 @@
1
+ #
2
+ #
3
+ #= exifparser.rb - Exif tag parser written in pure ruby
4
+ #
5
+ #Author:: Ryuchi Tamura (r-tam@fsinet.or.jp)
6
+ #Copyright:: Copyright (C) 2002 Ryuichi Tamura.
7
+ #
8
+ # $Id: exifparser.rb,v 1.1.1.1 2002/12/16 07:59:00 tam Exp $
9
+ #
10
+ #== INTRODUCTION
11
+ #
12
+ #There are 2 classes you work with. ExifParser class is
13
+ #the Exif tag parser that parses all tags defined EXIF-2.2 standard,
14
+ #and many of extension tags uniquely defined by some digital equipment
15
+ #manufacturers. Currently, part of tags defined by FujiFilm, and
16
+ #Olympus is supported. After initialized with the path to image file
17
+ #of EXIF format, ExifParser will provides which tags are available in
18
+ #the image, and how you work with them.
19
+ #
20
+ #Tags availble from ExifParser is objects defined under Exif::Tag module,
21
+ #with its name being the class name. For example if you get "Make" tag
22
+ #from ExifParser, it is Exif::Tag::DateTime object. Inspecting it looks
23
+ #following:
24
+ #
25
+ # #<Exif::Tag::TIFF::Make ID=0x010f, IFD="IFD0" Name="Make", Format="Ascii" Value="FUJIFILM">
26
+ #
27
+ #here, ID is Tag ID defined in EXIF-2.2 standard, IFD is the name of
28
+ #Image File Directory, Name is String representation of tag ID, Format is
29
+ #string that shows how the data is formatted, and Value is the value of
30
+ #the tag. This is retrieved by Exif::Tag::Make#value.
31
+ #
32
+ #Another example. If you want to know whether flash was fired when the image
33
+ #was generated, ExifParser returns Exif::Tag::Flash object:
34
+ #
35
+ # tag = exif['Flash']
36
+ # p tag
37
+ # => #<Exif::Tag::Exif::Flash ID=0x9209, IFD="Exif" Name="Flash", Format="Unsigned short" Value="1">
38
+ # p tag.value
39
+ # => 1
40
+ #
41
+ #It may happen that diffrent IFDs have the same tag name. In this case,
42
+ #use Exif#tag(tagname, IFD)
43
+ #
44
+ #The value of the tag above, 1, is not clearly understood
45
+ #(supposed to be 'true', though). Exif::Tag::Flash#to_s will provides
46
+ #more human-readable form as String.
47
+ #
48
+ # tag.to_s #=> "Flash fired."
49
+ #
50
+ #many of these sentences are cited from Exif-2.2 standard.
51
+ #
52
+ #== USAGE
53
+ # require 'exifparser'
54
+ #
55
+ # exif = ExifParser.new("fujifilm.jpg")
56
+ #
57
+ # 1. get a tag value by its name('Make') or its ID (0x010f)
58
+ # exif['Make'] #=> 'FUJIFILM'
59
+ # exif[0x010f] #=> 'FUJIFILM'
60
+ #
61
+ # if the specified tag is not found, nil is returned.
62
+ #
63
+ # 2. to see the image has the value of specified tag
64
+ # exif.tag?('DateTime') #=> true
65
+ # exif.tag?('CameraID') #=> false
66
+ #
67
+ # 3. get all the tags contained in the image.
68
+ #
69
+ # exif.tags
70
+ #
71
+ # or, if you want to know all the tags defined in specific IFD,
72
+ #
73
+ # exif.tags(:IFD0) # get all the tags defined in IFD0
74
+ #
75
+ # you can traverse each tag and work on it.
76
+ #
77
+ # exif.each do |tag|
78
+ # p tag.to_s
79
+ # end
80
+ #
81
+ # # each tag in IFD0
82
+ # exif.each(:IFD0) do |ifd0_tag|
83
+ # p ifd0_tag.to_s
84
+ # end
85
+ #
86
+ # 4. extract thumbnail
87
+ #
88
+ # File.open("thumb.jpg") do |dest|
89
+ # exif.thumbnail dest
90
+ # end
91
+ #
92
+ # dest object must respond to '<<'.
93
+ #
94
+ require 'exifparser/scan'
95
+
96
+ module Exif
97
+
98
+ class Parser
99
+ #
100
+ # create a new object. fpath is String.
101
+ #
102
+ def initialize(fpath)
103
+ @fpath = fpath
104
+ @scanner = nil
105
+ File.open(fpath, "rb") do |f|
106
+ @scanner = Exif::Scanner.new(f)
107
+ @scanner.scan
108
+ end
109
+ @IFD0 = @scanner.result[:IFD0]
110
+ @IFD1 = @scanner.result[:IFD1]
111
+ @Exif = @scanner.result[:Exif]
112
+ @GPS = @scanner.result[:GPS]
113
+ @Interoperability = @scanner.result[:Interoperability]
114
+ @MakerNote = @scanner.result[:MakerNote]
115
+ @thumbnail = @scanner.result[:Thumbnail]
116
+ end
117
+
118
+ def inspect
119
+ sprintf("#<%s filename=\"%s\" entries: IFD0(%d) IFD1(%d) Exif(%d) GPS(%d) Interoperability(%d) MakerNote(%d)>", self.class, @fpath, @IFD0.length, @IFD1.length, @Exif.length, @GPS.length, @Interoperability.length, @MakerNote.length)
120
+ end
121
+
122
+ #
123
+ # return true if specified tagid is defined or has some value.
124
+ #
125
+ def tag?(tagid)
126
+ search_tag(tagid) ? true : false
127
+ end
128
+
129
+ #
130
+ # search tag on the specific IFD
131
+ #
132
+ def tag(tagname, ifd=nil)
133
+ search_tag(tagname, ifd)
134
+ end
135
+
136
+ #
137
+ # search the specified tag values. return value is object of
138
+ # classes defined under Exif::Tag module.
139
+ #
140
+ def [](tagname)
141
+ self.tag(tagname)
142
+ end
143
+
144
+ #
145
+ # set the specified tag to the specified value.
146
+ # XXX NOT IMPLEMETED XXX
147
+ #
148
+ def []=(tag, value)
149
+ # not implemented
150
+ end
151
+
152
+ #
153
+ # extract the thumbnail image to dest. dest should respond to
154
+ # '<<' method.
155
+ #
156
+ def thumbnail(dest)
157
+ dest << @thumbnail
158
+ end
159
+
160
+ #
161
+ # return the size of the thumbnail image
162
+ #
163
+ def thumbnail_size
164
+ @thumbnail.size
165
+ end
166
+
167
+ #
168
+ # return all the tags in the image.
169
+ #
170
+ # if argument ifd is specified, every tags defined in the
171
+ # specified IFD are passed to block.
172
+ #
173
+ # return value is object of classes defined under Exif::Tag module.
174
+ #
175
+ # allowable arguments are:
176
+ # * :IFD0
177
+ # * :IFD1
178
+ # * :Exif
179
+ # * :GPS
180
+ # * :Interoperability
181
+ # * :MakerNote (if exist)
182
+ def tags(ifd=nil)
183
+ if ifd
184
+ @scanner.result[ifd]
185
+ else
186
+ [
187
+ @IFD0,
188
+ @IFD1,
189
+ @Exif,
190
+ @GPS,
191
+ @Interoperability,
192
+ @MakerNote
193
+ ].flatten
194
+ end
195
+ end
196
+
197
+ #
198
+ # execute given block with block argument being every tags defined
199
+ # in all the IFDs contained in the image.
200
+ #
201
+ # if argument ifd is specified, every tags defined in the
202
+ # specified IFD are passed to block.
203
+ #
204
+ # return value is object of classes defined under Exif::Tag module.
205
+ #
206
+ # allowable arguments are:
207
+ # * :IFD0
208
+ # * :IFD1
209
+ # * :Exif
210
+ # * :GPS
211
+ # * :Interoperability
212
+ # * :MakerNote
213
+ def each(ifd=nil)
214
+ if ifd
215
+ @scanner.result[ifd].each{ |tag| yield tag }
216
+ else
217
+ [
218
+ @IFD0,
219
+ @IFD1,
220
+ @Exif,
221
+ @GPS,
222
+ @Interoperability,
223
+ @MakerNote
224
+ ].flatten.each do |tag|
225
+ yield tag
226
+ end
227
+ end
228
+ end
229
+
230
+ private
231
+
232
+ def search_tag(tagID, ifd=nil)
233
+ if ifd
234
+ @scanner.result(ifd).find do |tag|
235
+ case tagID
236
+ when Fixnum
237
+ tag.tagID.hex == tagID
238
+ when String
239
+ tag.name == tagID
240
+ end
241
+ end
242
+ else
243
+ [
244
+ @IFD0,
245
+ @IFD1,
246
+ @Exif,
247
+ @GPS,
248
+ @Interoperability,
249
+ @MakerNote
250
+ ].flatten.find do |tag|
251
+ case tagID
252
+ when Fixnum
253
+ tag.tagID.hex == tagID
254
+ when String
255
+ tag.name == tagID
256
+ end
257
+ end
258
+ end
259
+ end
260
+
261
+ end # module Parser
262
+
263
+ end # module Exif
264
+
265
+ ExifParser = Exif::Parser
@@ -0,0 +1,279 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # exifview.rb - display EXIF information as well as EXIF image
4
+ #
5
+ # Copyright (C) 2002 Ryuichi Tamura (r-tam@fsinet.or.jp)
6
+ #
7
+ # $Revision: 1.3 $
8
+ # $Date: 2002/12/17 05:16:34 $
9
+ #
10
+ # Requirements: gtk2
11
+ #
12
+ require 'exifparser'
13
+ require 'observer'
14
+ require 'gtk2'
15
+
16
+ module Exif
17
+
18
+ class Parser
19
+
20
+ def each_values
21
+ tags.each do |tag|
22
+ next if tag == Tag::Exif::MakerNote
23
+ yield tag.name, tag.tagID.to_s, tag.format, tag.IFD, tag.to_s
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+ module ExifView
32
+
33
+ class SelectedFile
34
+ include Observable
35
+
36
+ def initialize
37
+ @fpath = nil
38
+ end
39
+ attr_reader :fpath
40
+
41
+ def filename=(filename)
42
+ @fpath = File.expand_path(filename)
43
+ begin
44
+ exif = ExifParser.new(@fpath)
45
+ changed
46
+ rescue
47
+ changed(false)
48
+ raise
49
+ end
50
+ notify_observers(@fpath, exif)
51
+ end
52
+
53
+ end
54
+
55
+ DisplayImage = SelectedFile.new
56
+
57
+ #
58
+ # Error dialog
59
+ #
60
+ class ErrorDialog < ::Gtk::Dialog
61
+
62
+ def initialize(msg)
63
+ super()
64
+ self.set_default_size(200, 100)
65
+ self.set_title("ExifView: Error")
66
+ button = Gtk::Button.new("dismiss")
67
+ button.flags |= Gtk::Widget::CAN_DEFAULT
68
+ button.signal_connect("clicked") do destroy end
69
+ self.action_area.pack_start(button, 0)
70
+ button.grab_default
71
+ label = Gtk::Label.new(msg)
72
+ vbox.pack_start(label)
73
+ button.show
74
+ label.show
75
+ end
76
+
77
+ end
78
+
79
+ #
80
+ # File selection
81
+ #
82
+ class FileSelectionWidget < ::Gtk::FileSelection
83
+
84
+ def initialize
85
+ super('File selection')
86
+ history_pulldown
87
+ self.signal_connect('destroy') { destroy }
88
+ self.ok_button.signal_connect('clicked') {
89
+ catch(:read_error) {
90
+ begin
91
+ DisplayImage.filename = self.filename
92
+ rescue
93
+ ErrorDialog.new($!.message).show
94
+ throw :read_error
95
+ end
96
+ destroy
97
+ }
98
+ }
99
+ self.cancel_button.signal_connect('clicked') { destroy }
100
+ end
101
+
102
+ end
103
+
104
+ #
105
+ # MenuItem: Open
106
+ #
107
+ class OpenMenuItemWidget < ::Gtk::MenuItem
108
+
109
+ def initialize
110
+ super('Open')
111
+ @filesel = nil
112
+ self.signal_connect('activate') {
113
+ @filesel = FileSelectionWidget.new
114
+ @filesel.show
115
+ }
116
+ end
117
+ attr_reader :filesel
118
+
119
+ end
120
+
121
+ #
122
+ # MenuItem: Quit
123
+ #
124
+ class QuitMenuItemWidget < ::Gtk::MenuItem
125
+
126
+ def initialize
127
+ super('Quit')
128
+ self.signal_connect('activate') { Gtk.main_quit }
129
+ end
130
+
131
+ end
132
+
133
+ #
134
+ # Menu Bar
135
+ #
136
+ class MenuBarWidget < ::Gtk::MenuBar
137
+
138
+ def initialize
139
+ super()
140
+ @item_open = OpenMenuItemWidget.new
141
+ @item_quit = QuitMenuItemWidget.new
142
+ menu = Gtk::Menu.new
143
+ menu.append(@item_open)
144
+ menu.append(@item_quit)
145
+ filemenu = Gtk::MenuItem.new("File")
146
+ filemenu.set_submenu(menu)
147
+ self.append(filemenu)
148
+ end
149
+
150
+ end
151
+
152
+ class ImageWindow < ::Gtk::ScrolledWindow
153
+
154
+ def initialize
155
+ super(nil, nil)
156
+ DisplayImage.add_observer(self)
157
+ @filename = nil
158
+ @image = Gtk::Image.new
159
+ @vbox = Gtk::VBox.new(false, 0)
160
+ self.add_with_viewport(@vbox)
161
+ self.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
162
+ @vbox.pack_start(@image, false, false, 0)
163
+ end
164
+ attr_reader :filename
165
+
166
+ def update(*args)
167
+ @filename, = *args
168
+ @image.set(filename)
169
+ end
170
+
171
+ end
172
+
173
+ class ExifDataWindow < ::Gtk::ScrolledWindow
174
+
175
+ def initialize
176
+ super(nil, nil)
177
+ DisplayImage.add_observer(self)
178
+ @model, @treeview = setup_columns()
179
+ end
180
+
181
+ def setup_columns
182
+ model = Gtk::ListStore.new(String, String, String, String, String)
183
+ # tagname, tag_id, ifd_name, value, respectedly
184
+ treeview = Gtk::TreeView.new(model)
185
+ cols = []; i = 0
186
+ [["Name", 0], ["Number", 1], ["Format", 2],
187
+ ["IFD", 3], ["Value", 4]].each do |e|
188
+ treeview.insert_column(
189
+ Gtk::TreeViewColumn.new(e[0], Gtk::CellRendererText.new,
190
+ {:text => e[1]}), e[1] )
191
+ end
192
+ treeview.selection.set_mode(Gtk::SELECTION_SINGLE)
193
+ self.add_with_viewport(treeview)
194
+ [model, treeview]
195
+ end
196
+
197
+ def update(*args)
198
+ fpath, exif = *args
199
+ @model.clear
200
+ exif.each_values do |e|
201
+ set_row(*e)
202
+ end
203
+ end
204
+
205
+ private
206
+
207
+ def set_row(tagname, tag_id, tag_format, ifd_name, value)
208
+ iter = @model.append
209
+ iter.set_value(0, tagname)
210
+ iter.set_value(1, tag_id)
211
+ iter.set_value(2, tag_format)
212
+ iter.set_value(3, ifd_name)
213
+ iter.set_value(4, value)
214
+ end
215
+
216
+ end
217
+
218
+ class MainWindow < ::Gtk::Window
219
+
220
+ def initialize(*args)
221
+ super(*args)
222
+ DisplayImage.add_observer(self)
223
+ # Components lower: Exif data
224
+ @exifdata = ExifDataWindow.new
225
+
226
+ # Components middle: Image
227
+ @image = ImageWindow.new
228
+
229
+ # Components upper: Menu bar
230
+ @menubar = MenuBarWidget.new
231
+
232
+ # VBox creation
233
+ @vbox = Gtk::VBox.new(false, 0)
234
+
235
+ # signal connection for toplevel window
236
+ self.signal_connect('destroy') { exit }
237
+ self.signal_connect('delete_event') { exit }
238
+ end
239
+
240
+ def initialize_display
241
+ set_appearance()
242
+ self.show_all
243
+ end
244
+
245
+ def update(*args)
246
+ filename, = *args
247
+ self.set_title("ExifView: #{filename}")
248
+ end
249
+
250
+ private
251
+
252
+ def set_appearance
253
+ # self
254
+ self.set_size_request(640,480)
255
+ self.set_title("ExifView #{@image.filename}")
256
+ self.add(@vbox)
257
+ # menubar
258
+ @vbox.pack_start(@menubar, false, false, 0)
259
+ # image display
260
+ @vbox.pack_start(@image, true, true, 0)
261
+ # exif data display
262
+ @vbox.pack_start(@exifdata, true, true, 0)
263
+ end
264
+
265
+ end
266
+
267
+ end
268
+
269
+ if $0 == __FILE__
270
+ Gtk.init
271
+ #
272
+ # Main
273
+ #
274
+ filename = ARGV.shift
275
+ window = ExifView::MainWindow.new(Gtk::Window::TOPLEVEL)
276
+ ExifView::DisplayImage.filename = filename if filename
277
+ window.initialize_display
278
+ Gtk.main
279
+ end
@@ -0,0 +1,19 @@
1
+ module TDiary
2
+ class Contrib
3
+ def self.root
4
+ File.expand_path('../..', __FILE__)
5
+ end
6
+
7
+ class Assets
8
+ def self.setup(environment)
9
+ environment.append_path File.join(TDiary::Contrib.root, 'js')
10
+ end
11
+ end
12
+
13
+ class Plugin
14
+ def self.setup(sp_path)
15
+ sp_path << File.join(TDiary::Contrib.root, 'plugin')
16
+ end
17
+ end
18
+ end
19
+ end