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
data/plugin/openid.rb ADDED
@@ -0,0 +1,90 @@
1
+ #
2
+ # openid.rb: Insert OpenID delegation information. $Revision: 1.10 $
3
+ #
4
+ # Copyright (C) 2005, TADA Tadashi <sho@spc.gr.jp>
5
+ # You can redistribute it and/or modify it under GPL2.
6
+ #
7
+
8
+ @openid_config = (Struct.const_defined?("OpenIdConfig") ? Struct::OpenIdConfig :
9
+ Struct.new("OpenIdConfig", :openid, :openid2, :x_xrds_location))
10
+
11
+ if /^(?:latest|conf|saveconf)$/ =~ @mode then
12
+ @openid_list = {
13
+ # service => @openid_config.new(
14
+ # [openid.server, openid.delegate(replace <ID> as account name)], # openid
15
+ # [openid2.provider, openid2.local_id(replace <ID> as account name)], # openid2
16
+ # 'X-XRDS-Location(replace <ID> as account name)'),
17
+ 'Hatena' => @openid_config.new(['https://www.hatena.ne.jp/openid/server', 'http://www.hatena.ne.jp/<ID>/']),
18
+ 'livedoor' => @openid_config.new(['http://auth.livedoor.com/openid/server', 'http://profile.livedoor.com/<ID>']),
19
+ 'LiveJournal' => @openid_config.new(['http://www.livejournal.com/openid/server.bml', 'http://<ID>.livejournal.com/']),
20
+ 'OpenID.ne.jp' => @openid_config.new(
21
+ ['http://www.openid.ne.jp/user/auth', 'http://<ID>.openid.ne.jp'],
22
+ nil,
23
+ 'http://<ID>.openid.ne.jp/user/xrds'),
24
+ 'TypeKey' => @openid_config.new(['http://www.typekey.com/t/openid/', 'http://profile.typekey.com/<ID>/']),
25
+ 'Vox' => @openid_config.new(['http://www.vox.com/services/openid/server', 'http://<ID>.vox.com/']),
26
+ 'myopenid.com' => @openid_config.new(
27
+ ['http://www.myopenid.com/server', 'http://<ID>.myopenid.com'], # openid
28
+ ['http://www.myopenid.com/server', 'http://<ID>.myopenid.com'], # openid2
29
+ "http://www.myopenid.com/xrds?username=<ID>"),
30
+ 'claimID.com' => @openid_config.new(
31
+ ['http://openid.claimid.com/server', 'http://openid.claimid.com/<ID>'],
32
+ nil, #['http://openid.claimid.com/server', 'http://openid.claimid.com/<ID>'],
33
+ 'http://claimid.com/<ID>/xrds'),
34
+ 'Personal Identity Provider (PIP)' => @openid_config.new(
35
+ ['http://pip.verisignlabs.com/server', 'http://<ID>.pip.verisignlabs.com/'],
36
+ ['http://pip.verisignlabs.com/server', 'http://<ID>.pip.verisignlabs.com/'],
37
+ 'http://pip.verisignlabs.com/user/<ID>/yadisxrds'),
38
+ 'Yahoo! Japan' => @openid_config.new(
39
+ nil,
40
+ ['https://open.login.yahooapis.jp/openid/op/auth', 'https://me.yahoo.co.jp/a/<ID>'],
41
+ 'http://open.login.yahoo.co.jp/openid20/www.yahoo.co.jp/xrds'),
42
+ 'Yahoo!' => @openid_config.new(
43
+ nil,
44
+ ['https://open.login.yahooapis.com/openid/op/auth', 'https://me.yahoo.com/a/<ID>'],
45
+ 'http://open.login.yahooapis.com/openid20/www.yahoo.com/xrds'),
46
+ }
47
+
48
+ if @conf['openid.service'] and @conf['openid.id'] then
49
+ openid_service = @openid_list[@conf['openid.service']]
50
+ openid_id = @conf['openid.id']
51
+ result = ''
52
+ add_header_proc do
53
+ result = <<-HTML if openid_service.openid
54
+ <link rel="openid.server" href="#{h openid_service.openid[0]}">
55
+ <link rel="openid.delegate" href="#{h openid_service.openid[1].sub( /<ID>/, openid_id )}">
56
+ HTML
57
+ result << <<-HTML if openid_service.openid2
58
+ <link rel="openid2.provider" href="#{h openid_service.openid2[0]}">
59
+ <link rel="openid2.local_id" href="#{h openid_service.openid2[1].sub( /<ID>/, openid_id )}">
60
+ HTML
61
+ result << <<-HTML if openid_service.x_xrds_location
62
+ <meta http-equiv="X-XRDS-Location" content="#{h openid_service.x_xrds_location.sub( /<ID>/, openid_id )}">
63
+ HTML
64
+ result.gsub( /^\t{2}/, '' )
65
+ end if openid_service
66
+ end
67
+ end
68
+
69
+ add_conf_proc( 'openid', @openid_conf_label ) do
70
+ if @mode == 'saveconf' then
71
+ @conf['openid.service'] = @cgi.params['openid.service'][0]
72
+ @conf['openid.id'] = @cgi.params['openid.id'][0]
73
+ end
74
+
75
+ options = ''
76
+ @openid_list.each_key do |key|
77
+ options << %Q|<option value="#{h key}"#{" selected" if @conf['openid.service'] == key}>#{h key}</option>\n|
78
+ end
79
+ <<-HTML
80
+ <h3 class="subtitle">#{@openid_service_label}</h3>
81
+ <p>#{@openid_service_desc}</p>
82
+ <p><select name="openid.service">
83
+ #{options}
84
+ </select></p>
85
+
86
+ <h3 class="subtitle">#{@openid_id_label}</h3>
87
+ <p>#{@openid_id_desc}</p>
88
+ <p><input name="openid.id" value="#{h @conf['openid.id']}"></p>
89
+ HTML
90
+ end
@@ -0,0 +1,33 @@
1
+ # opensearch_ad.rb $Revision: 1.1 $
2
+ #
3
+ # Copyright (c) 2008 SHIBATA Hiroshi <h-sbt@nifty.com>
4
+ # Distributed under the GPL
5
+ #
6
+
7
+ if /\A(?:latest|day)\z/ =~ @mode then
8
+ if @conf['opensearch.xml'] and @conf['opensearch.title'] then
9
+ opensearch_xml = @conf['opensearch.xml']
10
+ opensearch_title = @conf['opensearch.title']
11
+
12
+ add_header_proc do
13
+ result = <<-HTML
14
+ <link type="application/opensearchdescription+xml" rel="search" title="#{h(opensearch_title)}" href="#{h(opensearch_xml)}">
15
+ HTML
16
+ result.gsub( /^\t\t/, '' )
17
+ end
18
+ end
19
+ end
20
+
21
+ add_conf_proc( 'opensearch_ad', 'OpenSearch Auto-Discovery' ) do
22
+ if @mode == 'saveconf'
23
+ @conf['opensearch.xml'] = @cgi.params['opensearch.xml'][0]
24
+ @conf['opensearch.title'] = @cgi.params['opensearch.title'][0]
25
+ end
26
+
27
+ <<-HTML
28
+ <h3 class="subtitle">Tilte for OpenSearch</h3>
29
+ <p><input name="opensearch.title" value="#{h(@conf['opensearch.title'])}" size="80"></p>
30
+ <h3 class="subtitle">URI for OpenSearch description XML</h3>
31
+ <p><input name="opensearch.xml" value="#{h(@conf['opensearch.xml'])}" size="80"></p>
32
+ HTML
33
+ end
data/plugin/picasa.rb ADDED
@@ -0,0 +1,56 @@
1
+ # show photo image on Picasa Web Album
2
+ #
3
+ # usage:
4
+ # picasa( src[, title[, place]] )
5
+ # - src: The url of the photo to show.
6
+ # - title: title of photo. (optional)
7
+ # - place: class name of img element. default is 'photo'.
8
+ #
9
+ # picasa_left( src[, title] )
10
+ #
11
+ # picasa_right( src[, title] )
12
+ #
13
+ # options configurable through settings:
14
+ # @conf['picasa.user'] : picasa username
15
+ # @conf['picasa.default_size'] : default image size
16
+ #
17
+ # Copyright (c) hb <http://www.smallstyle.com>
18
+ # Distributed under the GPL.
19
+ #
20
+
21
+ def picasa( src, alt = "photo", place = 'photo' )
22
+ src.sub!( %r|/s\d+/|, "/s200/" ) if @conf.iphone?
23
+
24
+ if @cgi.mobile_agent?
25
+ body = %Q|<a href="#{src}">#{alt}</a>|
26
+ else
27
+ body = %Q|<img title="#{alt}" alt="#{alt}" src="#{src}" class="#{place} picasa">|
28
+ end
29
+ body
30
+ end
31
+
32
+ def picasa_left( src, alt = "photo" )
33
+ picasa( src, alt, 'left' )
34
+ end
35
+
36
+ def picasa_right( src, alt = "photo" )
37
+ picasa( src, alt, 'right' )
38
+ end
39
+
40
+ if /\A(form|edit|preview|showcomment)\z/ === @mode then
41
+ enable_js( 'picasa.js' )
42
+ add_js_setting( '$tDiary.plugin.picasa' )
43
+ add_js_setting( '$tDiary.plugin.picasa.userId', %Q|'#{@conf['picasa.user']}'| )
44
+ add_js_setting( '$tDiary.plugin.picasa.imgMax', %Q|'#{@conf[ 'picasa.default_size'] || 400}'| )
45
+ end
46
+
47
+ add_edit_proc do |date|
48
+ unless @conf['picasa.user']
49
+ '<p>[ERROR] picasa.rb: Picasa username is not specified.</p>'
50
+ else
51
+ <<-HTML
52
+ <h3 class="plugin_picasa"><span>Picasa Web Album</span></h3>
53
+ <div id="plugin_picasa"></div>
54
+ HTML
55
+ end
56
+ end
@@ -0,0 +1,41 @@
1
+ # plugin_checker.rb
2
+ #
3
+ # Copyright (c) 2012 MATSUOKA Kohei <kmachu@gmail.com>
4
+ # You can redistribute it and/or modify it under GPL2.
5
+ #
6
+
7
+ def plugin_checker_js_settings
8
+ enable_js('plugin_checker.js')
9
+ add_js_setting('$tDiary.plugins', plugins.to_json)
10
+ add_js_setting('$tDiary.mode', @mode.to_json)
11
+ end
12
+
13
+ if /\A(form|edit|preview|showcomment)\z/ === @mode
14
+ add_header_proc do
15
+ <<-STYLE
16
+ <style>
17
+ div.plugin_checker {
18
+ font-size: small;
19
+ margin: 0.5em;
20
+ padding: 0.5em;
21
+ border: solid 1px #999;
22
+ border-radius: 5px;
23
+ -moz-box-shadow:0 1px 3px rgba(0,0,0,0.25),0 -1px 0 rgba(0,0,0,0.1) inset;
24
+ -webkit-box-shadow:0 1px 3px rgba(0,0,0,0.25),0 -1px 0 rgba(0,0,0,0.1) inset;
25
+ box-shadow:0 1px 3px rgba(0,0,0,0.25),0 -1px 0 rgba(0,0,0,0.1) inset;
26
+ background: #feffff; /* Old browsers */
27
+ background: -moz-linear-gradient(top, #feffff 0%, #fbfcd4 100%); /* FF3.6+ */
28
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#feffff), color-stop(100%,#fbfcd4)); /* Chrome,Safari4+ */
29
+ background: -webkit-linear-gradient(top, #feffff 0%,#fbfcd4 100%); /* Chrome10+,Safari5.1+ */
30
+ background: -o-linear-gradient(top, #feffff 0%,#fbfcd4 100%); /* Opera 11.10+ */
31
+ background: -ms-linear-gradient(top, #feffff 0%,#fbfcd4 100%); /* IE10+ */
32
+ background: linear-gradient(to bottom, #feffff 0%,#fbfcd4 100%); /* W3C */
33
+ }
34
+ div.plugin_checker ul {
35
+ margin: 1em;
36
+ }
37
+ </style>
38
+ STYLE
39
+ end
40
+ plugin_checker_js_settings
41
+ end
data/plugin/popit.rb ADDED
@@ -0,0 +1,22 @@
1
+ # popit.rb:plugin embedding POP on POPit(http://pop-it.jp)
2
+ #
3
+ # usage:
4
+ # popit(pop_id) - pop_id: The id of the POP on POPit (e.g. 2000 http://pop-it.jp/item/amazon/1989/pop/2000 )
5
+ #
6
+ # Copyright (c) KAYA Satoshi <http://kayakaya.net/>
7
+ # You can redistributed it and/or modify if under GPL2.
8
+ #
9
+ def popit(pop_id, size = "large")
10
+ return unless pop_id
11
+
12
+ width_size = {"large" => "260", "small" => "180" }
13
+ height_size = {"large" => "380", "small" => "220" }
14
+ width_style = {"large" => "220px", "small" => "160px" }
15
+
16
+ sizequery = size == "large" ? "?size=large" : ''
17
+ r = ""
18
+ r << %Q|<iframe src="http://pop-it.jp/pop/blogparts/#{pop_id}#{sizequery}" frameborder="0" width="#{width_size[size]}" height="#{height_size[size]}"> </iframe>|
19
+ r << %Q|<div style="width:#{width_style[size]};margin:0;text-align:center;font-size:12px;">Powered by <a href="http://pop-it.jp" target="_blank" style="color: #edbe26;">POPit</a></div>|
20
+
21
+ return r
22
+ end
@@ -0,0 +1,19 @@
1
+ # prettify.rb
2
+
3
+ if /\A(?:latest|day|month|nyear)\z/ =~ @mode then
4
+ add_header_proc do
5
+ <<-HTML
6
+ <link href="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css" type="text/css" rel="stylesheet">
7
+ <script type="text/javascript" src="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js"></script>
8
+ <script type="text/javascript"><!--
9
+ if(window.addEventListener){
10
+ window.addEventListener("load", prettyPrint, false);
11
+ }else if(window.attachEvent){
12
+ window.attachEvent("onload", prettyPrint);
13
+ }else{
14
+ window.onload=prettyPrint;
15
+ }
16
+ // --></script>
17
+ HTML
18
+ end
19
+ end
data/plugin/prezi.rb ADDED
@@ -0,0 +1,10 @@
1
+ #
2
+ # prezi.rb: plugin embedding presentation on prezi.com
3
+ #
4
+ # Copyright (C) 2010 TADA Tadashi <t@tdtds.jp>
5
+ # You can redistribute it and/or modify it under GPL2.
6
+ #
7
+
8
+ def prezi( prezi_id, label = 'Link to presentation', size = [512,384] )
9
+ %Q|<object class="prezi" id="prezi_#{prezi_id}" name="prezi_#{prezi_id}" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="#{size[0]}" height="#{size[1]}"><param name="movie" value="http://prezi.com/bin/preziloader.swf"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="bgcolor" value="#ffffff"><param name="flashvars" value="prezi_id=#{prezi_id}&amp;lock_to_path=1&amp;color=ffffff&amp;autoplay=no"><embed id="preziEmbed_#{prezi_id}" name="preziEmbed_#{prezi_id}" src="http://prezi.com/bin/preziloader.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="#{size[0]}" height="#{size[1]}" bgcolor="#ffffff" flashvars="prezi_id=#{prezi_id}&amp;lock_to_path=1&amp;color=ffffff&amp;autoplay=no"></embed></object><div class="prezi"><a href="http://prezi.com/#{prezi_id}/">#{label}</div>|
10
+ end
data/plugin/profile.rb ADDED
@@ -0,0 +1,222 @@
1
+ #
2
+ # profile.rb: profile plugin for tDiary
3
+ #
4
+ # usage:
5
+ # profile(id[, service = :twitter])
6
+ # - id: user ID for profile service
7
+ # - service: profile service (default is :twitter)
8
+ # Choose from :github, :twitter, :friendfeed, :iddy
9
+ #
10
+ # Copyright (C) 2009 by MATSUOKA Kohei < http://www.machu.jp/ >
11
+ # Distributed under the GPL.
12
+ #
13
+ require 'timeout'
14
+ require 'rexml/document'
15
+ require 'open-uri'
16
+ require 'digest/md5'
17
+ require 'pstore'
18
+
19
+ module ::Profile
20
+ module Service
21
+ # base class for profile services
22
+ class Base
23
+ # default attributes
24
+ attr_reader :id
25
+ attr_reader :image
26
+ attr_reader :name
27
+ attr_reader :mail
28
+ attr_reader :description
29
+ attr_reader :link
30
+
31
+ # class instance variables
32
+ class << self
33
+ attr_reader :properties
34
+ attr_reader :endpoint_proc
35
+ end
36
+
37
+ # set property and xpath pair for parse XML document
38
+ def self.property(property, path)
39
+ @properties ||= {}
40
+ @properties[property] = path
41
+ end
42
+
43
+ # set endpoint proc (this proc is called by initialize method with id)
44
+ def self.endpoint(&block)
45
+ @endpoint_proc = block
46
+ end
47
+
48
+ def initialize(id, options = {})
49
+ @id = id
50
+ @options = options
51
+
52
+ if self.class.endpoint_proc
53
+ endpoint = self.class.endpoint_proc.call(id)
54
+ doc = fetch(endpoint)
55
+ parse(doc)
56
+ end
57
+ end
58
+
59
+ # get a XML document from endpoint and create REXML::Document instance
60
+ def fetch(endpoint)
61
+ timeout(5) do
62
+ open(endpoint) do |f|
63
+ doc = REXML::Document.new(f)
64
+ end
65
+ end
66
+ end
67
+
68
+ # parse XML document with properties
69
+ def parse(doc)
70
+ self.class.properties.each do |property, path|
71
+ if doc.elements[path]
72
+ value = doc.elements[path].text
73
+ instance_variable_set("@#{property}", value)
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ # github.com
80
+ class GitHub < Base
81
+ property :name, 'name'
82
+ property :mail, 'email'
83
+ endpoint {|id| "https://api.github.com/users/#{id}" }
84
+
85
+ def image
86
+ # "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(@mail)}.jpg"
87
+ Gravatar.new(@mail, @options).image
88
+ end
89
+
90
+ def link
91
+ "http://github.com/#{@id}"
92
+ end
93
+
94
+ def fetch(endpoint)
95
+ require 'json'
96
+ timeout(5) do
97
+ doc = open(endpoint) {|f| JSON.parse(f.read) }
98
+ end
99
+ end
100
+
101
+ def parse(doc)
102
+ self.class.properties.each do |property, key|
103
+ instance_variable_set("@#{property}", doc[key]) if doc[key]
104
+ end
105
+ end
106
+ end
107
+
108
+ # twitter.com
109
+ class Twitter < Base
110
+ property :name, '//user/name'
111
+ property :image, '//user/profile_image_url'
112
+ property :description, '//user/description'
113
+ endpoint {|id| "http://twitter.com/users/show/#{id}.xml" }
114
+
115
+ def link
116
+ "http://twitter.com/#{@id}"
117
+ end
118
+ end
119
+
120
+ # friendfeed.com
121
+ class FriendFeed < Base
122
+ property :name, '//feed/name'
123
+ property :description, '//feed/description'
124
+ endpoint {|id| "http://friendfeed-api.com/v2/feed/#{id}?format=xml&num=0" }
125
+
126
+ def image
127
+ "http://friendfeed-api.com/v2/picture/#{id}"
128
+ end
129
+
130
+ def link
131
+ "http://friendfeed.com/#{@id}"
132
+ end
133
+ end
134
+
135
+ # iddy.jp
136
+ # this class is based on iddy.rb
137
+ class Iddy < Base
138
+ ######################################################################
139
+ # If you will modify or release another version of this code,
140
+ # please get your own application key from iddy.jp and replace below.
141
+ ######################################################################
142
+ API_KEY = '9262ea8ffba962aabb4f1a1d3f1cfa953b11aa23' unless defined? API_KEY
143
+
144
+ property :name, '//response/users/user/accountname'
145
+ property :image, '//response/users/user/imageurl'
146
+ property :description, '/response/users/user/profile'
147
+ endpoint {|id| "http://iddy.jp/api/user/?apikey=#{API_KEY}&accountname=#{id}" }
148
+
149
+ def link
150
+ "http://iddy.jp/profile/#{@id}/"
151
+ end
152
+ end
153
+
154
+ # gravatar.com
155
+ class Gravatar < Base
156
+ def image
157
+ size = @options[:size] ? "?s=#{@options[:size]}" : ""
158
+ "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(@id.downcase)}.jpg#{size}"
159
+ end
160
+ end
161
+
162
+ class Hatena < Base
163
+ def image
164
+ prefix = id[0..1]
165
+ "http://www.hatena.ne.jp/users/#{prefix}/#{id}/profile.gif"
166
+ end
167
+
168
+ def link
169
+ "http://www.hatena.ne.jp/#{id}/"
170
+ end
171
+ end
172
+ end
173
+ end
174
+
175
+ PROFILE_VERSION = '20090909'
176
+
177
+ def profile(id, service = :twitter, options = {})
178
+ html = ''
179
+
180
+ service_class = {
181
+ :twitter => Profile::Service::Twitter,
182
+ :github => Profile::Service::GitHub,
183
+ :friendfeed => Profile::Service::FriendFeed,
184
+ :iddy => Profile::Service::Iddy,
185
+ :gravatar => Profile::Service::Gravatar,
186
+ :hatena => Profile::Service::Hatena,
187
+ }[service.to_s.downcase.to_sym]
188
+
189
+ # TODO: create cache manager class
190
+
191
+ # cache = "#{@cache_path}/profile.yaml"
192
+ cache = "#{@cache_path}/profile.pstore"
193
+ profile = nil
194
+ # db = YAML::Store.new(cache)
195
+ db = PStore.new(cache)
196
+ db.transaction do
197
+ key = service_class.name
198
+ db[key] ||= {} # initialize db
199
+ updated = db[key][:updated]
200
+ if updated && (Time::now < updated + 60 * 60) && db[key][:version] == PROFILE_VERSION
201
+ # use cache
202
+ profile = db[key][:profile]
203
+ else
204
+ # get latest date and update cache
205
+ begin
206
+ profile = service_class.new(id, options)
207
+ rescue Timeout::Error, StandardError
208
+ return html << %Q{ <div class="profile">no profile</div> }
209
+ end
210
+ db[key][:updated] = Time::now
211
+ db[key][:profile] = profile
212
+ db[key][:version] = PROFILE_VERSION
213
+ end
214
+ end
215
+
216
+ html << %Q{ <div class="profile"><a href="#{CGI.escapeHTML profile.link}"> }
217
+ html << %Q{ <span class="profile-image"><img src="#{CGI.escapeHTML profile.image}" alt="profile image"></span> } if profile.image
218
+ html << %Q{ <span class="profile-name">#{CGI.escapeHTML profile.name}</span> } if profile.name
219
+ html << %Q{ <span class="profile-mail">#{CGI.escapeHTML profile.mail}</span> } if profile.mail
220
+ html << %Q{ <span class="profile-description">#{CGI.escapeHTML profile.description}</span> } if profile.description
221
+ html << %Q{ </a></div> }
222
+ end
data/plugin/puboo.rb ADDED
@@ -0,0 +1,93 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (C) 2013, TADA Tadashi <t@tdtds.jp>
3
+ # Original code from tatsu_zine.rb by KADO Masanori <kdmsnr@gmail.com>
4
+ # You can redistribute it and/or modify it under GPL.
5
+ #
6
+ # display book info in http://p.booklog.jp/ like amazon.rb
7
+ # USAGE: {{puboo 9999}}
8
+
9
+ require 'open-uri'
10
+
11
+ def puboo_cache_dir
12
+ cache = "#{@cache_path}/puboo"
13
+ Dir.mkdir( cache ) unless File.directory?( cache )
14
+ cache
15
+ end
16
+
17
+ def puboo_cache_set( id, result )
18
+ File.open( "#{puboo_cache_dir}/#{id}", "w" ) do |f|
19
+ f.write result
20
+ end
21
+ end
22
+
23
+ def puboo_cache_get( id )
24
+ File.open( "#{puboo_cache_dir}/#{id}", "r" ) do |f|
25
+ f.read
26
+ end
27
+ rescue
28
+ nil
29
+ end
30
+
31
+ def puboo( id, doc = nil )
32
+ if !@conf.secure and !(result = puboo_cache_get(id)).nil?
33
+ return result
34
+ end
35
+
36
+ link = "http://p.booklog.jp/book/#{id}"
37
+ doc ||= open( link ).read
38
+ title = doc.match(%r|<meta property="og:title"\s*content="(.*)"|).to_a[1]
39
+ image = doc.match(%r|<meta property="og:image"\s*content="(.*)"|).to_a[1]
40
+ price = doc.match(%r|<th class="th_2">価格</th>.*?<span>(.*?)</span>.*?<br />|m).to_a[1]
41
+ author = doc.match(%r|<th>作者</th>(.*?)</td>|m).to_a[1].gsub(/<.*?>/, '').strip
42
+
43
+ result = <<-EOS
44
+ <a class="amazon-detail" href="#{h link}"><span class="amazon-detail">
45
+ <img class="amazon-detail left" src="#{h image}"
46
+ height="150" width="100"
47
+ alt="#{h title}">
48
+ <span class="amazon-detail-desc">
49
+ <span class="amazon-title">#{h title}</span><br>
50
+ <span class="amazon-author">#{h author}</span><br>
51
+ <span class="amazon-price">#{h price}</span>
52
+ </span><br style="clear: left">
53
+ </span></a>
54
+ EOS
55
+
56
+ puboo_cache_set( id, result ) unless @conf.secure
57
+ result
58
+ rescue
59
+ link
60
+ end
61
+
62
+ if __FILE__ == $0
63
+ require 'test/unit'
64
+ class TestTatsuZine < Test::Unit::TestCase
65
+ def setup
66
+ @conf = Struct.new("Conf", :secure).new(true)
67
+ def h(str); str; end
68
+ end
69
+
70
+ def test_puboo
71
+ expect = <<-EOS
72
+ <a class="amazon-detail" href="http://p.booklog.jp/book/70667"><span class="amazon-detail">
73
+ <img class="amazon-detail left" src="http://img.booklog.jp/667BDD9E-B13E-11E2-82F3-6425FFDA975F_l.jpg"
74
+ height="150" width="100"
75
+ alt="入門Puppet - Automate Your Infrastructure">
76
+ <span class="amazon-detail-desc">
77
+ <span class="amazon-title">入門Puppet - Automate Your Infrastructure</span><br>
78
+ <span class="amazon-author">栗林健太郎</span><br>
79
+ <span class="amazon-price">890円(税込)</span>
80
+ </span><br style="clear: left">
81
+ </span></a>
82
+ EOS
83
+ assert_equal expect, puboo('70667')
84
+ end
85
+ end
86
+ end
87
+
88
+ # Local Variables:
89
+ # mode: ruby
90
+ # indent-tabs-mode: t
91
+ # tab-width: 3
92
+ # ruby-indent-level: 3
93
+ # End:
@@ -0,0 +1,76 @@
1
+ #
2
+ # pygments.rb: insert CSS for html formatted code with Pygments.
3
+ #
4
+ # Copyright (C) 2012 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
5
+ # You can redistribute it and/or modify it under GPL2.
6
+ #
7
+ require 'pygments'
8
+
9
+ add_header_proc do
10
+ <<-STYLE
11
+ <style type="text/css"><!--
12
+ .highlight { background: white; }
13
+ .highlight .hll { background-color: #ffffcc }
14
+ .highlight .c { color: #408080; font-style: italic } /* Comment */
15
+ .highlight .err { border: 1px solid #FF0000 } /* Error */
16
+ .highlight .k { color: #008000; font-weight: bold } /* Keyword */
17
+ .highlight .o { color: #666666 } /* Operator */
18
+ .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
19
+ .highlight .cp { color: #BC7A00 } /* Comment.Preproc */
20
+ .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
21
+ .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
22
+ .highlight .gd { color: #A00000 } /* Generic.Deleted */
23
+ .highlight .ge { font-style: italic } /* Generic.Emph */
24
+ .highlight .gr { color: #FF0000 } /* Generic.Error */
25
+ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
26
+ .highlight .gi { color: #00A000 } /* Generic.Inserted */
27
+ .highlight .go { color: #808080 } /* Generic.Output */
28
+ .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
29
+ .highlight .gs { font-weight: bold } /* Generic.Strong */
30
+ .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
31
+ .highlight .gt { color: #0040D0 } /* Generic.Traceback */
32
+ .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
33
+ .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
34
+ .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
35
+ .highlight .kp { color: #008000 } /* Keyword.Pseudo */
36
+ .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
37
+ .highlight .kt { color: #B00040 } /* Keyword.Type */
38
+ .highlight .m { color: #666666 } /* Literal.Number */
39
+ .highlight .s { color: #BA2121 } /* Literal.String */
40
+ .highlight .na { color: #7D9029 } /* Name.Attribute */
41
+ .highlight .nb { color: #008000 } /* Name.Builtin */
42
+ .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
43
+ .highlight .no { color: #880000 } /* Name.Constant */
44
+ .highlight .nd { color: #AA22FF } /* Name.Decorator */
45
+ .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
46
+ .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
47
+ .highlight .nf { color: #0000FF } /* Name.Function */
48
+ .highlight .nl { color: #A0A000 } /* Name.Label */
49
+ .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
50
+ .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
51
+ .highlight .nv { color: #19177C } /* Name.Variable */
52
+ .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
53
+ .highlight .w { color: #bbbbbb } /* Text.Whitespace */
54
+ .highlight .mf { color: #666666 } /* Literal.Number.Float */
55
+ .highlight .mh { color: #666666 } /* Literal.Number.Hex */
56
+ .highlight .mi { color: #666666 } /* Literal.Number.Integer */
57
+ .highlight .mo { color: #666666 } /* Literal.Number.Oct */
58
+ .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
59
+ .highlight .sc { color: #BA2121 } /* Literal.String.Char */
60
+ .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
61
+ .highlight .s2 { color: #BA2121 } /* Literal.String.Double */
62
+ .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
63
+ .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
64
+ .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
65
+ .highlight .sx { color: #008000 } /* Literal.String.Other */
66
+ .highlight .sr { color: #BB6688 } /* Literal.String.Regex */
67
+ .highlight .s1 { color: #BA2121 } /* Literal.String.Single */
68
+ .highlight .ss { color: #19177C } /* Literal.String.Symbol */
69
+ .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
70
+ .highlight .vc { color: #19177C } /* Name.Variable.Class */
71
+ .highlight .vg { color: #19177C } /* Name.Variable.Global */
72
+ .highlight .vi { color: #19177C } /* Name.Variable.Instance */
73
+ .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
74
+ --></style>
75
+ STYLE
76
+ end