// button.iet - ボタンレイヤスクリプト
// Copyright (C)2011, TriaL3 and m-kz
// URL : http://kzkz.jp/  Mail : ok@kzkz.jp
// 2013.11.05 s_e_beat　エフェクト加筆
// 2014.03.29 Artemis仕様変更によるlyeventへの移行
//////////////////////////////////////////////////
// hoge_0 _1 _2 _ng.pngを用意して、ボタンを生成するマクロとなります。
// [btn id = "" file = "hoge"]
// で、画像を設定し、
// [btn_on id = "" file = "" lebel = "" call = ""]
// で、動作を設定します。
// それぞれマクロのパラメータなどは以下に記します。
//////////////////////////////////////////////////
*btn
// id                 ベースレイヤーID
// file               画像パス
// call               0: 遷移したまま戻ってこない (省略時デフォルト)
//                    1: 遷移したあとreturnで戻ってくる
// left               ボタン位置　指定時は優先
// top                未指定時は、csvファイル設定値を優先
// csv                csvファイルを特別に指定したいときに設定します
//                    自動設定したいときは、それぞれpngと同名のcsvを用意します
//
// alphaclick         クリック閾値 (省略可能)

// ng                 ng = 1で、押せないボタン（画像はhoge_ngがあると良い）

// text               ボタン文字の描画（省略可能）
// textcolor          文字色（省略可能）
// textalign          テキストアライメント（省略でcenter）
// textsize           テキストフォントサイズ（省略可能）
// texttop            テキスト文字位置調整（省略可能）
// textleft           テキスト文字位置調整（省略可能）

// ※textパラメータを使用した際は、ボタン消去後の[flip][trans]直後に
//    [btn_text_erase]を必ず呼び出すこと（使用済文字がメモリに残る）


//[lyevent type = "click" mode = "init" id="$id + '.1'" file ="$file"      label="$label"   call="$call" penetration = "1"]
//[lyevent type = "rollover" mode = "reset" id="$id + '.1'"]
//[lyevent type = "rollout" mode = "reset"  id="$id + '.1'"]
//[lyevent type = "rollover" mode = "init" id="$id + '.1'" file ="system/button.iet" label="rollover" call="1" handler="var" name="t.button" data="$id"]
//[lyevent type = "rollout" mode = "init" id="$id + '.1'" file ="system/button.iet" label="rollout"  call="1" handler="var" name="t.button" data="$id"]

// for debug
[var name = "t.exist" system = "file_exist" file ="$os_name_path + file + '_0.png'"]
[if estimate = "$t.exist == 0"]
	// 画像が無かったら処理をしない
	// debug時に画像エラーが出るのを避ける（エラーが見たいときはコメントアウトする）
	[return]
[/if]

// csvファイルが指定されているかどうかをチェック
[var name = "t.exist" system = "var_exist" target = "csv" local = "1"]
[if estimate="$t.exist != 0"]
	// データを読み込む
	[varcsv name = "t.exist" file = "$os_name_path + csv"]
	[var name = "t.top" data = "$t.exist.1"]
	[var name = "t.left" data = "$t.exist.0"]
	[var name = "t.exist" system = "delete"]

	// top leftがスクリプト指定されていたら加算
	[var name = "t.exist" system = "var_exist" target = "top" local = "1"]
	[if estimate="$t.exist != 0"]
		[var name = "t.top" data = "$t.top + top"]
	[/if]
	[var name = "t.exist" system = "var_exist" target = "left" local = "1"]
	[if estimate="$t.exist != 0"]
		[var name = "t.left" data = "$t.left + left"]
	[/if]
[else]
	// 真っ先にtop leftの指定をチェック
	[var name = "t.exist" system = "var_exist" target = "top" local = "1"]
	[if estimate="$t.exist != 0"]
		[var name = "t.top" data = "$top"]
	[else]
		[var name = "t.top" data = "none"]
	[/if]
	[var name = "t.exist" system = "var_exist" target = "left" local = "1"]
	[if estimate="$t.exist != 0"]
		[var name = "t.left" data = "$left"]
	[else]
		[var name = "t.left" data = "none"]
	[/if]
[/if]

[var name="t.exist" system="var_exist" target="ng" local="1"]
[if estimate="$t.exist != 0 && ng != 0"]
	// _ng画像が用意されているかチェックする
	[var name = "t.file_exist" system = "file_exist" file = "$os_name_path + file + '_ng.png'" save = "0"]
	// ng画像がある場合は、_ng画像を読み込む
	[if estimate = "$t.file_exist != 0"]
		[lyc id="$id + '.1'" file ="$os_name_path + file + '_ng'" economize = "1" nocsv = "$((t.left != 'none') || (t.top != 'none'))"]
		// 色を暗くしない
		[lyprop id="$id + '.1'" colormultiply = "0"]
	[else]
		// ng画像が無い場合は_0画像を自動で読み込む
		[lyc id="$id + '.1'" file ="$os_name_path + file + '_0'" economize = "1" nocsv = "$((t.left != 'none') || (t.top != 'none'))"]
		// 多少色を暗くしておく
		[lyprop id="$id + '.1'" colormultiply = "CCCCCC"]
	[/if]
[else]

	[var name="t.exist.1" system="var_exist" target="alphaclick" local="1"]
	[if estimate="$t.exist.1 != 0"]
		[lyc id="$id + '.1'" file ="$os_name_path + file + '_0'" nocsv = "$((t.left != 'none') || (t.top != 'none'))"]
		[lyc id="$id + '.2'" file ="$os_name_path + file + '_1'" nocsv = "$((t.left != 'none') || (t.top != 'none'))"]
		[lyprop id="$id + '.1'" clickablethreshold="$alphaclick"]
		[lyprop id="$id + '.2'" clickablethreshold="$alphaclick"]
	[else]
		[lyc id="$id + '.1'" file ="$os_name_path + file + '_0'" economize = "1" nocsv = "$((t.left != 'none') || (t.top != 'none'))"]
		[lyc id="$id + '.2'" file ="$os_name_path + file + '_1'" economize = "1" nocsv = "$((t.left != 'none') || (t.top != 'none'))"]
	[/if]
[/if]


//[var name="t.exist.2" system="var_exist" target="alpha" local="1"]
//[if estimate="$t.exist.2 != 0"]
//	[lyprop id="$id + '.1'" alpha="$alpha"]
//	[lyprop id="$id + '.2'" alpha="$alpha"]
//[/if]


// エフェクト用
// エフェクト用画像（_2）が用意されていなければ、_1画像を読み込む
[var name="t.exist" system="file_exists" file="$os_name_path + file + '_2.png'" save="0"]
[var name="t.exist.2" system="file_exists" file="$os_name_path + file + '_2.jpg'" save="0"]

[if estimate="$t.exist == 1 || t.exist.2 == 1"]
	[lyc id="$id + '.3'" file ="$os_name_path + file + '_2'" economize = "$(1 - t.exist.1)" nocsv = "$((t.left != 'none') || (t.top != 'none'))"]
[else]
	[lyc id="$id + '.3'" file ="$os_name_path + file + '_1'" economize = "$(1 - t.exist.1)" nocsv = "$((t.left != 'none') || (t.top != 'none'))"]
[/if]


// テキストが指定されているかどうか
[var name = "t.exist.2" system = "var_exist" target = "text" local = "1"]
[if estimate="$t.exist.2 != 0"]
	// テキストを描画する
	[chgmsg id = "$id + '.10'" layered = "1"]
		// ボタンテキストidを記憶する
		[var name = "button_text_id" data = "$button_text_id + ',' + id + '.10'"]

		// テキストカラーを決める
		[var name = "t.exist" system = "var_exist" target = "textcolor" local = "1"]
		[if estimate="$t.exist != 0"]
			// テキスト色が指定されていた
			[var name = "t.btntext.color" data = "$textcolor"]
		[else]
			// テキスト色が指定されていない
			[var name = "t.btntext.color" data = "0xFFFFFF"]
		[/if]

		// テキストサイズを決める
		[var name = "t.exist" system = "var_exist" target = "size" local = "1"]
		[if estimate="$t.exist != 0"]
			// テキストサイズが指定されていた
			[var name = "t.btntext.size" data = "$textsize"]
		[else]
			// テキストサイズが指定されていない
			[var name = "t.btntext.size" data = "34"]
		[/if]

		// テキスト位置調整があるか調べる
		[var name = "t.exist" system = "var_exist" target = "texttop" local = "1"]
		[if estimate="$t.exist != 0"]
			[var name = "t.btntext.top" data = "$texttop"]
		[else]
			[var name = "t.btntext.top" data = "0"]
		[/if]
		[var name = "t.exist" system = "var_exist" target = "textleft" local = "1"]
		[if estimate="$t.exist != 0"]
			[var name = "t.btntext.left" data = "$textleft"]
		[else]
			[var name = "t.btntext.left" data = "0"]
		[/if]


		// 描画領域を推定する
		[var name = "t.li" system = "get_layer_info" id = "$id + '.1'"]
		// フォントアライメントの指定を調べる
		[var name = "t.exist" system = "var_exist" target = "textalign" local = "1"]
		[if estimate="$t.exist != 0"]
			[buttonfont width = "$t.li.width" height = "$t.li.height" color = "$t.btntext.color" align = "$textalign" left = "$t.li.left + t.btntext.left" top = "$t.li.top + t.btntext.top" size = "$t.btntext.size"]
		[else]
			[buttonfont width = "$t.li.width" height = "$t.li.height" color = "$t.btntext.color" align = "center" left = "$t.li.left + t.btntext.left" top = "$t.li.top + t.btntext.top" size = "$t.btntext.size"]
		[/if]
		// 文字を書く前に一応消しておく
		[rp backlog = "0"]
		[print data = "$text"]
		[var name = "t.btntext" system = "delete"]
		[var name = "t.btntext" system = "delete"]
		// テキストデータidを保存する
		[if estimate = "$btn_text_erase == 0"]
			[var name = "btn_text_erase" data = "$id + '.10'"]
		[else]
			[var name = "btn_text_erase" data = "$btn_text_erase + ',' + id + '.10'"]
		[/if]
	[/chgmsg]
[/if]

// 位置調整を最後に行う
[if estimate="$(t.top != 'none') && (t.left != 'none')"]
	// top leftが指定されている
	[lyprop id = "$id + '.1'" left = "$t.left" top = "$t.top" alpha = "255"]
	[lyprop id = "$id + '.2'" left = "$t.left" top = "$t.top" alpha = "0"]
	[lyprop id = "$id + '.3'" left = "$t.left" top = "$t.top" alpha = "0" visible = "0"]
	// テキスト
	[if estimate="$t.exist.2 != 0"]
		[lyprop id = "$id + '.10'" left = "$t.left" top = "$t.top" alpha = "255"]
	[/if]
[else]
	// top leftが指定されていない
	[lyprop id = "$id + '.1'" alpha = "255"]
	[lyprop id = "$id + '.2'" alpha = "0"]
	[lyprop id = "$id + '.3'" alpha = "0" visible = "0"]
	// テキスト
	[if estimate="$t.exist.2 != 0"]
		[lyprop id = "$id + '.10'" alpha = "255"]
	[/if]
[/if]

[var name = "t.exist" system = "delete"]
[return]

// ---------------------------------------------------------------------------------------------
*btn_on
// id ベースレイヤーID
// file               クリックされたときの遷移先スクリプト
// label              クリックされたときの遷移先ラベル
// call               0: 遷移したまま戻ってこない
//                    1: 遷移したあとreturnで戻ってくる
// varname            引数をひとつ持って移動できる
// data               引数の値
// effect             0,off,none: エフェクトしない
//                    300など   : 時間（msec）エフェクトする
//                    on        : デフォルト値（msec）エフェクトする
// size	              effect on 時の拡大サイズ　デフォルト200（％）
// rollzoom           ロールオーバーエフェクト
//                    0, off, none(しない) / 1 ,on(する)
// penetration        省略=1  0:ボタンの重なり考慮

// 押せないボタンの場合はこの処理はなにもしない
[var name = "t.li" system = "delete"]
[var name = "t.li" system = "get_layer_info" id = "$id + '.2'"]
[if estimate = "$t.li.visible == 0"]
	// マウスオン画像が無いということは、ボタンを押させる気が無い
	// よって、この処理をなにもしない
	[return]
[/if]

// ロールオーバー時のエフェクト
[var name = "t.exist" system = "var_exist" target = "rollzoom" local = "1"]
[if estimate = "$t.exist == 0"]
	// しない
	[var name = "t.rollzoom" data = "0"]
[else]
	// しない
	[if estimate = "$rollzoom == 'off' || rollzoom == 'none' || rollzoom == 0"]
		[var name = "t.rollzoom" data = "0"]
	// する
	[elseif estimate = "$rollzoom == 'on' || rollzoom == 1"]
		[var name = "t.rollzoom" data = "1"]
	[else]
		[dialog title = "ボタン指定エラー" message = "rollzoom値がおかしいです。
指定できる値は 0,none,off / 1,on です"]
	[/if]
[/if]

[lyevent type = "rollover" mode = "reset" id = "$id + '.1'"]
[lyevent type = "rollout" mode = "reset" id = "$id + '.1'"]

[lyevent type = "rollover" mode = "init" id = "$id + '.1'" file = "system/button.iet" label = "rollover" call = "1"     handler = "var" name = "t.button" data = "$id + '/' + t.rollzoom"]
[lyevent type = "rollout" mode = "init" id = "$id + '.1'" file = "system/button.iet" label = "rollout" call = "1"     handler = "var" name = "t.button" data = "$id"]


// ボタンエフェクト
[var name="t.exist" system="var_exist" target="effect" local="1"]
[if estimate="$t.exist == 0"]
	// 指定なし、ならばエフェクトにnone代入
	[var name = "t.effect" data = "none"]
[elseif estimate = "$effect == 'on'"]
	// effect == on、ならばエフェクトにデフォルト値代入
	[var name = "t.effect" data = "300"]
[else]
	// その他
	[if estimate="$effect != 0 && effect != 'off' && effect != 'none'"]
		[var name = "t.effect" data = "$effect"]
	[else]
		[var name = "t.effect" data = "none"]
	[/if]
[/if]

// ボタンサイズ
[var name="t.exist" system="var_exist" target="size" local="1"]
[if estimate="$t.exist == 0"]
	// 指定なし、ならば2倍（200％)
	[var name = "t.size" data = "200"]
[else]
	[var name = "t.size" data = "$size"]
[/if]

// varname
[var name="t.exist" system="var_exist" target="varname" local="1"]
[if estimate="$t.exist == 0"]
	// 指定なし
	[var name = "t.varname" data = "0"]
	[var name = "t.data" system = "delete"]
[else]
	[var name = "t.varname" data = "$varname"]
	[var name = "t.data" data = "$data"]
[/if]

// 開発時にfile名を省略した場合の対策
[var name = "t.exist" system = "var_exist" target = "penetration" local = "1"]
[if estimate = "$t.exist == 0"]
	// 指定なし
	[var name = "t.penetration" data = "1"]
[else]
	[var name = "t.penetration" data = "$penetration"]
[/if]


// 開発時にfile名を省略した場合の対策
[var name = "t.exist" system = "var_exist" target = "file" local = "1"]
[if estimate = "$t.exist == 0"]
	// 指定なし
	[get_prefilename file = "t.btnfile"]
[else]
	[var name = "t.btnfile" data = "$file"]
[/if]


[lyevent type = "click" mode = "init" id = "$id + '.2'" file = "system/button.iet" label = "pushed"   call = "1" handler = "var" name = "t.button_data" data = "$id + '##' + t.effect + '##' + t.size + '##' + t.varname + '##' + t.data + '##' + call + '##' + t.btnfile + '##' + label" penetration = "$t.penetration"]

[return]

// ---------------------------------------------------------------------------------------------
*btn_off
// id ベースレイヤーID

[lyevent type = "click" mode = "reset" id = "$id + '.1'"]
[lyevent type = "click" mode = "reset" id = "$id + '.2'"]
[lyevent type = "rollover" mode = "reset" id = "$id + '.1'"]
[lyevent type = "rollout" mode = "reset" id = "$id + '.1'"]

[lyprop id="$id + '.1'" alpha="255"]
[lyprop id="$id + '.2'" alpha="0"]

[return]

// ---------------------------------------------------------------------------------------------
// ボタンの機能のみをoffにするマクロ
*btn_off2
// id ベースレイヤーID

[lyevent type = "click" mode = "reset" id = "$id + '.1'"]
[lyevent type = "click" mode = "reset" id = "$id + '.2'"]
[lyevent type = "rollover" mode = "reset" id = "$id + '.1'"]
[lyevent type = "rollout" mode = "reset" id = "$id + '.1'"]


[return]

// ---------------------------------------------------------------------------------------------
// ボタンのレイヤーのみoffにするマクロ
*btn_off3
// id ベースレイヤーID


[lyprop id="$id + '.1'" alpha="255"]
[lyprop id="$id + '.2'" alpha="0"]

[return]

// ---------------------------------------------------------------------------------------------
// [btn text = "ほげ"]と文字を書いたとき、ボタン消去後のflipやtrans直後に必ず書く
// [btn_text_erase backlog = "1"] で、バックログ格納を試みます
*btn_text_erase
[lua]
function btnTextErase(e,param)
	-- 選択肢が1個のみじゃないかどうかをチェック
	if string.find(e:var("btn_text_erase"), ",") == nil then
		-- 覚えているidは1個のみなので、テキスト消去
		e:tag{"chgmsg", id = e:var("btn_text_erase")}
			e:tag{"rp", backlog = param.backlog}
		e:tag{"/chgmsg"}
	else
		-- 選択肢が複数個
		-- 覚えていたidを分解する
		e:tag{"var", name = "btn_text_erase", system = "explode", source = e:var("btn_text_erase"), delimiter = ","}

		-- テキストを消す
		for i = 0, (tonumber(e:var("btn_text_erase.size")) - 1) do
			e:tag{"chgmsg", id = e:var("btn_text_erase." .. i)}
				e:tag{"rp", backlog = param.backlog}
			e:tag{"/chgmsg"}
			i = i + 1
		end
	end

	-- 覚えていた変数をクリアする
	e:tag{"var", name = "btn_text_erase", system = "delete"}
	e:tag{"var", name = "btn_text_erase", system = "delete"}
end
[/lua]
[if estimate = "$btn_text_erase != 0"]
	[var name = "t.exist" system = "var_exist" target = "backlog" local = "1"]
	[if estimate = "$t.exist != 0"]
		// バックログ保存指定があった
		[calllua function = "btnTextErase" backlog = "$backlog"]
	[else]
		// バックログ保存指定がなかった
		[calllua function = "btnTextErase" backlog = "0"]
	[/if]
[/if]
[return]
// ---------------------------------------------------------------------------------------------
// call から呼び出されるブロック
// ---------------------------------------------------------------------------------------------
*rollover
// 連打頻発するのでluaで行う
[lua]
function buttonRollover(e,adress)
	local adr = adress.string
	local sndid = "0.1"
	-- とことん軽量化のためsound.ietマクロを介しない
	e:tag{"seplay",id = sndid ,file = "$os_snd_path + 'se/se0002'"}
	e:tag{"lyprop",id = adr .. ".1" ,alpha=0}
	e:tag{"lyprop",id=adr .. ".2" ,alpha=255}
	-- e:tag({"trans", type=0})
	e:tag{"flip"}
	-- ぷるんエフェクト
	if (adress.zoom ~= '0') then
		local prn_zoom = 105
		for i = 1, 2 do
			e:tag{"tweenset"}
			e:tag{"lytween", id = adr .. "." .. i , param = "xscale", ease = "easeout_cubic", from = 100, to = prn_zoom, time = 30}
			e:tag{"lytween", id = adr .. "." .. i, param = "xscale", ease = "easeinout_cubic", from = prn_zoom, to = 100, time = 130}
			e:tag{"/tweenset"}
			e:tag{"tweenset"}
			e:tag{"lytween", id = adr .. "." .. i , param = "yscale", ease = "easeout_cubic", from = 100, to = prn_zoom, time = 30}
			e:tag{"lytween", id = adr .. "." .. i, param = "yscale", ease = "easeinout_cubic", from = prn_zoom, to = 100, time = 130}
			e:tag{"/tweenset"}
			i = i + 1
		end
	end
end
[/lua]
//[caption data = "$t.button"]
[var name = "t.button" system = "explode" source = "$t.button" delimiter = "/"]
[calllua function = "buttonRollover" string = "$t.button.0" zoom = "$t.button.1"]

// フラグを初期化
[var name = "t.button" system = "delete"]
[return]

// ---------------------------------------------------------------------------------------------
*rollout
// 連打頻発するのでluaで行う
[lua]
function buttonRollout(e,adress)
	local adr = adress.string
	local sndid = "0.1"
	-- とことん軽量化のためsound.ietマクロを介しない
	--e:tag{"seplay",id = sndid ,file = "$os_snd_path + 'se/se0002'"}
	e:tag{"lyprop", id = adr .. ".1" ,alpha = 255}
	e:tag{"lyprop", id = adr .. ".2" ,alpha = 0}
	-- e:tag({"trans", type=0})
	e:tag{"flip"}
end
[/lua]
[calllua function = "buttonRollout" string = "$t.button"]

// フラグを初期化
[var name = "t.button" system = "delete"]
[return]

// ---------------------------------------------------------------------------------------------
*pushed
// ボタンを押したときの動作・エフェクト
// id ベースレイヤーID

// 通常で使われないdelimiterで分解する
// id + '##' + t.effect + '##' + t.size + '##' + t.varname + '##' + t.data + '##' + call + '##' + t.btnfile + '##' + label
[var name = "t.button" system = "delete"]
[var name="t.button" system="explode" source="$t.button_data" delimiter="##"]
[var name = "t.button_data" system = "delete"]

// エフェクトは高速処理のためluaで行う
[lua]
function buttonEffect(e)

	local id = e:var("t.button.0") .. ".3"

	-- varnameが指定されているかどうかをチェック
	if e:var("t.button.3") ~= '0' then
		e:tag{"var", name = e:var("t.button.3"), data = e:var("t.button.4")}
	end

	-- エフェクト処理
	if e:var("t.button.1") ~= 'none' then
		local time = e:var("t.button.1")

		e:enqueueTag{"lytweendel", id = id}
		e:enqueueTag{"lyprop", id = id, visible = 1}
		e:enqueueTag{"flip"}
		e:enqueueTag{"lytween", id = id, param = "alpha", from = 255, to = 0, time = time, handler = "lyprop", visible = 0}

		-- 拡大処理を行うかどうかを調べる
		if e:var("t.button.2") ~= '100' then
			e:enqueueTag{"lytween", id = id, param = "xscale", from = 100, to = e:var("t.button.2"), time = time}
			e:enqueueTag{"lytween", id = id, param = "yscale", from = 100, to = e:var("t.button.2"), time = time}

		end
	end

end
[/lua]
[calllua function = "buttonEffect"]

// jumpかコールかを選択する
//[if estimate = "$t.button.5 != 0"]
//	// コール処理のため、ここからジャンプ遷移
//	[jump file = "$t.button.6" label = "$t.button.7"]
//[else]
//	// リターンジャンプ
[lua]
function buttonReturnJump(e)
	-- タッチデバイスで、ボタンロールアウトとプッシュイベントが
	-- 同時に走るケースがあって、そうするとスタックが壊れるのを防ぐ

	-- ボタンマクロが連続で走ることが無いことより上記を判断する
	local stack = e:getScriptStack()
	if string.find(stack[#stack - 1].file, "button.iet") ~= nil then
		e:debug{level = 0, data = "[button] 強制的にスタックを１つ戻しました : " .. #stack .. "→" .. #stack - 1}
		e:tag{"return"}
	end

	-- jump or call
	if e:var("t.button.5") == '0' then
		-- jump処理だった
	--	local stack = e:getScriptStack()
	--	e:debug{level = 0, data = "[button] (0) Return Jump : " .. #stack}
		e:tag{"return"}
	--	stack = e:getScriptStack()
	--	e:debug{level = 0, data = "[button] (1) Return Jump : " .. #stack}
	end
	e:tag{"jump", file = e:var("t.button.6"), label = e:var("t.button.7")}
end
[/lua]
//	[debug_logging]
	[calllua function = "buttonReturnJump"]
	//[btnReturnJump file = "$t.button.6" label = "$t.button.7"]
[/if]
[return]
// ---------------------------------------------------------------------------------------------
*buttonfont
// ボタンフォント設定
	[font
		face         = "$os_name_path + 'font/rounded-mplus-1c-medium.ttf'"
		left         = "$left"
		top          = "$top"
		width        = "$width"
		//height       = "$height"
		size         = "$size"
		rubyface     = "$os_name_path + 'font/rounded-mplus-1c-medium.ttf'"
		rubysize     = "18"
		spacetop     = "-6"
		spacemiddle  = "-3"
		spacebottom  = "0"
		color        = "$color"
		shadowcolor  = "0xFFFFFF"
		outlinecolor = "0xFFFFFF"
		align        = "$align"
		style        = "outline"
		hung         = "1"
		stack        = "0"
		kerning      = "-3"
	]
[return]
// ---------------------------------------------------------------------------------------------
*last
[return]
