diff window/widget.cc @ 65:4416cfac86ae

Convert EUC-JP files to UTF8
author Thibaut Girka <thib@sitedethib.com>
date Fri, 26 Nov 2010 10:53:15 +0100
parents ddbcbd000206
children
line wrap: on
line diff
--- a/window/widget.cc
+++ b/window/widget.cc
@@ -142,9 +142,9 @@ MouseCursor::~MouseCursor() {
 
 bool MouseCursor::Motionfunc(int x, int y, void* pointer) {
 	MouseCursor* _this = (MouseCursor*)pointer;
-	// 左上がカーソルポイントの場合
+	// 綏筝若純ゃ潟翫
 	// _this->Pic()->Move(x,y);
-	// 左下がカーソルポイントの場合
+	// 綏筝若純ゃ潟翫
 	_this->Pic()->Move(x,y-_this->Pic()->Height());
 	return true;
 }
@@ -196,7 +196,7 @@ void Button::Toggle(bool new_toggle) {
 		return;
 	}
 	is_toggled = new_toggle;
-	// if (is_in) return; // is_in に関わらずウィジットの表示を変更することにする
+	// if (is_in) return; // is_in ≪c吾茵腓冴紊眼
 	if (is_toggled) {
 		if (nptn > 2)
 			Pic()->SetSurfacePos(sx+sdx*2, sy+sdy*2);
@@ -252,26 +252,26 @@ extern char* create_box(int& width, int&
 
 void Scale::Init(Rect r_orig) {
 	int r=cursor_color.r, g=cursor_color.g, b=cursor_color.b;
-	// 矢印
+	// √
 	int arrow_width = -1;
 	cursor_width = -1;
 	char* button1;
 	char* button2;
 	if (is_vertical) {
-		// 矢印に必要な領域確保
+		// √違綽荀腆坂
 		int arrow_height = r_orig.width();
 		button1 = create_button(2, arrow_height, arrow_width, r, g, b);
 		button2 = create_button(3, arrow_height, arrow_width, r, g, b);
 		if (r_orig.height() < arrow_width*4) {
-			if (r_orig.height() < 8) r_orig.by = r_orig.ty + 8; // 小さすぎる場合は強制変更
+			if (r_orig.height() < 8) r_orig.by = r_orig.ty + 8; // 絨翫綣桁九
 			free( (void*)button1);
 			free( (void*)button2);
 			arrow_width = r_orig.height()/4;
-			// 再割り当て
+			// 蚊綵
 			button1 = create_button(2, arrow_height, arrow_width, r, g, b);
 			button2 = create_button(3, arrow_height, arrow_width, r, g, b);
 		}
-		// 矢印ボタンの作成
+		// √違帥潟篏
 		Surface* a1s = parent->Root().NewSurfaceFromRGBAData(arrow_height, arrow_width*3, button1, ALPHA_MASK);
 		int x = r_orig.lx; int y = r_orig.ty;
 		arrow_up = new Button(container, parent, a1s, 0, 0, 0, arrow_width, 3, Rect(x,y,x+arrow_height,y+arrow_width),1);
@@ -280,32 +280,32 @@ void Scale::Init(Rect r_orig) {
 		x = r_orig.rx - arrow_height; y = r_orig.by - arrow_width;
 		arrow_down = new Button(container, parent, a2s, 0, 0, 0, arrow_width, 3, Rect(x,y,x+arrow_height,y+arrow_width),1);
 		arrow_down->Pic()->SetSurfaceFreeFlag();
-		// picture作成(ボタンの動く領域)
+		// picture篏鐚帥潟鐚
 		Rect r = r_orig;
 		r.ty += arrow_width;
 		r.by -= arrow_width;
 		panel = parent->create_node(r, 0);
 		SetPic(panel);
-		// ボタンの中心線を描画、設定
+		// 帥潟筝綽膩祉荐絎
 		Surface* s = parent->Root().NewSurface(r.width()/2, r.height(), ALPHA_MASK);
 		DSurfaceFill(s, Rect(0,0,r.width()/2,r.height()), 0, 0, 0, 0xff);
 		Pic()->SetSurface(s, -r.width()/4, 0, 0);
 		Pic()->SetSurfaceFreeFlag();
 	} else {
-		// 矢印に必要な領域確保
+		// √違綽荀腆坂
 		int arrow_height = r_orig.height();
 		button1 = create_button(0, arrow_width, arrow_height, r, g, b);
 		button2 = create_button(1, arrow_width, arrow_height, r, g, b);
 		if (r_orig.width() < arrow_width*4) {
-			if (r_orig.width() < 8) r_orig.rx = r_orig.lx + 8; // 小さすぎる場合は強制変更
+			if (r_orig.width() < 8) r_orig.rx = r_orig.lx + 8; // 絨翫綣桁九
 			free( (void*)button1);
 			free( (void*)button2);
 			arrow_width = r_orig.width()/4;
-			// 再割り当て
+			// 蚊綵
 			button1 = create_button(2, arrow_width, arrow_height, r, g, b);
 			button2 = create_button(3, arrow_width, arrow_height, r, g, b);
 		}
-		// 矢印ボタンの作成
+		// √違帥潟篏
 		Surface* a1s = parent->Root().NewSurfaceFromRGBAData(arrow_width, arrow_height*3, button1, ALPHA_MASK);
 		int x = r_orig.lx; int y = r_orig.ty;
 		arrow_up = new Button(container, parent, a1s, 0, 0, 0, arrow_height, 3, Rect(x,y,x+arrow_width,y+arrow_height),1);
@@ -314,13 +314,13 @@ void Scale::Init(Rect r_orig) {
 		x = r_orig.rx - arrow_width; y = r_orig.by - arrow_height;
 		arrow_down = new Button(container, parent, a2s, 0, 0, 0, arrow_height, 3, Rect(x,y,x+arrow_width,y+arrow_height),1);
 		arrow_down->Pic()->SetSurfaceFreeFlag();
-		// picture作成(ボタンの動く領域)
+		// picture篏鐚帥潟鐚
 		Rect r = r_orig;
 		r.lx += arrow_width;
 		r.rx -= arrow_width;
 		panel = parent->create_node(r, 0);
 		SetPic(panel);
-		// ボタンの中心線を描画、設定
+		// 帥潟筝綽膩祉荐絎
 		Surface* s = parent->Root().NewSurface(r.width(), r.height()/2, ALPHA_MASK);
 		DSurfaceFill(s, Rect(0,0,r.width(),r.height()/2), 0, 0, 0, 0xff);
 		Pic()->SetSurface(s, 0, -r.height()/4, 0);
@@ -344,14 +344,14 @@ void Scale::InitCursor(int width_ratio) 
 	if (width_ratio < 0) width_ratio = 0;
 	else if (width_ratio > 1024) width_ratio = 1024;
 	if (is_vertical) {
-		if (width_ratio == 0) cursor_width = Pic()->Width() * 3 / 2; // 幅の1.5倍
+		if (width_ratio == 0) cursor_width = Pic()->Width() * 3 / 2; // 綛1.5
 		else cursor_width = Pic()->Height()*width_ratio/1024;
-		if (cursor_width <= 0) return; // カーソルなし(いいのか?)
+		if (cursor_width <= 0) return; // 若純鐚鐚鐚
 		region = Rect(0, 0, Pic()->Width(), cursor_width);
 	} else { // horizontal
-		if (width_ratio == 0) cursor_width = Pic()->Height() * 3 / 2; // 高さの1.5倍
+		if (width_ratio == 0) cursor_width = Pic()->Height() * 3 / 2; // 蕭1.5
 		else cursor_width = Pic()->Width()*width_ratio/1024;
-		if (cursor_width <= 0) return; // カーソルなし(いいのか?)
+		if (cursor_width <= 0) return; // 若純鐚鐚鐚
 		region = Rect(0, 0, cursor_width, Pic()->Height());
 	}
 
@@ -368,7 +368,7 @@ void Scale::InitCursor(int width_ratio) 
 	cursor->drag_pointer = (void*)this;
 	cursor->show();
 
-	// 矢印等をクリックしたときの移動量計算
+	// √亥腱糸頥膊
 	int bar_width;
 	if (is_vertical) bar_width = Pic()->Height();
 	else bar_width = Pic()->Width();
@@ -479,7 +479,7 @@ TextButton::TextButton(Event::Container&
 	fore(_fore), pressed(_pressed), back(_back)
 {
 	bool rect_changed = false;
-	// まず、テキスト領域の広さを得る
+	// 障鴻綺緇
 	Rect r(r_orig);
 
 	if (text == NULL) text = "";
@@ -489,7 +489,7 @@ TextButton::TextButton(Event::Container&
 	TextStream ts = TextStream::ParseMoji(text, _fore.r , _fore.g, _fore.b, text_size);
 	TextGlyphStream gs = DefaultLayout(text_size)->Layout(ts, width);
 
-	if (r.width() == 0) { // 文字に合わせてウィジット作成
+	if (r.width() == 0) { // 絖c吾篏
 		rect_changed = true;
 		width = gs.width() + text_size;
 		r.rx = r.lx + gs.width();
@@ -502,7 +502,7 @@ TextButton::TextButton(Event::Container&
 	}
 
 	if (rect_changed) {
-		// 大きさ変更
+		// 紊с紊
 		Pic()->SetSurfaceRect(r);
 	}
 
@@ -515,7 +515,7 @@ TextButton::TextButton(Event::Container&
 	y = (Pic()->Height() - gs.height()) / 2;
 
 	//FIXME: (back.a == NULL ?)
-	if (back.a == 0) { // 背景なし、もしくはボタン押の状態のみ背景あり
+	if (back.a == 0) { // 帥恰若倶粋
 		surface = root.NewSurface(r.width(), r.height()*2, ALPHA_MASK);
 		DSurfaceFill(surface, Rect(*surface), 0, 0, 0, 0);
 		if (attribute & REVERSE) {
@@ -532,8 +532,8 @@ TextButton::TextButton(Event::Container&
 			DSurfaceRenderText(gs.begin(), gs.end(), Rect(0,0,gs.width(),gs.height()), surface, Rect(x,y+r.height()));
 		}
 		nptn = 2;
-	} else { // ボタン型の背景あり
-		/* ラベル用の Surface を作る */
+	} else { // 帥喝
+		/*  Surface 篏 */
 		width = r.width(); height = r.height();
 		char* box = create_box(width, height, back.r, back.g, back.b);
 		surface = root.NewSurfaceFromRGBAData(r.width(), r.height()*3, box, ALPHA_MASK);
@@ -558,7 +558,7 @@ TextButton::TextButton(Event::Container&
 void TextButton::SetText(const char* text, const Color& _fore, const Color& _pressed, const Color& _back)
 {
 	int width = Pic()->Width(); int height = Pic()->Height();
-	// まず、テキスト領域の広さを得る
+	// 障鴻綺緇
 	if (text == NULL) text = "";
 
 	TextGlyphStream gs = DefaultLayout(text_size)->Layout(text, width);
@@ -575,7 +575,7 @@ void TextButton::SetText(const char* tex
 	surface = NULL;
 
 	//FIXME: (back.a == NULL) ?
-	if (back.a == 0) { // 背景なし
+	if (back.a == 0) { // 
 		surface = root.NewSurface(width, height*2, ALPHA_MASK);
 		DSurfaceFill(surface, Rect(*surface), 0, 0, 0, 0);
 		if (attribute & REVERSE) {
@@ -589,7 +589,7 @@ void TextButton::SetText(const char* tex
 		gs.SetReverse(false);
 		nptn = 2;
 	} else {
-		/* ラベル用の Surface を作る */
+		/*  Surface 篏 */
 		char* box = create_box(width, height, _back.r, _back.g, _back.b);
 		surface = root.NewSurfaceFromRGBAData(width, height*3, box, ALPHA_MASK);
 	
@@ -701,7 +701,7 @@ label_wait:
 	cursor_activated = false;
 	if (cursor) cursor->hide();
 	while(cur_pos != gstream.end()) {
-		// スクロールしては次行描画、を繰り返す
+		// 鴻若罨∴祉膵違菴
 		for (scroll_height = CalcScrollHeight(); scroll_height > 0; scroll_height--) {
 			status = SCROLL;
 label_scroll:
@@ -763,7 +763,7 @@ void Text::Start(void) {
 	bottom_pos.clear();
 	layout.Layout(stream, gstream, bottom_pos, pictext->Width()-fontsize/2);
 
-	// height の積算値として bottom_pos を計算
+	// height 腥膊ゃ bottom_pos 荐膊
 	std::vector<int>::iterator it;
 	int pos = 0;
 	for (it = bottom_pos.begin(); it != bottom_pos.end(); it++) {
@@ -783,13 +783,13 @@ void Text::Start(void) {
 }
 
 void Text::DrawText(int& nChar) {
-	// 描画範囲を得る
+	// 紫蚊緇
 	iterator end = gstream.end();
 	iterator it = cur_pos;
-	while(nChar && it != end) { // nChar < 0 なら出来るだけの文字を描画
+	while(nChar && it != end) { // nChar < 0 堺ャ絖
 		if (! (it->flag & TextGlyph::Group)) nChar--;
 		if (it->flag & TextGlyph::LineEnd) {
-			if (bottom_pos[line_number+1] > srcrect.by) { //改行すると画面から出てしまう
+			if (bottom_pos[line_number+1] > srcrect.by) { //壕脂≪冴障
 				it++;
 				if (nChar == 0) nChar = 1;
 				break;
@@ -798,14 +798,14 @@ void Text::DrawText(int& nChar) {
 		}
 		it++;
 	}
-	// 描画する
+	// 祉
 	Rect r = DSurfaceRenderText(cur_pos, it, srcrect, surface, Rect(0,0,0,0));
 	pictext->ReBlit(r);
 	cur_pos = it;
 }
 
 void Text::Scrollup(int& nChar) {
-	if (nChar < 0) { // 一画面分スクロールする
+	if (nChar < 0) { // 筝脂√鴻若
 		DSurfaceFill(surface, Rect(*surface), 0, 0, 0, 0);
 		pictext->ReBlit();
 		srcrect = Rect(*surface);
@@ -814,7 +814,7 @@ void Text::Scrollup(int& nChar) {
 		scrolled_count = 0;
 		return;
 	}
-	// スクロール幅を求める
+	// 鴻若綛羆
 	const int max_scroll_count = 8;
 	int dy = bottom_pos[line_number+1] - bottom_pos[line_number];
 	int cur_dy;
@@ -873,7 +873,7 @@ Label::Label(PicContainer* parent, const
 
 	TextGlyphStream gs = DefaultLayout(text_size)->Layout(text, width);
 
-	if (r.width() == 0) { // 文字に合わせてウィジット作成
+	if (r.width() == 0) { // 絖c吾篏
 		width = gs.width();
 		r.rx = r.lx + gs.width();
 	}
@@ -883,7 +883,7 @@ Label::Label(PicContainer* parent, const
 
 	SetPic(parent->create_leaf(r, 0));
 
-	/* ラベル用の Surface を作る */
+	/*  Surface 篏 */
 	surface = parent->Root().NewSurface(r.width(), r.height(), ALPHA_MASK);
 	
 	DSurfaceFill(surface, Rect(*surface), 0, 0, 0, 0);
@@ -927,18 +927,18 @@ Dialog::Dialog(Event::Container& contain
 
 	XKFont::HorizLayout& layout = *DefaultLayout(26);
 	int dialog_width = parent->Width() / 2;
-	TextGlyphStream s_ok = layout.Layout("OK", dialog_width);
-	TextGlyphStream s_cancel = layout.Layout("取消", dialog_width);
+	TextGlyphStream s_ok = layout.Layout("鐚鐚", dialog_width);
+	TextGlyphStream s_cancel = layout.Layout("羔", dialog_width);
 	TextGlyphStream s_text = layout.Layout(text, dialog_width);
 
 	Rect r_text(0, 0, s_text.width(), s_text.height());
 	Rect r_ok(0, 0, s_ok.width(), s_ok.height());
 	Rect r_cancel(0, 0, s_cancel.width(), s_cancel.height());
 
-	/* ダイアログボックスの Surface を作る */
+	/* ゃ≪違鴻 Surface 篏 */
 	int dwidth = r_text.width() + (r_text.width()/10)*2 + 6;
 	int dheight = r_text.height() + r_ok.height() + r_cancel.height()*3 + 4;
-	surface_diag = parent->Root().NewSurface(dwidth, dheight, NO_MASK); // alpha なし
+	surface_diag = parent->Root().NewSurface(dwidth, dheight, NO_MASK); // alpha 
 	DSurfaceFill(surface_diag, Rect(*surface_diag), 0xf0, 0xd0, 0xa0);
 	DrawBox(surface_diag, Rect(0,0,dwidth,dheight));
 
@@ -950,20 +950,20 @@ Dialog::Dialog(Event::Container& contain
 	parent->Root().BlitSurface(surface_text, r_text, surface_diag, Rect(x, y, x+r_text.width(), y+r_text.height()));
 	parent->Root().DeleteSurface(surface_text);
 
-	/* panel をつくる */
+	/* panel ゃ */
 	x = (parent->Width()-dwidth)/2;
 	y = (parent->Height()-dheight)/2;
 	SetPic(parent->create_node(Rect(x, y, x+dwidth, y+dheight), 0));
 
-	/* ボタンを作成する */
-	/* f8d8c8 背景(明)*/
-	/* f0d0a0 背景*/
-	/* b08040 枠(明)*/
-	/* 805010 枠*/
-	/* 382018 黒*/
-	/* 9890f8 青*/ 
-	/* dc6448 赤*/
-	/* 各ボタンは左右にボタン幅の 1/4, 上下にボタン幅の 1/4 のマージンを持つ */
+	/* 帥潟篏 */
+	/* f8d8c8 ()*/
+	/* f0d0a0 */
+	/* b08040 鐚)*/
+	/* 805010 */
+	/* 382018 藥*/
+	/* 9890f8 */ 
+	/* dc6448 莎*/
+	/* 帥潟綏劻帥喝 1/4, 筝筝帥喝 1/4 若吾潟 */
 	Rect r_btn(r_ok); r_btn.join(r_cancel);
 	int btn_width = r_btn.width() * 3 / 2;
 	int btn_height = r_btn.height() * 3 / 2;
@@ -1184,8 +1184,8 @@ void AnmAlphaMove::Exec(int count) {
 	if (ptns.empty()) return;
 	if (cur_count != 0 && ptns[cur_count].next_tick > count) return;
 	if (cur_count >= ptns.size()) return;
-	// 次のパターンを探す
-	// count <= it->next_tick なる条件を満たす最後の it を探す
+	// 罨<帥若潟「
+	// count <= it->next_tick >散羣緇 it 「
 	std::vector<Ptn>::iterator it;
 	for (it=ptns.begin()+cur_count; it != ptns.end(); it++) {
 		if (count <= it->next_tick) break;
@@ -1212,7 +1212,7 @@ void AnmAlphaMove::Finish(void) {
 	if (ptns.empty()) return;
 	if (cur_count >= ptns.size() - 1) return;
 	cur_count = ptns.size() - 1;
-	Exec(ptns[cur_count].next_tick); // 最後の pattern の状態にする
+	Exec(ptns[cur_count].next_tick); // 緇 pattern 倶
 }
 
 AnmPtnSolid::AnmPtnSolid(Event::Container& container, PicBase* _pic, const unsigned char* _ptn, const Rect& _alpha_r, int total_time) :
@@ -1288,68 +1288,68 @@ void AnmPtnAlpha::Finish(void) {
 
 /*
 
-Widget の種類
-	Mouse: マウス位置に連動する。Surface と origin が必須
-	Panel : なにも存在しないところに張りつけていく
-		背景張りつけも可能
-		ButtonPanel : 無効化可能。Group の Button がカーソルに入ったら、全Button / Label が「カーソル下」状態になる
-			同一変数を扱うボタンは原則、同一ButtonPanel の下に入ること(同期する。高速化可能)
-			そうでない場合、ボタンの GlobalVariable フラグを立てる必要がある
-		背景種類:Window
-			内部の透明度と枠形を別々に指定可能。枠形は全枠、部分枠どちらの形でも可能
-			(部分枠なら、内部的には上枠、下枠、左右枠と別 Surface で管理する)
+Widget 腮蕁
+	Mouse: 剛臀eSurface  origin 綽
+	Panel : 絖綣泣ゃ
+		綣泣ゃ
+		ButtonPanel : ≦劫純Group  Button 若純ャcButton / Label 若純筝倶
+			筝紊違宴帥潟筝ButtonPanel 筝ャ鐚蕭緒
+			с翫帥潟 GlobalVariable 違腴綽荀
+		腮蕁鐚Window
+			綺綵≪ャ絎純綵≪<綵≪с
+			鐚筝筝綏勄 Surface х∞鐚
 		DragButton
-			Panel 全体をドラッグし、場所変更できるボタン。
-	Button: 無効化>通常>カーソル下>ボタン押下 のpicture / animation
-		Toggle Button にできる(Group化すればRadioButtonにもできる)
-	Label : 無効化>通常>カーソル下 のanimation
-		animation は
-		・上への変化
-		・下への変化
-		・常時変形
-		の3つの形式をもつ。
-		形式は
-		・x / y increment による(全領域と x,y の大きさを指定すると左上から右上、左下、という方へ勝手に領域を変更していく)
-		・色変化(明度変化)。色テーブルを指定する。Surface は alpha のみとする
-			どちらも、一つのラベルに使う時間の長さを指定する
-		・callback による。指定した一定時間以上が立つとCallBack が呼び出され、新たなSurface , origin を指定する。
+			Panel 篏違贋紊眼с帥潟
+	Button: ≦劫鐚絽醐若純筝鐚帥恰寂 picture / animation
+		Toggle Button с(GroupRadioButtonс)
+	Label : ≦劫鐚絽醐若純筝animation
+		animation 
+		私吾紊
+		私吾紊
+		糸幻紊綵
+		鐚ゃ綵√ゃ
+		綵√
+		x / y increment 鐚 x,y 紊с絎綏筝劽綏筝鴻後紊眼鐚
+		肢峨鐚綺紊鐚蚊若絎Surface  alpha 帥
+			<筝ゃ篏帥激絎
+		callback 絎筝絎篁ヤ腴ゃCallBack 若喝冴違Surface , origin 絎
 
-		・Surface は
-			普通の画像
-			文字列(適当に仮想化)
-			画像数値列
-		のいずれか
+		Surface 
+			糸
+			絖鐚綵篁喝鐚
+			糸医ゅ
+		
 	Cursor
-		リターンカーソル。Label の一種。
+		帥若潟若純Label 筝腮
 	Number
-		数字を表示する。フォントの大きさ、もしくは画像数値列
+		医茵腓冴潟紊с糸医ゅ
 	Text
-		テキストを表示する
-		パネルの大きさだけ指定すると適当にやってくれる
-		カーソルの位置(文字の次/最終)を指定すること
-		機能:文字送り速度設定、読み飛ばし設定(常に最高速で押しっぱなし)
-	ProgressBar など
-		バーの長さ、あるいは位置で変数の大きさを示す。
-		Tick, Max を指定、変数の変化には適当に対応できるようにする
-		バーの方向として縦/横。Surface は繰り返しで使う(速度上、32pixel くらいあったほうがいいかも?)
-		バーの代わりにボタンも使える。Surface 指定のメソッドが違うだけ。
-		オプション:バーのどこかをクリックされたとき、そこに移動するかそこに向かって移動するか
-		オプション?:矢印ボタン(いらないか)
+		鴻茵腓冴
+		紊с絎綵c
+		若純篏臀鐚絖罨/腟鐚絎
+		罘緒絖綺荐絎茯翠違荐絎鐚絽吾蕭ф若c宴鐚
+	ProgressBar 
+		若激篏臀у違紊с腓冴
+		Tick, Max 絎紊違紊綵絲上с
+		若劫膰/罔Surface 膵違菴т戎鐚綺筝32pixel c祉鐚鐚
+		若篁c帥潟篏帥Surface 絎<純
+		激с鰹若腱糸c腱糸
+		激с鰹鐚√違帥鰹鐚
 	ScrollBar
-		横/縦。Panel と連動する(専用, ProgressBar の一種として実装)
-		(Panel 側で「見えない部分はdelete, 見える部分は自動で作成」機能をつける?:バックログ)
+		罔/膰Panel e(絨, ProgressBar 筝腮絎茖)
+		(Panel 眼с荀delete, 荀т罘純ゃ鐚鐚逸
 
 	
 	
-メニューの出し方
-	右クリック
-	ボタンを押す
-	上の方、右の方など領域に行くとヌっと出てくる
-メニューモード内
-	ボタンを押して終了
-	マップを作っておき、各メニューに名前を割り振ると二次元に広がったメニューになる
-	名前を割り振ると上に名前リストがでてくる
-	名前を割り振ると横に名前リストが出てくる
+<ャ若冴
+	劻
+	帥潟若
+	筝鴻劻鴻茵c冴
+<ャ若≪若
+	帥潟若腟篋
+	篏c<ャ若蚊篋罨≦綺c<ャ若
+	蚊筝鴻с
+	蚊罔鴻冴
 
 */
 // }