OSDN Git Service

AUTHORS
authormorimoto <morimoto@180c8125-5b33-4295-ad04-72a68a15b4cc>
Sat, 2 Aug 2008 18:38:53 +0000 (18:38 +0000)
committermorimoto <morimoto@180c8125-5b33-4295-ad04-72a68a15b4cc>
Sat, 2 Aug 2008 18:38:53 +0000 (18:38 +0000)
AUTHORS
lib/plugins/32address

diff --git a/AUTHORS b/AUTHORS
index 70cd367..31cc8b2 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -9,3 +9,4 @@ matsui <matsui@iij-mc.co.jp>
 Tetsuji Ogata <ogata-t@fonfun.co.jp>
 Makoto Matsushita <matusita@jp.FreeBSD.org>
 Takahashi Yoshihiro <nyan@jp.FreeBSD.org>
+Takuo KITAME
index 5725fca..0e21a1e 100644 (file)
 # -*- mode: perl; coding: utf-8 -*-
 # keitairc/lib/plugins/32address
+# based on 'Add link to google maps japan on address-like texts'
+# by twk, from http://nonn-et-twk.net/twk/node/51
 # 
-# $Id: 32address,v 1.3 2008-06-29 09:20:49 morimoto Exp $
+# $Id: 32address,v 1.4 2008-08-02 18:38:53 morimoto Exp $
 # $Source: /home/ishikawa/work/keitairc/tmp/keitairc/lib/plugins/32address,v $
 
 # The line number (1 incremented) and filename below must be
 # actual. see perlsyn.
-# line 10 "keitairc/lib/plugins/32address"
+# line 12 "keitairc/lib/plugins/32address"
+
+use Encode;
+use utf8;
+
 
 $plugin = {
        name => 'address',
-       action_imprementation => sub {
-               my ($request, $name, $session_id, $param) = @_;
-               my $ci = new Keitairc::ClientInfo($request);
-               my $view = new Keitairc::View($::cf, $ci);
-               return $view->render('address.html', {
-                       session_id => $session_id,
-                       address => ::uri_unescape($param),
-                       escaped_address => $param,
-                            });
+       message_replace_regexp => '',
+       message_replace_imprementation => sub { '' },
+};
+
+1;
+
+__END__
+
+my $WHITESPACE_ex = q/[\s ::()\[\][]「」()、。]/;
+my $NO_WHITESPACE_ex = q/[^\s ::()\[\][]「」()、。]/;
+my $TODOFUKEN_ex = q/(?:東京都|練馬区|北海道|(?:大阪|京都)府|(?:青森|岩手|宮城|秋田|山形|福島|茨城|栃木|群馬|埼玉|千葉|神奈川|新潟|富山|石川|福井|山梨|長野|岐阜|静岡|愛知|三重|滋賀|兵庫|奈良|和歌山|鳥取|島根|岡山|広島|山口|徳島|香川|愛媛|高知|福岡|佐賀|長崎|熊本|大分|宮崎|鹿児島|沖縄)県)(?![\d0-9])/;
+my $CITY_SEPARATE_CHAR_ex = '(?:^|' . $WHITESPACE_ex . ')';
+my $SHICHOSON_ex = $NO_WHITESPACE_ex . '{1,4}[郡市区]';
+my $AZA_ex = $NO_WHITESPACE_ex . '{1,20}';
+my $BANCHI_ex = q/[\d0-9]/ . '{1,8}'; # 一二三四五六七八九十東西南北無ABC
+my $KYOTO_ex = q/京都[府市]\S{6,20}(?:(?:[上下][るル])|(?:[東西]入[るル]?)|入中)/;
+my $BUILDING1_re = q/^[^\d0-9]+[\d0-9]+(?:(?:[-―-ー]|丁目|番地?|号)[\d0-9]+)+/;
+my $BUILDING2_re = q/^(.*(?:丁目|番地?|号))[^地\d0-9]+(?:ビル|$)/;
+
+my $re = {
+       general =>
+               '(?:' .
+                 $TODOFUKEN_ex . '|' . $CITY_SEPARATE_CHAR_ex . $SHICHOSON_ex .
+               ')' . '[ \t ]*' .
+               '(?:' .
+                 $AZA_ex . '[ \t ]*' .
+                 '(?:' . $BANCHI_ex . '(?:丁目|番地?|号)?[-―-ー]?)' . '{1,4}' .
+               ')' .
+               '|' . $KYOTO_ex,
+               building1 => $BUILDING1_re,
+               building2 => $BUILDING2_re,
+};
+
+for my $s (
+       '京都市中京区六角通東洞院東入ル',
+       '北海道札幌市中央区南3条西2丁目狸小路2丁目',
+       '神奈川県足柄下郡箱根町小涌谷503',
+       '静岡県下田市一丁目12-17',
+       '大阪府大阪市中央区上町A番23号',
+       '東京都渋谷区恵比寿1-19-15 ウノサワ東急ビル5階',
+       '紫波郡矢巾町大字南矢幅第13地割123番地',
+       '練馬区石神井台3-2-4',
+       ){
+
+       my $m = 'ここって' . $s . 'ですよね';
+       warn 'mes -> [' . $m . ']';
+
+       if($m =~ s/.*($re->{general}).*/$1/){
+               warn 'src -> [' . $m . ']';
+       }
+
+       # remove building names since google maps rarely recognize them
+       if($m =~ s/($re->{building1}).*/$1/){
+               warn 'building1 -> [' . $m . ']';
        }
+       if($m =~ s/$re->{building2}.*/$1/){
+               warn 'building2 -> [' . $m . ']';
+       }
+
+
+       warn "\n";
+}
+
+
+__END__
+
+$plugin = {
+       name => 'address',
+       message_replace_regexp => $re->{general},
+       message_replace_imprementation => sub {
+               my ($session_id, $m) = @_;
+               my $m = Encode::decode($::cf->web_charset(), $m);
+
+
+
+               $text = ::uri_escape($text);
+               return sprintf('<a href="%s%s/address/%s">%s</a>',
+                              $::cf->web_root(), $session_id, $tmp, $str);
+       },
 };
 
+                       var building = m.match(re.building1);
+                       if (building)
+                               m = building[0];
+                       var building2 = m.match(re.building2);
+                       if (building2)
+                               m = building2[1];
+
+                       // split at first matched place
+                       var matchedNode = node.splitText(text.indexOf(m));
+                       MakeLink(matchedNode, m);
+
+                       ++arguments.callee.count;
+               }
+       }
+
+       function MakeLink(matchedNode, matchedText)
+       {
+               matchedNode.splitText(matchedText.length);
+               var anchorNode = document.createElement('A');
+               anchorNode.style.backgroundColor = '#66bb4a'; // google maps arrow color
+               anchorNode.style.color = '#000000';
+               anchorNode.title = 'Googleマップ';
+               anchorNode.href = 'http://maps.google.co.jp/?hl=ja&q='
+                       + encodeURI(matchedNode.data.replace(/[\s ::、。]/, ''));
+               anchorNode.appendChild(matchedNode.cloneNode(true));
+               matchedNode.parentNode.replaceChild(anchorNode, matchedNode);
+       }
+} // AddressLink
+
+
+
+
+
 1;
+
+__END__
+群馬県館林市楠町3648-1
+群馬県高崎市中尾町字鳥羽前44-7
+群馬県太田市石原町81番地イオン太田1階
+長野県茅野市中沖12-4
+三重県四日市市泊小柳町4-5
+青森県十和田市三本木字千歳森169-1
+青森県上北郡おいらせ町住吉4-50-33
+埼玉県川越市泉町3-1
+埼玉県川越市泉町3丁目1
+埼玉県川越市泉町3丁目1番地なんですが
+埼玉県川越市泉町3丁目1番が
+埼玉県川越市泉町3丁目1番です
+埼玉県川越市泉町三丁目一番です
+東京都武蔵野市吉祥寺北町1-1-1桜井ビル1階
+東京都新宿区喜久井町10イプセ新宿夏目坂
+東京都中央区佃1-11-8 リバーシティー21ピアウェスト
+東京都品川区西大井1-4-25コアスターレ西大井第一ビル
+東京都渋谷区円山町26-7 TKフラッツ渋谷
+帯広市稲田町南8線西10-1