/*
TSX関連プロシージャ

*/
//画面再描画
function init_TSXEx()
{
var _body =	"<a	href='javascript:void(0);'";
_body+=	"	onclick=\"if(document.getElementById('TSXall').checked){writeTSX(XPS)}else{writeTSX(XPS ,xUI.Select[0]-1 )};\"";
_body+=	"	title=\"TSXを書き出し\"";
_body+=	">ＴＳＸ書出</a> ";
_body+=	"<input type=checkbox id=TSXall title='全シート同時書出' checked>";
_body+=	"<a href='javascript:void(0);' onclick='chg(\"TSXall\");'>all</a>";
_body+=	"<!--TSX 拡張-->";

//	parent.info.document.getElementById("TSXUi").innerHTML=_body;
	document.getElementById("TSXUi").innerHTML=_body;
}
//TSX 繰り返しリスト展開プロシージャ
	var TSXEx_skipValue=0;//グローバルで初期化
//
function TSX_expdList(ListStr,rcl)
{
	if(!rcl){rcl=false}else{rcl=true}
	if(!rcl){
		TSXEx_skipValue=0;
	//初回呼び出しのみ再度初期化
	}
//(スキップ量は0固定)
	var SepChar="\,";//カンマのみ？

//		冒頭の[rR+]を削除
	ListStr=ListStr.replace(/^([\+rR])(.*)$/,"$2");
//		リスト文字列を走査してカラセル表記を置換
	ListStr=ListStr.replace(/[X\* ]/g,"x");
//		角括弧を一組で括弧と置換
	ListStr=ListStr.replace(/\[(.*)\]/g,"\($1\)");
//"="を展開
	ListStr=ListStr.replace(/(\,?)(\(.+\))\=([1-9][0-9]*)/g,"$1s$3\,$2\,s1");//括弧あり
	ListStr=ListStr.replace(/([\,^]+)([1-9][0-9]*)\=([1-9][0-9]*)/g,"$1s$3\,$2\,s1");//括弧なし
//		var PreX="/\(\.([1-9])/g";//括弧の前にセパレータを補う
	ListStr=ListStr.replace(/\(([^\.])/g,"\("+SepChar+"$1");
//		var PostX="/[0-9](\)[1-9])/";//括弧の後にセパレータを補う
	ListStr=ListStr.replace(/([^\.])(\)[1-9]?)/g,"$1"+SepChar+"$2");

//		前処理終わり
//		リストをセパレータで分割して配列に
	var srcList=new Array;
		srcList=ListStr.toString().split(SepChar);

	if (xUI.Select[0]==0){
	} else {}

	var expdList= new Array;//生成データ配列を作成

	var sDepth=0;//括弧展開深度/初期値0
	var StartCt=0;var EndCt=0;
//rT=0;
//		元配列を走査
	var ct=0;//ローカルスコープにするために宣言する
	for (ct=0;ct<srcList.length;ct++){
	tcn=srcList[ct];

//		トークンがコントロールワードならば値はリザルトに積まない
//		変数に展開してループ再開
	if (tcn.match(/^s([1-9][0-9]*)$/))
	{
//		if(RegExp.$1*1>0) {xUI.spin(RegExp.$1*1)}else{xUI.spin(1)};
		TSXEx_skipValue=(RegExp.$1*1>0)? (RegExp.$1*1-1):0;
		continue;
	}
//			グローバル
//		トークンが開き括弧ならばデプスを加算して保留
	if (tcn.match(/^(\(|\/)$/))
	{	sDepth=1;StartCt=ct;
//		トークンを積まないで閉じ括弧を走査
		var ct2=0;//ローカルスコープにするために宣言する
		for(ct2=ct+1;ct2<srcList.length;ct2++)
		{
	if (srcList[ct2].match(/^\($/)){sDepth++}
	if (srcList[ct2].match(/^(\)|\/)[\*x]?([0-9]*)$/)){sDepth--}
			if (sDepth==0)
			{EndCt=ct2;
//	最初の括弧が閉じたので括弧の繰り返し分を取得/ループ
			var rT=RegExp.$2*1;if(rT<1){rT=1};
			var ct3=0;//ローカルスコープにするために宣言する
			for(ct3=1;ct3<=rT;ct3++)
			{if((StartCt+1)!=EndCt)
{
//alert("DPS= "+sDepth+" :start= "+StartCt+"  ;end= "+EndCt +"\r\n"+ srcList.slice(StartCt+1,EndCt).join(SepChar)+"\r\n\r\n-- "+rT);
expdList=expdList.concat(TSX_expdList(srcList.slice(StartCt+1,EndCt).join(SepChar),"Rcall"));
//括弧の中身を自分自身に渡して展開させる
}
			}
			ct=EndCt;break;
			}//if block end
		}//ct2 loop end
			if(rT==0)
			{expdList.push(srcList[ct]);tss_kip();//ct++;
			}
	}else{
//	トークンが展開可能なら展開して生成データに積む
			if (tcn.match(/^([1-9]{1}[0-9]*)\-([1-9]{1}[0-9]*)$/))
			{
	var stV=Math.round(RegExp.$1*1) ;var edV=Math.round(RegExp.$2*1);
		if (stV<=edV){
	for(tcv=stV;tcv<=edV;tcv++){expdList.push(tcv);tss_kip()}
		}else{
	for(tcv=stV;tcv>=edV;tcv--){expdList.push(tcv);tss_kip()}
		}
			}else{
	expdList.push(tcn);tss_kip();
			}

	}
}
//	生成配列にスキップを挿入
function tss_kip(){for (x=0;x<TSXEx_skipValue;x++){expdList.push('');}}
//
// カエス
return expdList;
}

function writeTSX(obj,layerID)
{
	if(!isNaN(layerID)){
	var stID=	layerID	;
	var edID=	layerID+1	;
	}else{
	var stID=	0	;
	var edID=	obj.layers.length	;
	}
//objはXPSオブジェクトを与えること

for(column=stID;column<edID;column++){
//for (LID=stID;LID<edID;LID++){}
	result="";//リザルト初期化
//	column=LID
//シートボディ
		for(line=0;line<obj.duration();line++){
dCk=dataCheck(obj.xpsBody[column+1][line], obj.layers[column].name ,true);
		switch (dCk){
case	null	:		result+="";break;
case	"blank":		result+="*";break;
 default:		result+=dCk;
		}
//		if((column+1)!=obj.layers.length){result+='\t'};//セパレータ
		result+='--'+(line+1).toString();//行番号
		if(line==0){result+="\t\[ "+obj.layers[column].name +" \]"};//レイヤ名
		result+='\r\n';//改行
	}
//ENDマーク
result+='E';

// // // // //返す(とりあえず)
//return result;
wiOpt="screenX=";
wiOpt+=(column*32).toString();
wiOpt+=",screenY=";
wiOpt+=column*24;
wiOpt+=",left=";
wiOpt+=column*32;
wiOpt+=",top=";
wiOpt+=column*24;
wiOpt+=",width=480,height=360,scrollbars=yes,menubar=yes";

_w=window.open ("",obj.layers[column].name,wiOpt);

	_w.document.open("text/plain");
		if(! MSIE && ! Firefox)_w.document.write("<html><body><pre>");
	_w.document.write(result);
		if(! MSIE && ! Firefox)_w.document.write("</pre></body></html>");
	_w.document.close();
	_w.window.document.title=obj.layers[column].name.toString();
}
//	return false;//リンクのアクションを抑制するためにfalseを返す
}

