# -*- 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