# -*- coding: utf-8 -*-
from mod_python import apache
import os, re, sys, time
import time
from xml.dom import Node
from xml.dom.NodeFilter import NodeFilter
from xml.dom import ext
from xml.dom.ext.reader import HtmlLib

class Pattern:
    dict = {}
    re = re.compile("")
    
    def __init__(self, dict, tag, *args):
        type.__init__(self, *args)
        self.dict = dict
        before = tag.replace("|", ">|<")
        after = tag.replace("|", ">|</")
        self.re = re.compile("(<%s>)([^<]*)(</%s>)" % (before, after))
    
class Translation:
    """Weather data translation information."""
    dict_state = {
        "Japan": "日本"
        }
    
    dict_city = {
        "Abashiri": "網走",
        "Abiko": "我孫子",
        "Aburatsu": "油津",
        "Ageo": "上尾",
        "Ai": "Ai",
        "Aidomari": "相泊",
        "Aigadani": "",
        "Aikawa": "相川",
        "Aimata": "相俣",
        "Aimoto": "相本",
        "Ajiro": "足代",
        "Akabane": "赤羽",
        "Akakura": "赤倉",
        "Akamatsu": "赤松",
        "Akane": "Akane",
        "Akankohan": "阿寒湖畔",
        "Akano": "Akano",
        "Akasakata": "赤坂田",
        "Akashi": "明石",
        "Akenobe": "Akenobe",
        "Akimoto": "Akimoto",
        "Akita": "秋田",
        "Akkeshi": "厚岸",
        "Ako": "Ako",
        "Akune": "Akune",
        "Amagasaki": "尼崎",
        "Amagase": "天瀬",
        "Amaze": "尼瀬",
        "Amo": "Amo",
        "Anjo": "安城",
        "Aomori": "青森",
        "Aose": "青瀬",
        "Arakawaguchi": "荒川口",
        "Arakura": "Arakura",
        "Araragi": "Araragi",
        "Araso": "Araso",
        "Araya": "Araya",
        "Arikabe": "有壁",
        "Asahi": "Asahi",
        "Asahikawa": "旭川",
        "Asahiyama": "旭山",
        "Asaka": "朝霞",
        "Ashikaga": "足利",
        "Ashio": "足尾",
        "Ashiya": "芦屋",
        "Ashu": "芦生",
        "Aso": "阿蘇",
        "Atsugi": "厚木",
        "Azusayama": "梓山",
        "Bekku": "別宮",
        "Benkei": "弁慶",
        "Beppu": "別府",
        "Chiba": "千葉",
        "Chigasaki": "茅ヶ崎",
        "Chinase": "知名瀬",
        "Chisaka": "千坂",
        "Chitose": "千歳",
        "Chofu": "調布",
        "Choja": "長者",
        "Chojahara": "長者原",
        "Choshi": "銚子",
        "Chusha": "Chusha",
        "Dai": "Dai",
        "Daimommachi": "大門町",
        "Dairakozan": "Dairakozan",
        "Daisen": "Daisen",
        "Daito": "Daito",
        "Deai": "Deai",
        "Doai": "Doai",
        "Doi": "Doi",
        "Ebetsu": "江別",
        "Ebi": "Ebi",
        "Esashi": "江差",
        "Fuchu": "府中",
        "Fuji": "富士",
        "Fujieda": "藤枝",
        "Fujinoike": "Fujinoike",
        "Fujinokawa": "藤の川",
        "Fujinomiya": "富士宮",
        "Fujisawa": "藤沢",
        "Fujita": "藤田",
        "Fujitsuka": "藤塚",
        "Fujitsukahama": "藤塚浜",
        "Fujiwara": "藤原",
        "Fukae": "深江",
        "Fukaura": "深浦",
        "Fukuda": "福田",
        "Fukue": "福江",
        "Fukui": "福井",
        "Fukuoka": "福岡",
        "Fukura": "福良",
        "Fukushima": "福島",
        "Fukuyama": "福山",
        "Funabashi": "船橋",
        "Furebetsu": "Furebetsu",
        "Furukawa": "古河",
        "Furuseki": "古関",
        "Futaba": "Futaba",
        "Futamata": "二俣",
        "Futenma": "普天間",
        "Ganyu": "Ganyu",
        "Gifu": "Gifu",
        "Gongen": "Gongen",
        "Hachinohe": "八戸",
        "Hachioji": "八王子",
        "Hadano": "秦野",
        "Hagi": "萩",
        "Haginari": "Haginari",
        "Hakodate": "函館",
        "Hamada": "Hamada",
        "Hamamatsu": "浜松",
        "Hamano": "浜野",
        "Hanamaki": "花巻",
        "Handa": "半田",
        "Hanezawa": "羽沢",
        "Hateruma": "波照間",
        "Hayakawa": "早川",
        "Hazako": "迫子",
        "Hibara": "Hibara",
        "Hidaka": "日高",
        "Hidariishi": "左石",
        "Hige": "Hige",
        "Hikone": "彦根",
        "Himeji": "姫路",
        "Hinata": "Hinata",
        "Hino": "日野",
        "Hinoemata": "檜枝岐",
        "Hinokage": "日之影",
        "Hirakata": "枚方",
        "Hirase": "平瀬",
        "Hiratsuka": "平塚",
        "Hirayu": "平湯",
        "Hiroo": "広尾",
        "Hirosaki": "弘前",
        "Hiroshima": "広島",
        "Hirugami": "昼神",
        "Hita": "日田",
        "Hitachi": "Hitachi",
        "Hitoyoshi": "Hitoyoshi",
        "Hiura": "日浦",
        "Hofu": "Hofu",
        "Hosoibara": "Hosoibara",
        "Hyotan": "Hyotan",
        "Ibaraki": "茨城",
        "Ibuki": "伊吹",
        "Ichihara": "市原",
        "Ichikawa": "市川",
        "Ichinomiya": "一宮",
        "Ichinosawa": "Ichinosawa",
        "Iizuka": "飯塚",
        "Ikeda": "池田",
        "Ikisan": "一貴山",
        "Ikoma": "生駒",
        "Imabari": "今治",
        "Inuma": "井沼",
        "Iori": "Iori",
        "Irori": "Irori",
        "Iruma": "入間",
        "Ise": "伊勢",
        "Isemachi": "伊勢町",
        "Isesaki": "伊勢崎",
        "Ishigaki": "石垣",
        "Ishino": "Ishino",
        "Ishinomaki": "石巻",
        "Ishizakikozan": "Ishizakikozan",
        "Itami": "伊丹",
        "Itchu": "Itchu",
        "Iwaki": "Iwaki",
        "Iwakuni": "岩国",
        "Iwamatsu": "岩松",
        "Iwamizawa": "岩見沢",
        "Iwatsuki": "岩槻",
        "Izuhara": "厳原",
        "Izumi": "Izumi",
        "Izumo": "出雲",
        "Izuno": "Izuno",
        "Kabutoji": "Kabutoji",
        "Kadoma": "門真",
        "Kae": "Kae",
        "Kagoshima": "鹿児島",
        "Kagumeyoshi": "頂吉",
        "Kaidomari": "貝泊",
        "Kaizawa": "貝沢",
        "Kakamigahara": "各務原",
        "Kakogawa": "加古川",
        "Kamakura": "鎌倉",
        "Kamigo": "Kamigo",
        "Kamigoto": "神事",
        "Kamiji": "Kamiji",
        "Kamikita": "上北",
        "Kamikitakozan": "Kamikitakozan",
        "Kamikoshi": "上越",
        "Kamimatsuo": "上松尾",
        "Kanazawa": "金沢",
        "Kaneo": "Kaneo",
        "Kanjikine": "Kanjikine",
        "Kanoya": "鹿屋",
        "Kariya": "Kariya",
        "Kasegi": "Kasegi",
        "Kashihara": "橿原",
        "Kashiwa": "柏",
        "Kasuga": "春日",
        "Kasugai": "春日井",
        "Kasukabe": "春日部",
        "Katashima": "片島",
        "Katatomari": "Katatomari",
        "Katsuma": "勝間",
        "Katsuta": "勝田",
        "Katsuura": "勝浦",
        "Kawagoe": "川越",
        "Kawaguchi": "川口",
        "Kawanishi": "川西",
        "Kawasaki": "川崎",
        "Kiryu": "桐生",
        "Kisarazu": "木更津",
        "Kishiwada": "岸和田",
        "Kitakyushu": "北九州",
        "Kitami": "北見",
        "Kobe": "神戸",
        "Kochi": "高知",
        "Kodaira": "小平",
        "Kofu": "甲府",
        "Koganei": "小金井",
        "Koike": "小池",
        "Komaki": "小牧",
        "Komatsu": "小松",
        "Koriyama": "郡山",
        "Koshigaya": "越谷",
        "Kowa": "Kowa",
        "Kumagaya": "熊谷",
        "Kumamoto": "熊本",
        "Kurashiki": "倉敷",
        "Kure": "呉",
        "Kurume": "久留米",
        "Kushiro": "釧路",
        "Kutchan": "倶知安",
        "Kutsukake": "沓掛",
        "Kuwana": "桑名",
        "Kuzakai": "区界",
        "Kyoto": "京都",
        "Machida": "町田",
        "Maebashi": "前橋",
        "Maizuru": "舞鶴",
        "Makinokuchi": "Makinokuchi",
        "Makurazaki": "枕崎",
        "Matsubara": "松原",
        "Matsudo": "松戸",
        "Matsue": "松江",
        "Matsumoto": "松本",
        "Matsuo": "松尾",
        "Matsusaka": "松阪",
        "Matsuyama": "松山",
        "Miboro": "御母衣",
        "Miho": "Miho",
        "Minoo": "箕面",
        "Misato": "Misato",
        "Mishima": "三島",
        "Mitaka": "三鷹",
        "Mito": "水戸",
        "Miyako": "Miyako",
        "Miyakojima": "宮古島",
        "Miyakonojo": "都城",
        "Miyazaki": "宮崎",
        "Mizusawa": "水沢",
        "Mochikoshi": "Mochikoshi",
        "Mombetsu": "紋別",
        "Monbetsu": "紋別",
        "Moriguchi": "守口",
        "Morioka": "盛岡",
        "Mui": "Mui",
        "Muroran": "室蘭",
        "Musashino": "武蔵野",
        "Mutsu": "陸奥",
        "Myojincho": "明神町",
        "Nagahama": "長原",
        "Nagano": "長野",
        "Nagaoka": "長岡",
        "Nagareyama": "流山",
        "Nagasaki": "長崎",
        "Nagasawa": "長沢",
        "Nago": "名護",
        "Nagoya": "名古屋",
        "Naha": "那覇",
        "Nakachi": "Nakachi",
        "Nakanoshima": "中ノ島",
        "Nama": "Nama",
        "Namiai": "浪合",
        "Nango": "Nango",
        "Nara": "奈良",
        "Narashino": "習志野",
        "Naze": "名瀬",
        "Neginohata": "Neginohata",
        "Nemuro": "根室",
        "Niigata": "新潟",
        "Niihama": "新居浜",
        "Nikko": "日光",
        "Nishinomiya": "西宮",
        "Nishiyama": "西山",
        "Nishizawakinzan": "Nishizawakinzan",
        "Nitto": "Nitto",
        "Nobeoka": "延岡",
        "Noda": "Noda",
        "Nodaoibara": "Nodaoibara",
        "Numajiri": "沼尻",
        "Numazu": "沼津",
        "Obe": "Obe",
        "Obihiro": "帯広",
        "Oda": "Oda",
        "Odawara": "小田原",
        "Ofunato": "大船渡",
        "Ogaki": "大垣",
        "Ogushi": "Ogushi",
        "Ohara": "Ohara",
        "Oita": "大分",
        "Okayama": "岡山",
        "Okazaki": "岡崎",
        "Oki": "Oki",
        "Okinawa": "沖縄",
        "Ome": "青梅",
        "Ominato": "大湊",
        "Omiya": "大宮",
        "Omu": "Omu",
        "Omuta": "大牟田",
        "Osaka": "大阪",
        "Oshima": "大島",
        "Ota": "Ota",
        "Otaru": "小樽",
        "Otsu": "大津",
        "Owase": "尾鷲",
        "Oyama": "小山",
        "Ozuki": "尾月",
        "Rumoi": "留萌",
        "Sado": "佐渡",
        "Saga": "佐賀",
        "Sagamihara": "相模原",
        "Saigo": "西郷",
        "Sakai": "境",
        "Sakata": "Sakata",
        "Sakura": "佐倉",
        "Sapporo": "札幌",
        "Sarugakyo": "猿ケ京",
        "Sasebo": "佐世保",
        "Sayama": "Sayama",
        "Sazarekozan": "Sazarekozan",
        "Sendai": "仙台",
        "Seto": "瀬戸",
        "Shimizu": "清水",
        "Shimonoseki": "下関",
        "Shinjo": "新庄",
        "Shirakawa": "白河",
        "Shiranita": "白仁田",
        "Shiriya": "Shiriya",
        "Shitooke": "志戸桶",
        "Shizuoka": "静岡",
        "Soka": "草加",
        "Suita": "吹田",
        "Sukomo": "宿毛",
        "Sumoto": "洲本",
        "Suttsu": "寿都",
        "Suwa": "諏訪",
        "Suzuka": "鈴鹿",
        "Tachikawa": "立川",
        "Tadotsu": "多度津",
        "Takamatsu": "高松",
        "Takaoka": "高岡",
        "Takarazuka": "宝塚",
        "Takasaki": "高崎",
        "Takatsuki": "高槻",
        "Takayu": "孝勇",
        "Tama": "多摩",
        "Tateyama": "立山",
        "Tokorozawa": "所沢",
        "Tokushima": "徳島",
        "Tokuyama": "徳山",
        "Tokyo": "東京",
        "Tomakomai": "苫小牧",
        "Tondabayashi": "富田林",
        "Tono": "遠野",
        "Tottori": "鳥取",
        "Toyama": "富山",
        "Toyoha": "Toyoha",
        "Toyohashi": "豊橋",
        "Toyokawa": "豊川",
        "Toyonaka": "豊中",
        "Toyooka": "豊岡",
        "Toyota": "豊田",
        "Tsu": "津",
        "Tsuiki": "Tsuiki",
        "Tsukuba": "つくば",
        "Tsuruga": "敦賀",
        "Tsuruoka": "鶴岡",
        "Tsuyama": "津山",
        "Ube": "宇部",
        "Uchinoura": "内之浦",
        "Ueda": "上田",
        "Ueno": "上野",
        "Uji": "宇治",
        "Urakawa": "浦川",
        "Urawa": "浦和",
        "Urayasu": "浦安",
        "Usa": "宇佐",
        "Ushibuka": "牛深",
        "Utsunomiya": "宇都宮",
        "Uwajima": "宇和島",
        "Wajima": "輪島",
        "Wakayama": "和歌山",
        "Wakkanai": "稚内",
        "Washiaimori": "Washiaimori",
        "Yachiyo": "八千代",
        "Yaizu": "焼津",
        "Yamagata": "山形",
        "Yamaguchi": "山口",
        "Yamato": "大和",
        "Yao": "八尾",
        "Yatsushiro": "八代",
        "Yokkaichi": "四日市",
        "Yokohama": "横浜",
        "Yokono": "Yokono",
        "Yokooka": "横岡",
        "Yokosuka": "横須賀",
        "Yonago": "米子",
        "Yonaguni": "与那国",
        "Yotsuura": "四浦",
        "Yuyama": "湯山",
        "Zama": "座間",
        }
    
    dict_daycode = {
        "Sunday": "日曜日",
        "Monday": "月曜日",
        "Tuesday": "火曜日",
        "Wednesday": "水曜日",
        "Thursday": "木曜日",
        "Friday": "金曜日",
        "Saturday": "土曜日"
        }

    dict_winddirection = {
        "N": "北",
        "E": "東",
        "W": "西",
        "S": "南",
        "NE": "北東",
        "NW": "北西",
        "SE": "南東",
        "SW": "南西",
        "NNE": "北北東",
        "ENE": "東北東",
        "NNW": "北北西",
        "WNW": "西北西",
        "SSE": "南南東",
        "ESE": "東南東",
        "SSW": "南南西",
        "WSW": "西南西"
        }

    dict_weathertext = {
        "Sunny": "快晴",
        "Clear": "晴れ(晴天)",
        "Fair": "晴れ",
        "Sunny/Windy": "快晴/強風",
        "Clear/Windy": "晴れ(晴天)/強風",
        "Fair/Windy": "晴れ/強風",
        "Windy": "強風",
        "Partly Sunny": "曇り一時快晴",
        "Mostly Cloudy": "薄曇り",
        "Mostly cloudy": "薄曇り",
        "Partly Cloudy": "所により曇り",
        "Partly cloudy": "所により曇り",
        "Mostly Clear": "晴れ所により曇り",
        "Partly Sunny/Windy": "曇り一時快晴/強風",
        "Mostly Clear/Windy": "晴れ所により曇り/強風",
        "Mostly Sunny": "快晴所により曇り",
        "Mostly Sunny/Windy": "快晴所により曇り/強風",
        "Cloudy": "曇り",
        "Overcast": "曇り(雲量多)",
        "Cloudy/Windy": "曇り/強風",
        "Overcast/Windy": "曇り(雲量多)/強風",
        "Mostly Cloudy/Windy": "薄曇り / 強風",
        "Mostly Cloudy": "薄曇り",
        "Light Drizzle": "弱い霧雨",
        "Drizzle": "霧雨",
        "Light Rain": "小雨",
        "Rain": "雨",
        "Heavy Rain": "大雨",
        "Light Rain/Fog": "弱い雨/霧",
        "Rain/Fog": "雨/霧",
        "Light Drizzle/Windy": "弱い霧雨/強風",
        "Drizzle/Windy": "霧雨/強風",
        "Light Rain/Windy": "小雨/強風",
        "Rain/Windy": "雨/強風",
        "Heavy Rain/Windy": "大雨/強風",
        "AM Light Rain": "午前中小雨",
        "PM Light Rain": "午後より小雨",
        "AM Light Rain/Windy": "午前中 弱いにわか雪/強風",
        "PM Light Rain/Windy": "午後から 弱いにわか雪/強風",
        "Rainshower": "にわか雨",
        "Shower": "にわか雨",
        "Heavy Rainshower": "強いにわか雨",
        "Heavy Rain Shower/Windy": "強いにわか雨/強風",
        "Light Rain Shower": "弱いにわか雨",
        "AM Shower": "午前 にわか雨",
        "PM Shower": "午後 にわか雨",
        "Scattered Shower": "所により にわか雨",
        "Rain Shower/Windy": "にわか雨/強風",
        "Shower/Windy": "にわか雨/強風",
        "Light Rain Shower/Windy": "弱いにわか雨/強風",
        "AM Shower/Windy": "午前 にわか雨/強風",
        "PM Shower/Windy": "午後 にわか雨/強風",
        "Scattered Shower/Windy": "所により にわか雨/強風",
        "Few Showers": "曇り時々にわか雨",
        "Few Showers/Windy": "曇り時々にわか雨/強風",
        "Showers in the Vicinity": "狭い範囲でにわか雨",
        "Thunder in the Vicinity": "狭い範囲で雷",
        "Light Snow": "小雪",
        "Snow": "雪",
        "Heavy Snow": "大雪",
        "Light Snow Pellets": "弱い霙(みぞれ)",
        "Snow Pellets": "霙(みぞれ)",
        "Light Ice Pellets": "霰(あられ)",
        "Ice Pellets": "雹(ヒョウ)",
        "Wintery Weather": "厳しい寒さ",
        "Light Freezing Rain": "弱い凍雨",
        "Freezing Rain": "凍雨",
        "Flurries/Windy": "曇り一時雨又は雪/強風",
        "Light Flurries/Windy": "曇り一時小雨又は小雪/強風",
        "Light Snow/Windy": "小雪/強風",
        "Snow/Windy": "吹雪",
        "Heavy Snow/Windy": "強い吹雪",
        "Light Snow Pellets/Windy": "弱い霙(みぞれ)/強風",
        "Snow Pellets/Windy": "霙(みぞれ)/強風",
        "Light Ice Pellets/Windy": "霰(あられ)/強風",
        "Ice Pellets/Windy": "雹(ヒョウ)/強風",
        "Light Freezing Rain/Windy": "弱い凍雨/強風",
        "Freezing Rain/Windy": "凍雨/強風",
        "Wintery Mix": "厳冬",
        "Light Snow Grains": "弱い霰(あられ)",
        "Snow Grains": "霰(あられ)",
        "Rain/Snow": "雨時々雪",
        "Rain/Show/Windy": "雨時々雪/強風",
        "Light Rain/Freezing Rain": "弱い雨時々みぞれ",
        "Rain/Freezing Rain": "雨時々みぞれ",
        "Light Rain/Freezing Rain/Windy": "弱い雨時々みぞれ/強風",
        "Rain/Freezing Rain/Windy": "雨時々みぞれ/強風",
        "AM Snow": "午前中雪",
        "PM Snow": "午後より雪",
        "AM Light Snow": "午前中小雪",
        "PM Light Snow": "午後より小雪",
        "Ice Crystals": "氷晶",
        "Ice Crystals/Windy": "氷晶/強風",
        "Snow Showers": "にわか雪",
        "Heavy Snow Shower": "強いにわか雪",
        "Heavy Snow Shower/Windy": "強いにわか雪/強風",
        "PM Snow Showers": "午後にわか雪",
        "AM Snow Showers": "午前にわか雪",
        "Rain/Snow Showers": "雨のちにわか雪",
        "Snow Showers/Windy": "にわか雪/強風",
        "PM Snow Showers/Windy": "午後にわか雪/強風",
        "AM Snow Showers/Windy": "午前にわか雪/強風",
        "Rain/Snow Showers/Windy": "雨のちにわか雪/強風",
        "Light Snow Showers": "弱いにわか雪",
        "Light Snow Showers/Windy": "弱いにわか雪/強風",
        "Flurries": "曇り一時雨又は雪",
        "Light Flurries": "曇り一時小雨又は小雪",
        "Scattered Flurries": "所により 曇り一時雨又は雪",
        "Few Flurries": "曇り 所により一時雨又は雪",
        "Few Flurries/Windy": "曇り 所により一時雨又は吹雪",
        "Scattered Snow Showers": "所によりにわか雪",
        "Scattered Snow Showers/Windy": "所によりにわか雪/強風",
        "Few Snow Showers": "曇り時々にわか雪",
        "Few Snow Showers/Windy": "曇り時々にわか雪/強風",
        "Freezing Drizzle": "霧氷",
        "Light Freezing Drizzle": "弱い霧氷",
        "Freezing Drizzle/Windy": "霧氷/強風",
        "Light Freezing Drizzle/Windy": "弱い霧氷/強風",
        "Thunderstorms": "雷又は雷雨",
        "Scattered Thunderstorms": "所により雷又は雷雨",
        "Thunderstorms/Windy": "雷又は雷雨/強風",
        "Scattered Thunderstorms/Windy": "所により雷又は雷雨/強風",
        "Rain/Thunder": "雷雨",
        "Light Thunderstorms/Rain": "弱い雷又は雷雨",
        "Thunderstorms/Rain": "雷又は雷雨",
        "Light Rain with Thunder": "弱い雷雨",
        "Rain with Thunder": "雷雨",
        "Fog": "霧",
        "Haze": "靄(もや)",
        "Mist": "霞(かすみ)",
        "Fog/Windy": "霧/強風",
        "Haze/Windy": "靄(もや)/強風",
        "Mist/Windy": "霞(かすみ)/強風",
        "Partial Fog": "部分的に霧気味",
        "Smoke": "もや",
        "Foggy": "霧がかった",
        "AM Fog/PM Sun": "午前霧/午後晴れ"
}
    
    def __init__(self, *args):
        type.__init__(self, *args)
        self._instances = {}
        self._state = Pattern(self.dict_state, "state")
        self._city = Pattern(self.dict_city, "city")
        self._daycode = Pattern(self.dict_daycode, "daycode")
        self._winddirection = Pattern(self.dict_winddirection, "winddirection")
        self._weathertext = Pattern(self.dict_weathertext, "weathertext|txtshort|txtlong")
    
    def __call__(self, *args):
        if not args in self._instances:
            self._instances[args] = type.__call__(self, *args)
        return self._instances[args]

    def state(self, content):
        return self._trans(content, self._state)

    def city(self, content):
        return self._trans(content, self._city)

    def daycode(self, content):
        return self._trans(content, self._daycode)

    def winddirection(self, content):
        return self._trans(content, self._winddirection)

    def weathertext(self, content):
        return self._trans(content, self._weathertext)

    def _trans(self, content, pattern):
        end = 0
        new_content = ''
        for m in pattern.re.finditer(content):
            new_content += content[end:m.start()]
            grps = m.groups()
            value = grps[1]
            if pattern.dict.has_key(value):
                value = pattern.dict[value]
            new_content += '%s%s%s'%(grps[0],value,grps[2])
            end = m.end()

        new_content += content[end:]
        content = new_content

        return new_content

class Buffer:
    """Weather data buffer(for translation)"""
    buffer = {}

    def __init__(self, *args):
        type.__init__(self, *args)
        self._instances = {}
    
    def __call__(self, *args):
        if not args in self._instances:
            self._instances[args] = type.__call__(self, *args)
        return self._instances[args]

    def add(self, key, s):
        # create buffer for current connection
        if not self.buffer.has_key(key):
            #apache.log_error("rtime: " + key)
            self.buffer[key] = ""
        self.buffer[key] += s

    def get(self, key):
        return self.buffer[key]

    def remove(self, key):
        del self.buffer[key]

def outputfilter(filter):
    """Weather data output filet"""
    # get request time(for buffering key)
    rtime = str(filter.req.request_time)
    
    trans = Translation()
    buffer = Buffer()

    s = filter.read()
    while s:
        buffer.add(rtime, s)
        s = filter.read()

    if s is None:
        wdata = buffer.get(rtime)
        orig = buffer.get(rtime)

        wdata = trans.state(wdata)
        wdata = trans.city(wdata)
        wdata = trans.daycode(wdata)
        wdata = trans.winddirection(wdata)
        wdata = trans.weathertext(wdata)
	wdata = wdata.replace("</use>", """</use>
    <use-j>このドキュメントは AccuWeather.com によって許可された認可者による使用のみを目的とします。未許可の使用は禁止されます。All Rights Reserved.</use-j>""")
        wdata = wdata.replace("</redistribution>", """</redistribution>
    <translator>鈴木たかのり</translator>""")

	wdata = wdata.replace('<?xml version="1.0" ?>', '<?xml version="1.0" encoding="utf-8" ?>')
        filter.write(wdata)
        buffer.remove(rtime)
        filter.close()
