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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +7 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +35 -0
- data/README.en.md +12 -0
- data/README.md +13 -0
- data/Rakefile +41 -0
- data/doc/en/filter/spambayes.txt +3 -0
- data/doc/en/plugin.txt +1 -0
- data/doc/en/style/hatena.txt +10 -0
- data/doc/en/style/markdown.txt +16 -0
- data/doc/en/util.txt +1 -0
- data/doc/ja/filter/antirefspam.history.txt +59 -0
- data/doc/ja/filter/antirefspam.txt +86 -0
- data/doc/ja/filter/comment_key.ja.html +182 -0
- data/doc/ja/filter/spambayes.txt +3 -0
- data/doc/ja/plugin/add_bookmark.txt +50 -0
- data/doc/ja/plugin/category_to_tag.txt +21 -0
- data/doc/ja/plugin/cocoment.txt +31 -0
- data/doc/ja/plugin/google_adsense.txt +25 -0
- data/doc/ja/plugin/google_analytics.txt +7 -0
- data/doc/ja/plugin/image_detail.txt +69 -0
- data/doc/ja/plugin/image_gps.txt +36 -0
- data/doc/ja/plugin/image_gps2.txt +41 -0
- data/doc/ja/plugin/livedoor_weather.txt +105 -0
- data/doc/ja/plugin/opensearch_ad.txt +16 -0
- data/doc/ja/plugin/section_footer.txt +84 -0
- data/doc/ja/plugin/select_theme.txt +1 -0
- data/doc/ja/plugin.txt +13 -0
- data/doc/ja/style/hatena.txt +10 -0
- data/doc/ja/style/markdown.txt +13 -0
- data/doc/ja/util.txt +12 -0
- data/filter/antirefspam.rb +263 -0
- data/filter/commentkey.rb +29 -0
- data/filter/commentsize.rb +18 -0
- data/filter/hidecomment.rb +13 -0
- data/filter/iplookup.rb +55 -0
- data/filter/plugin/antirefspam.rb +59 -0
- data/filter/plugin/commentkey.rb +58 -0
- data/filter/plugin/commentsize.rb +12 -0
- data/filter/plugin/en/iplookup.rb +9 -0
- data/filter/plugin/en/spambayes.rb +123 -0
- data/filter/plugin/iplookup.rb +39 -0
- data/filter/plugin/ja/antirefspam.rb +91 -0
- data/filter/plugin/ja/commentkey.rb +17 -0
- data/filter/plugin/ja/commentsize.rb +6 -0
- data/filter/plugin/ja/iplookup.rb +9 -0
- data/filter/plugin/ja/spambayes.rb +124 -0
- data/filter/plugin/spambayes.rb +501 -0
- data/filter/plugin/zh/iplookup.rb +9 -0
- data/filter/rblcheck.rb +36 -0
- data/filter/spambayes.rb +535 -0
- data/filter/spamlookup.rb +37 -0
- data/io/dbi_io/ChangeLog +19 -0
- data/io/dbi_io/README.ja +39 -0
- data/io/dbi_io/dbi_io.rb +181 -0
- data/io/dbi_io/plugin/refererDbiIO.rb +76 -0
- data/io/dbi_io/tdiary_table.sql +42 -0
- data/js/appstore.js +109 -0
- data/js/datepicker.js +69 -0
- data/js/editor.js +82 -0
- data/js/flickr.js +157 -0
- data/js/image_ex.js +79 -0
- data/js/jquery.socialbutton.js +842 -0
- data/js/nicovideo.js +17 -0
- data/js/picasa.js +322 -0
- data/js/plugin_checker.js +71 -0
- data/js/prettify/lang-apollo.js +2 -0
- data/js/prettify/lang-clj.js +18 -0
- data/js/prettify/lang-css.js +2 -0
- data/js/prettify/lang-go.js +1 -0
- data/js/prettify/lang-hs.js +2 -0
- data/js/prettify/lang-lisp.js +3 -0
- data/js/prettify/lang-lua.js +2 -0
- data/js/prettify/lang-ml.js +2 -0
- data/js/prettify/lang-n.js +4 -0
- data/js/prettify/lang-proto.js +1 -0
- data/js/prettify/lang-scala.js +2 -0
- data/js/prettify/lang-sql.js +2 -0
- data/js/prettify/lang-tex.js +1 -0
- data/js/prettify/lang-vb.js +2 -0
- data/js/prettify/lang-vhdl.js +3 -0
- data/js/prettify/lang-wiki.js +2 -0
- data/js/prettify/lang-xq.js +3 -0
- data/js/prettify/lang-yaml.js +2 -0
- data/js/prettify/prettify.css +1 -0
- data/js/prettify/prettify.js +28 -0
- data/js/referer.js +17 -0
- data/js/show_and_hide.js +39 -0
- data/js/socialbutton.js +126 -0
- data/js/twitter_anywhere.js +28 -0
- data/js/yahoo_kousei.js +21 -0
- data/lib/bayes/convert.rb +34 -0
- data/lib/bayes.rb +232 -0
- data/lib/exifparser/BUGS +1 -0
- data/lib/exifparser/ChangeLog +169 -0
- data/lib/exifparser/README +15 -0
- data/lib/exifparser/install.rb +1015 -0
- data/lib/exifparser/lib/exifparser/makernote/canon.rb +502 -0
- data/lib/exifparser/lib/exifparser/makernote/fujifilm.rb +415 -0
- data/lib/exifparser/lib/exifparser/makernote/minolta.rb +84 -0
- data/lib/exifparser/lib/exifparser/makernote/mk_nikonflensname.rb +39 -0
- data/lib/exifparser/lib/exifparser/makernote/nikon.rb +267 -0
- data/lib/exifparser/lib/exifparser/makernote/nikon2.rb +581 -0
- data/lib/exifparser/lib/exifparser/makernote/nikonflensname.rb +438 -0
- data/lib/exifparser/lib/exifparser/makernote/olympus.rb +225 -0
- data/lib/exifparser/lib/exifparser/makernote/prove.rb +84 -0
- data/lib/exifparser/lib/exifparser/makernote/sigma.rb +237 -0
- data/lib/exifparser/lib/exifparser/pre-setup.rb +1 -0
- data/lib/exifparser/lib/exifparser/scan.rb +278 -0
- data/lib/exifparser/lib/exifparser/tag.rb +2298 -0
- data/lib/exifparser/lib/exifparser/thumbnail.rb +76 -0
- data/lib/exifparser/lib/exifparser/utils.rb +88 -0
- data/lib/exifparser/lib/exifparser.rb +265 -0
- data/lib/exifparser/sample/exifview.rb +279 -0
- data/lib/tdiary-contrib.rb +19 -0
- data/lib/wgs2tky.rb +93 -0
- data/misc/section_footer2/buzzurl.yaml +6 -0
- data/misc/section_footer2/fc2.yaml +6 -0
- data/misc/section_footer2/ldc.yaml +6 -0
- data/misc/section_footer2/retweet.yaml +7 -0
- data/misc/section_footer2/twitter.yaml +7 -0
- data/misc/section_footer2/yahoo.yaml +6 -0
- data/misc/tdiarygraph/tdiarygraph120x90e.swf +0 -0
- data/misc/tdiarygraph/tdiarygraph125x125e.swf +0 -0
- data/misc/tdiarygraph/tdiarygraph240x180e.swf +0 -0
- data/misc/tdiarygraph/tdiarygraph468x60e.swf +0 -0
- data/misc/tdiarygraph/tdiarygraph728x90e.swf +0 -0
- data/misc/tdiarytimes/tdiarytimes125x125r.swf +0 -0
- data/misc/tdiarytimes/tdiarytimes125x125r7.swf +0 -0
- data/misc/tdiarytimes/tdiarytimes125x125s.swf +0 -0
- data/misc/tdiarytimes/tdiarytimes125x30.swf +0 -0
- data/misc/tdiarytimes/tdiarytimes234x30.swf +0 -0
- data/misc/tdiarytimes/tdiarytimes468x30.swf +0 -0
- data/plugin/add_bookmark.rb +89 -0
- data/plugin/apple_webclip.rb +26 -0
- data/plugin/appstore.rb +47 -0
- data/plugin/bigpresen.rb +86 -0
- data/plugin/bitly.rb +39 -0
- data/plugin/bootstrap-navi.rb +54 -0
- data/plugin/canonical.rb +9 -0
- data/plugin/category_similar.rb +73 -0
- data/plugin/category_to_tag.rb +60 -0
- data/plugin/category_to_tagcloud.rb +172 -0
- data/plugin/cocomment.rb +37 -0
- data/plugin/code-prettify.rb +23 -0
- data/plugin/coderwall.rb +34 -0
- data/plugin/datepicker.rb +28 -0
- data/plugin/day2section.rb +20 -0
- data/plugin/del_footer.rb +111 -0
- data/plugin/description_from_body.rb +23 -0
- data/plugin/development.rb +16 -0
- data/plugin/editor.rb +11 -0
- data/plugin/en/add_bookmark.rb +20 -0
- data/plugin/en/del_footer.rb +10 -0
- data/plugin/en/git-register.rb +3 -0
- data/plugin/en/livedoor_weather.rb +25 -0
- data/plugin/en/microsummary.rb +18 -0
- data/plugin/en/nicovideo.rb +38 -0
- data/plugin/en/openid.rb +8 -0
- data/plugin/en/section_footer.rb +6 -0
- data/plugin/en/section_footer2.rb +3 -0
- data/plugin/en/socialbutton.rb +5 -0
- data/plugin/everytrail.rb +39 -0
- data/plugin/facebook_comments.rb +59 -0
- data/plugin/flickr.rb +209 -0
- data/plugin/gist.rb +16 -0
- data/plugin/git-register.rb +240 -0
- data/plugin/github_badge.rb +27 -0
- data/plugin/github_link.rb +9 -0
- data/plugin/goo_gl.rb +42 -0
- data/plugin/google_adsense.rb +132 -0
- data/plugin/google_analytics.rb +39 -0
- data/plugin/google_map.rb +168 -0
- data/plugin/google_sitemaps.rb +60 -0
- data/plugin/google_webmaster.rb +22 -0
- data/plugin/hatena_bookmark_nocomment.rb +9 -0
- data/plugin/hatena_star.rb +66 -0
- data/plugin/hb_footer.rb +255 -0
- data/plugin/hb_footer4sec.rb +244 -0
- data/plugin/hb_footer4sec_js.rb +30 -0
- data/plugin/hide_comment_form.rb +4 -0
- data/plugin/hide_sidebar_iphone.rb +21 -0
- data/plugin/iddy.rb +81 -0
- data/plugin/image_detail.rb +143 -0
- data/plugin/image_ex.rb +462 -0
- data/plugin/image_gps.rb +128 -0
- data/plugin/inline_wiki.rb +6 -0
- data/plugin/instagr.rb +64 -0
- data/plugin/ja/add_bookmark.rb +20 -0
- data/plugin/ja/del_footer.rb +10 -0
- data/plugin/ja/flickr.rb +62 -0
- data/plugin/ja/git-register.rb +3 -0
- data/plugin/ja/google_sitemaps.rb +35 -0
- data/plugin/ja/livedoor_weather.rb +25 -0
- data/plugin/ja/microsummary.rb +18 -0
- data/plugin/ja/nicovideo.rb +41 -0
- data/plugin/ja/openid.rb +7 -0
- data/plugin/ja/section_footer.rb +6 -0
- data/plugin/ja/section_footer2.rb +4 -0
- data/plugin/ja/socialbutton.rb +6 -0
- data/plugin/jdate.rb +20 -0
- data/plugin/jholiday.rb +16 -0
- data/plugin/jmonth.rb +20 -0
- data/plugin/jquery_ui_theme.rb +55 -0
- data/plugin/jroku.rb +28 -0
- data/plugin/jyear.rb +37 -0
- data/plugin/latlonglab_route.rb +25 -0
- data/plugin/lazy_referer.rb +38 -0
- data/plugin/livedoor_weather.rb +180 -0
- data/plugin/make_link.rb +44 -0
- data/plugin/makerss_category.rb +43 -0
- data/plugin/makerss_comment.rb +35 -0
- data/plugin/microsummary.rb +62 -0
- data/plugin/mm_footer.rb +215 -0
- data/plugin/monthly_autopagerize.rb +67 -0
- data/plugin/my_hotentry.rb +132 -0
- data/plugin/navi_day.rb +118 -0
- data/plugin/navi_this_month.rb +15 -0
- data/plugin/nicovideo.rb +115 -0
- data/plugin/notify_miniblog.rb +134 -0
- data/plugin/ogp.rb +55 -0
- data/plugin/ohmsha_estore.rb +71 -0
- data/plugin/openid.rb +90 -0
- data/plugin/opensearch_ad.rb +33 -0
- data/plugin/picasa.rb +56 -0
- data/plugin/plugin_checker.rb +41 -0
- data/plugin/popit.rb +22 -0
- data/plugin/prettify.rb +19 -0
- data/plugin/prezi.rb +10 -0
- data/plugin/profile.rb +222 -0
- data/plugin/puboo.rb +93 -0
- data/plugin/pygments_css.rb +76 -0
- data/plugin/rating.rb +419 -0
- data/plugin/recent_estraier.rb +50 -0
- data/plugin/recent_tweet.rb +71 -0
- data/plugin/retweet.rb +86 -0
- data/plugin/rubykaigi.rb +99 -0
- data/plugin/search-bing.rb +87 -0
- data/plugin/search-default.rb +264 -0
- data/plugin/search-google-custom.rb +60 -0
- data/plugin/search-yahoo-websearch.rb +121 -0
- data/plugin/search-yahoo.rb +109 -0
- data/plugin/section_footer.rb +195 -0
- data/plugin/section_footer2.rb +278 -0
- data/plugin/section_permalink.rb +73 -0
- data/plugin/section_permalink_anchor.rb +39 -0
- data/plugin/select_style.rb +42 -0
- data/plugin/select_theme.rb +90 -0
- data/plugin/show_and_hide.rb +77 -0
- data/plugin/slideshare.rb +10 -0
- data/plugin/socialbutton.rb +60 -0
- data/plugin/tatsu_zine.rb +93 -0
- data/plugin/tdiarygraph_flashstyle.rb +296 -0
- data/plugin/tdiarytimes.rb +166 -0
- data/plugin/tdiarytimes2.rb +406 -0
- data/plugin/tdiarytimes_flashstyle.rb +263 -0
- data/plugin/tdiarytimes_textstyle.rb +290 -0
- data/plugin/title_anchor.rb +16 -0
- data/plugin/tweet_quote.rb +106 -0
- data/plugin/twitpic.rb +10 -0
- data/plugin/twitter.rb +46 -0
- data/plugin/twitter_anywhere.rb +209 -0
- data/plugin/twitter_badge.rb +42 -0
- data/plugin/twitter_js.rb +59 -0
- data/plugin/ustream.rb +19 -0
- data/plugin/vimeo.rb +14 -0
- data/plugin/volatile.rb +89 -0
- data/plugin/vote.rb +100 -0
- data/plugin/wikiloc.rb +27 -0
- data/plugin/windex.rb +512 -0
- data/plugin/yahoo_kousei.rb +79 -0
- data/plugin/yahoo_map.rb +97 -0
- data/plugin/youtube.rb +33 -0
- data/plugin/yshop.rb +189 -0
- data/plugin/zenback.rb +46 -0
- data/spec/apple_webclip_spec.rb +46 -0
- data/spec/fixtures/friendfeed.xml +2 -0
- data/spec/fixtures/github.json +1 -0
- data/spec/fixtures/twitter.xml +73 -0
- data/spec/gist_spec.rb +16 -0
- data/spec/github_link_spec.rb +39 -0
- data/spec/google_analytics_spec.rb +60 -0
- data/spec/jdate_spec.rb +23 -0
- data/spec/jmonth_spec.rb +28 -0
- data/spec/jyear_spec.rb +21 -0
- data/spec/my_hotentry_spec.rb +78 -0
- data/spec/openid_spec.rb +246 -0
- data/spec/opensearch_ad_spec.rb +50 -0
- data/spec/profile_spec.rb +88 -0
- data/spec/rcov.opts +2 -0
- data/spec/spec_helper.rb +223 -0
- data/spec/title_anchor_spec.rb +39 -0
- data/spec/twitter_js_spec.rb +116 -0
- data/spec/youtube_spec.rb +20 -0
- data/style/hatena_style.rb +1011 -0
- data/style/markdown_style.rb +239 -0
- data/style/wikiext_style.rb +21 -0
- data/tdiary-contrib.gemspec +25 -0
- data/util/clean-spam/README.ja +1 -0
- data/util/clean-spam/tdiary-comment-clean +46 -0
- data/util/clean-spam/tdiary-comment-clean2 +81 -0
- data/util/clean-spam/tdiary-referer-clean +46 -0
- data/util/convert_pstore.rb +82 -0
- data/util/estraier-search/ChangeLog +36 -0
- data/util/estraier-search/README.ja +114 -0
- data/util/estraier-search/en/estraier-register.rb +3 -0
- data/util/estraier-search/estraier-register.rb +298 -0
- data/util/estraier-search/estraier-search.rb +273 -0
- data/util/estraier-search/estraier.rhtml +73 -0
- data/util/estraier-search/estraier.rxml +23 -0
- data/util/estraier-search/i.estraier.rhtml +31 -0
- data/util/estraier-search/ja/estraier-register.rb +3 -0
- data/util/image-gallery/README.ja +27 -0
- data/util/image-gallery/image-gallery.rb +523 -0
- data/util/image-gallery/image-gallery.rb.euc-jp +523 -0
- data/util/image-gallery/js/SmoothGallery/Changelog +52 -0
- data/util/image-gallery/js/SmoothGallery/css/ReMooz.css +186 -0
- data/util/image-gallery/js/SmoothGallery/css/img/carrow1.gif +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/carrow2.gif +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/closebox.gif +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/closebox.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/fleche1.gif +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/fleche1.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/fleche2.gif +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/fleche2.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/loading-bar-black.gif +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/open.gif +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/open.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_e.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_n.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_ne.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_nw.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_s.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_se.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_sw.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_w.png +0 -0
- data/util/image-gallery/js/SmoothGallery/css/img/spinner.gif +0 -0
- data/util/image-gallery/js/SmoothGallery/css/jd.gallery.css +371 -0
- data/util/image-gallery/js/SmoothGallery/css/layout.css +91 -0
- data/util/image-gallery/js/SmoothGallery/license.txt +621 -0
- data/util/image-gallery/js/SmoothGallery/resizer.php +113 -0
- data/util/image-gallery/js/SmoothGallery/scripts/Changelog +52 -0
- data/util/image-gallery/js/SmoothGallery/scripts/History.Routing.js +126 -0
- data/util/image-gallery/js/SmoothGallery/scripts/History.js +109 -0
- data/util/image-gallery/js/SmoothGallery/scripts/ReMooz.js +364 -0
- data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.js +843 -0
- data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.set.js +183 -0
- data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.transitions.js +90 -0
- data/util/image-gallery/js/SmoothGallery/scripts/jdgalleryresize.js +828 -0
- data/util/image-gallery/js/SmoothGallery/scripts/license.txt +621 -0
- data/util/image-gallery/js/SmoothGallery/scripts/mootools-1.2-more.js +103 -0
- data/util/image-gallery/js/SmoothGallery/scripts/mootools-1.2.1-core-yc.js +349 -0
- data/util/image-gallery/js/SmoothGallery/scripts/resizer.php +113 -0
- data/util/image-gallery/misc/plugin/recent_image.rb +406 -0
- data/util/image-gallery/skel/gallery.rhtml +154 -0
- data/util/image-gallery/skel/gallery.rhtml.euc-jp +154 -0
- data/util/image-gallery/tdiary.conf.igsample +8 -0
- data/util/image-gallery/theme/image-gallery.css +85 -0
- data/util/image2flickr.rb +282 -0
- data/util/posttdiary/README.ja +12 -0
- data/util/posttdiary/posttdiary-ex.rb +1155 -0
- data/util/posttdiary/posttdiary.rb +245 -0
- data/util/rast-search/ChangeLog +55 -0
- data/util/rast-search/README.ja +99 -0
- data/util/rast-search/en/rast-register.rb +3 -0
- data/util/rast-search/i.rast.rhtml +33 -0
- data/util/rast-search/ja/rast-register.rb +3 -0
- data/util/rast-search/rast-register.rb +326 -0
- data/util/rast-search/rast-search.rb +249 -0
- data/util/rast-search/rast.rhtml +66 -0
- data/util/rast-search/rast.rxml +21 -0
- data/util/section_link/README +11 -0
- data/util/section_link/misc/plugin/section_link.rb +68 -0
- data/util/section_link/misc/plugin/section_link_anchor.rb +38 -0
- data/util/section_link/tdiary/tdiary_day_ext.rb +21 -0
- data/util/section_link/tdiary/tdiaryext_style.rb +36 -0
- data/util/section_link/tdiary/wikiext_style.rb +36 -0
- data/util/tdiary-for-ruby1.9/compatible.rb +97 -0
- data/util/tdiary-for-ruby1.9/tdiary-2.2.0.patch +98 -0
- data/util/tdiary-for-ruby1.9/tdiary-2.3.1.patch +212 -0
- data/util/tdiary-grep/README +4 -0
- data/util/tdiary-grep/grep.rb +445 -0
- data/util/tdiary-mode/http.el +130 -0
- data/util/tdiary-mode/tdiary-mode.el +613 -0
- data/util/tdiary-vim/ChangeLog +25 -0
- data/util/tdiary-vim/README +60 -0
- data/util/tdiary-vim/tdiary.vim +350 -0
- data/util/tdiarysearch/README.en +53 -0
- data/util/tdiarysearch/README.ja +99 -0
- data/util/tdiarysearch/search.rb +504 -0
- 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
|
+
'&' => '&',
|
432
|
+
'<' => '<',
|
433
|
+
'>' => '>',
|
434
|
+
'"' => '"'
|
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
|