/* 	レンダー乙女ライブラリ
 *	乙女がとりついて色々とオーバーライドしたり働きます。
 *	レンダー乙女ライブラリ　色々リファレンス
 *	
 */
レンダー乙女ライブラリはAE上で機能するAdobeExtendScriptのアニメショーン用拡張ライブラリです。

アニメーション映画作成で使用される基本的な関数や便利な機能がスクリプトで使用可能になります。

主な拡張は、nasオブジェクトの配下にあります。

オブジェクト　nas　直下にはアニメーション関連の一般に使用可能なプロパティや機能
オブジェクト　nas.GUI　の配下にはアドビスクリプトにおけるＧＵＩ関連プロパティや機能
オブジェクト　nas.otome　の配下にはAEでの作業に特化したプロパティや機能
が置かれております。
それぞれのライブラリは相互に依存関係を持ちますので単独での使用はほぼ不能です。
ご注意ください。

//	otome="possessed";//とりついてます
乙女が取り付いたAEでは一部機能を実現するためにAEの基本オブジェクトに対していくつかの拡張メソッドが追加されます。

		Folder.nas
Folderコンストラクタのプロパティとしてnasライブラリの格納ディレクトリを設定します。
内部で関数やらリソースへのアクセスに使用します。

		Folder.scripts
Folderコンストラクタのプロパティとしてスクリプトフォルダの配置を設定します。
システム側で面倒見てほしかったと思います


/*		Project.getItemByName(itemName); 名前で指定したアイテムを返す
 *:引数:	アイテム名
 *	例:
 *		myItem=app.project.getItemByName("平面");
 *
 *	getItemByName はアイテム名で指定したアイテムの配列を返す。
 *	該当アイテムがなければ nullを返す。
 * :引数:が正規表現の場合は正規表現にマッチする全てのオブジェクトを返すように変更(2009.10.23)
 */
/*		Project.pickItems(itemClass); 指定されたクラスのアイテムを返す
 *:引数:	itemClass
 *		省略可 "composition"/"footage"/"folder"のいずれか
 *	例:
 *		myComps=app.project.pickItems("composition");
 *
 *	pickItem は 各クラスのアイテムを抽出して配列で返す。
 *	省略時は、全アイテム。
 *	該当アイテムがなければ nullを返す。
 */

/*		ItemCollection.getByName(itemName);アイテムコレクションから指定の名前のアイテムを戻す
 *:引数:	itemName
 *		省略可
 *	例:	var myItemFolder=app.project.items.getByName("_footages").items.getByName("_cell");
 *
 *	名前を指定してアイテムを取得　最初にマッチしたアイテムを返す
 *:引数:省略時はfalse アンマッチ時はnull を返す
 *	名前は完全マッチのみ
 */
File
/*	[object File].getBin([readNum])
 *:引数:
 *		readNum	読み出しbite数 省略値 ファイルの残りすべて
 *:戻値:
 *		1バイトあたり1要素の配列 / 読み出し幅が1バイトの時のみNumber
 *	例:
 *		myContent=myFile.getBin();
 * このメソッドはファイルのopen/close操作を行わない。
 * あらかじめファイルを(r)モードでオープンしておくこと。
 * 開かれていないファイルハンドルに対して操作した場合の:戻値:は false
 */
/*(7.0)
 *	[object File].putBin(writeData[,option])
 *:引数:
 *		writeData	書き込みデータ配列 省略時 error
 *		Numberクラス以外のデータはnullを含め 0 として書き込み。
 *		データ単独(1要素のみ)の場合は、Numberクラスも可
 *		オプション(true)で書き込みモードバイト分割(リトルエンディアン)にする。
 *		オプション("big")でビッグエンディアン
 *:戻値:
 *		書き込み成功時にtrue
 *	例:
 *		if(! myFile.putBin(myContent)){alert("Write error !")}
 * 1バイトあたり1要素の配列 / 読み出し幅が1バイトの時のみNumber
 * このメソッドはファイルのopen/close操作を行わない。
 * 負の値は切りあげて 0 ・ 255以上の値は切り捨てて 255
 * オプションがあれば、配列の値が255以上の場合 バイト分割して書き込む。
 * オプションの値が"big"ならばビッグエンディアン それ以外はリトルエンディアン
 * あらかじめファイルを(w)モードでオープンしておくこと。
 * 開かれていないファイルハンドルに対して操作した場合の:戻値:は false
 */
/*	FolderItem.getItemSources()
:引数:	なし
:戻値:	フォルダ配下のアイテムのうちファイルソースをもつアイテムのソースファイルの配列[File,File,File…]

重複チェック等はしない。再帰検索を行う。
配下のオブジェクトにファイルソースが一つもない場合は要素数0の配列でなくfalseを戻す
*/
/*	Comp.getItemSources()
:引数:	なし
:戻値:	コンポ配下のレイヤのうちファイルソースをもつレイヤのソースファイルの配列[File,File,File…]

重複チェック等はしない。再帰検索を行う。
配下のオブジェクトにファイルソースが一つもない場合は要素数0の配列でなくfalseを戻す
*/
/*	CompItem.setFrames()
 * 以下のコードを実行するとコンポアイテムに
 * setFrames() メソッドが増設されます。
 * このメソッドはコンポの継続時間をフレームでセットします。
 *
 *	例: newDuration=app.project.item(1).setFrames(105);
 *
 * 現在のフレームレートでフレーム数をオーバーしない長さの継続時間をセットして
 * コンポにセットされた継続時間を返します。
 * このコードを、AE 7.0以降で実行すると望ましくない副作用が有ります。
 * バージョン分岐して7.0以降の環境でこのコードが実行されないよう注意してください。
 *		Nekomataya/kiyo 2006/07/26
 */
/*	AVLayer.applyPresetA(myFfxFile,skipUndo)
:引数:	myFfxFile	File	プリセットファイル
	skipUndo	boolean	undoGrooupの設定をスキップする。省略値は false

例
app.project.activeItem.selectedLayers[0].applyPreset(myFfxFile);

app.project.item(1).applyPreset(myFfxFile,true);

レイヤにアニメーションプリセットを適用する
AE7でコンポ内でのプリセット適用バグの回避のためのラッパメソッド
オプションが与えられない場合はプリセットにundoGroupを設定してundoの混乱を回避する
スクリプト内で複雑なundoが発生する場合はskipUndoをtrueにすることを推奨

	えーっと　CompItemのapplyPreset()は放置しておく　私は使わないから…
	2009/10/24
*/
/*=============================オートビルダ関連タイムシート適用メソッド=====================2009/10/22=======*/
//+++++++++++++++++++++++++++++Xpsオブジェクト用ＡＥ特化拡張
/*	リンク先自動判定メソッド
	Ｘｐｓ.guessLink(Layer)
:引数:　:AEレイヤオブジェクト
:戻値:‘リンクID
	AEのレイヤを:引数:で与える
:戻値:はオフセット2を加えて返す。ID 0/1 は予約
	0:リンクなし	リンクすべきタイムランがない
	1:特殊タイムライン	タイムラインの記述はシート内にないがスチル素材として静止タイムラインを与えるべきである
	2-:2以降はリンクすべきタイムラインがある。タイムラインIDは:戻値:から２減じて得ること

このメソッドはAEに特化しているので、ＡＥ専用拡張に編入するべき(乙女か …乙女だ)
*/
/*	XPS.mkStage(stgName,stgLength,stgResolution,stgWidth,stgHeight,myOptions)
:引数:
	stgName	ステージコンポ名を文字列で（省略時はXPSデータから作成）
	stagLength　ステージの継続時間をフレーム数で(省略時はXPSデータから作成)
	stgResolution	ステージの基準解像度をdpiで(省略時は入力メディア値から取得)
	stgWidth	ステージ幅をmm数で(省略時はフッテージから最大値を取得)
	stgHeight	ステージ奥行きをｍｍ数で(省略時はフッテージから最大値を取得)
	myOptions	オプション文字列
		map	ＭＡＰ検索を行なう（デフォルト）
		nomap	ＭＡＰ検索を行なわない
		select	現在の選択アイテムをメンバーにする(デフォルトでは無視)
		align[N]	エレメントの強制アライメントを行なう。 [N]は数値
			align0	左下
			align1	下
			align2	右下
			align3	左
			align4	中央(デフォルト)
			align5	右
			align6	左上
			align7	上
			align8	右上
						つまり
							6	7	8
							3	4	5
							0	1	2
						こうです
						アライメントは未実装(2009.10.23)
			bg[N]	背景の取り込みオプション(BG/BOOK等のタイミングのないフッテージ全て)
				bg0	BGを取り込まない
				bg#	#枚のBGを取り込む(1-9) 9個以上はデフォルトにしといてください　数の制限が主な用途だと思うので
				bgAll	あるだけ全て取り込む(デフォルト)

自動化を進める観点から主体となるオブジェクトのメソッドで組むのが最も適切っぽい
ただし、ＡＥに特化したメソッドなのでotomeのライブラリ中で拡張を行なう
ここではコンストラクタの拡張ではなくXPSバッファの機能で実装しておくピクセル比率は"1"固定
この関数は現時点で　XpsオブジェクトではなくXPSバッファの拡張である点に注意　オブジェクトのメソッドコールはできない

各:引数:は基本的に省略が前提なのであった　要ケーステスト(2009/10/23)

*/

//XPSオブジェクトに識別情報を問い合わせる（読み出し専用）
/*	XPS.getInfo()
:引数:	なし
XPSの識別情報を返す　ストア内に内容の一致するタイムシートがあればその情報を返し、ない場合はオブジェクト自身の情報を作成して返す
*/
//+++++++++++++++++++++++++++++AEオブジェクト用Ｘｐｓ対応拡張メソッド

/*	CompItem.applyXPS(ｍｙＸｐｓ)
:引数:	XPSオブジェクト
:引数:が与えられなかった場合はXPSStor.selected/XPSバッファ/XPSStore内の同名シートの順で検索する
	それでも候補がなかった場合はNOPリターン　だけど判定はいまは書かない　そのうち書く　2009/10/20

*/
/*
	XPS内のタイムラインとレイヤの関連付けは以下の手順で解決
1.XPSStore.links配列を参照　(未実装)
2.easyXPS　オブジェクトがあればその内部のレイヤセレクタを参照　(今回はパス)
3.参照データがなければ推測エンジンを使用
*/
/*	AVLayer.applyTimeline(親コンポ,ｍｙＸｐｓ,リンクID)
:引数:
親コンポ　AE7以降なら不要なのだがAE65での実行のために与える
XPSオブジェクト	必ず必要
リンクID 呼び出し側でXPSのどのタイムラインを適用するか決定して与える

:引数:が与えられなかった場合は動作不定
	基本的にはこのメソッドは親コンポからの呼び出し専用である
*/
/*	CompItem.getRootXps()
:引数:	なし
:戻値:	発見時はXpsオブジェクト それ以外はチェック用オブジェクト またはfalse

	nas オートビルド環境下で、親コンポをたぐって元ステージのXpsオブジェクトを返すメソッド
*/
/* CompItem.executeAction(Folder)
コンポアイテムのメソッド
フォルダ内のリソースを順次実行する。

実行するリソースは現在の仕様では以下の通り

##*.ffx / ##*.jsx	(##は整数)

数字で開始されるファイル名を持つアニメーションプリセット、またはスクリプトをこのスクリプトのスコープで逐次実行します。
同じ番号を持つスクリプトとプリセットがあった場合はプリセットを先に適用します。
同じ番号のスクリプト・プリセット同士は昇順ソートで実行されます

スクリプトが自動でundoGroupを設定しますので、スクリプト内でundoGroupを利用しない用に推奨


スクリプト実行時にthisプロパティはコンポ自身を指すので　利用可能

プリセットは以下の順で適用される
アクティブなレイヤに順次
アクティブなレイヤがない場合はコンポと同じサイズのソリッドを新規作成して適用
選択状態に注意
スクリプト内でのカレントフォルダは、ファイル位置に設定済み
フォルダの内容はエイリアスやショートカットでも良い(未実装)

AE7以前ではスクリプトのみ実行
*/
/*	CompItem.addClipTarget(camWidth,camAspect)
:引数:
	camWidth	フレーム横幅をpixelで
	camAspect	フレーム縦横比を　(幅÷高さ)の単数で与える
			3:4(TV)=1.33333333
			16:9(HDTV)=1.7777778
			22:16(35mmシネ)=1.375
			有効桁7桁程度で指定してください。
			それ以上精度を高くしてもピクセルで丸めちゃうのであまり意味はないです。
	camColor　カラー配列　流用オブジェクトがあった場合はそちらを優先するので色指定は意味を持たない…いまのところ
アニメーション撮影で使用するクリッピングターゲット（カメラレイヤ）を設定するメソッド
コンポのメソッドとして実装するので、コンポ特定部分は不要（それはメソッドの外で行なう）
指定なしの場合はnasライブラリの持つ標準値を使用します。
ライブラリの書き換を行なっておくと便利です。
*/
/* CompItem.mkClipWindow(compName,myScale,myOption)
:引数:
	compName	作成するコンポの名前　省略時は 現在のコンポ名+"(clip)"
	myScale	クリップウインドウのスケールを%で　省略値は　100 (カメラ等倍)
	myOption	オプション文字列各種
		margin##	クリップエリアのマージンを％指定マイナス数値で外側をクリップ 省略値　0

コンポにクリップターゲットがある場合のみターゲットを参照するクリッピングコンポを作成する。(通称カメラコンポ)
コンポ自身の第一レイヤがクリップターゲットでない場合は動作しない
:戻値:は作成したコンポまたはfalse
*/
/* CompItem.mkOutputMedia(compName,omIndex,myOption)
:引数:
	compName	作成するコンポの名前　省略時は 現在のコンポ名+"(output)"
	OMIndex	使用するアウトプットメディアDBのID　省略時は現在選択されているメディア
	myOption	オプション文字列各種
			boardOFF	標準のボールド(スレート)を作成しない.別に作成したボールドをつける際などに指定

指定のコンポをスケーリングして出力メディアののコンポにセットする
縦横比が合わない場合は、
:戻値:は作成したコンポまたはfalse
*/
/*=============================オートビルダ関連タイムシート適用メソッド=====================2009/10/22=======*/
/*
 *	nast直下の拡張コマンド
 *		互換のため入れ替え終了までは、同名のユーティリティー関数のラッパであります。
 *		2007/11/07
 */

systemOpen	=	function(targetFileName){return nas.otome.systemOpen(targetFileName);};//
uriOpen	=	function(targetURI){return nas.otome.uriOpen(targetURI);};//
otomeCall	=	function(order){return nas.otome.doComp(order);};//
versionView	=	function(){return nas.otome.versionView();};//

/*+++++++++++++++++++++++++++++++++++++XPSトレーラー関連コード++++++++++++++++++++++++++++++++++++++++++++++*/
/* XPSStore　(シートトレーラ)
	XPSheetStore オブジェクト
	プロジェクト内部にタイムシートを複数記録維持して切り換えて使用する仕組み
	フッテージストア内部にコンポの形で記録する
	インデックスがあり、選択値を切り換えてバッファとの間にやりとりを行う
	バッファはXPS(=従来のXPSオブジェクトをそのまま使用)
	XpsStore.body		実際にシートを格納してあるコンポ
			コンポの下にはテキストレイヤを置いてXPSテキストを置く改行は"\\r\\n"に置換
XpsStore.selected	カレントのタイムシートレイヤをさす。カレントがない場合もあるその場合はnull または　false
			デフォルトの値ではnullレイヤが存在する場合はfalseを与える

XpsStore.currentIndex	カレントインデックスを記録する内部変数　外部操作禁止

XpsStore.getLength()	シート総数を返す
			０を返さずにfalseを返す場合は現状でシート操作環境がない事を表している。
			もし、シート操作環境が必要な場合は　XpsStore.init()メソッドで初期化すると環境が構築される。
XpsStore.get(index)	indexで指定されたレイヤからXpsオブジェクトを取得
XpsStore.set(index,Xps)	indexで指定されたレイヤにXpsオブジェクトを登録する
XpsStore.pop(index)	indexで指定されたシートのデータをXPSバッファに転送する。
			indexが指定されなければカレントのシートに対して実行
XpsStore.push(index)	indexで指定されたシートにXPSバッファのデータをセットする。内部でsetInfo()を実行する。
			indexが指定されなければカレントのシートに対して実行
XpsStore.select(index)	カレントインデックスを切り替えバッファ内容を更新する。
:戻値:は選択されているシートのインデックス。数値のほかにキーワード"fwd,prv,start,end"を受け付ける
XpsStore.getInfo(index)	指定indexのシートのモディファイド情報を取得
		:戻値:は情報オブジェクト
			indexが指定されなければカレントのシートに対して実行
XpsStore.setInfo(index)	指定indexのシートに現行のXPSバッファのモディファイド情報を設定
		:戻値:は情報オブジェクト
			indexが指定されなければカレントのシートに対して実行
XpsStore.add(Xps)	Xpsオブジェクトを直接渡して新規にシート(テキストレイヤ)を作成する。
			XPSバッファを同時更新
			カラ指定の場合はXPSバッファから作成
			既存シートとの重複は関知しないのであらかじめ確認は必要
		:戻値:は追加成功したテキストレイヤ
XpsStore.remove(index)	指定indexのシートをプロジェクトから削除する。インデックスは必ず指定すること。
			インデックス不指定時は失敗させる
			成功時の:戻値:は新たなバッファ内容(Xps)
XpsStore.setBody()	内部で使用するメソッド、ライブラリを参照してbodyを自身のオブジェクトとして再設定する
			設定済みの場合は何もしない。外部アクセス禁止

XpsStore.initBody()	内部で使用する初期化メソッド
			カラのトレーラを作るので注意
*/

*/

/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/


/*
 *	乙女ユーティリティ関数群
 *
 *
 */

/*	乙女undo
	乙女がundoGroupをメモしてundoの管理をします
	同時に開いているグループをひとつに制限する機能
	undoGroupが閉じられずに次が発行されたらそれを閉じてから次を開きますので
	エラー回避に役立つはず
	app.begin/end UndoGroupのラッパです
 */
nas.otome.undoGroup="";//管理グループ名バッファ
/*	nas.otome.beginUndoGroup(myGroup)
:引数:	グループラベル/String
:戻値:	なし
	管理付きのundoGroupを開始する。
	管理下に閉じられていないundoGroupが存在したらいったん閉じてからグループを開始する
	app.beginUndoGroup()と置き換え可能
*/
/*	nas.otome.endUndoGroup()
:引数:	なし
:戻値:	なし
	undoGroupを閉じる。管理下のunodGroupがなければ何もしない
	app.endUndoGroup()と置き換え可能
*/
//		乙女コンソール表示
/*	nas.otome.writeConsole(msg)
:引数:	コンソール表示メッセージ
:戻値:	なし
	nas.dbgConsole コンソールにメッセージを書き出す。
	コンソールが立ち上がっていないときはAEのコンソールに向かって出力する。
	dbgConsoleが受信したメッセージはそのままファイルに保存可能
*/

//		コンポジションに対する関数実行
これらの関数alpha1〜2との互換のため残っている関数です。そのうち消えます
nas.otome.doComp(order)
{
	if(! app.project) return false;
	if((! app.project.activeItem)|| !(app.project.activeItem instanceof CompItem)){alert("コンポアイテムを選択してくらさい");return false;}
	this.beginUndoGroup(order);
		switch(order)
		{
case	"セル並び替え":	nas.otome.reOrderCell(app.project.activeItem);break;
case	"L/Oモード変更":	nas.otome.reViewLayout(app.project.activeItem);break;
case	"レイヤ名推測":	nas.otome.reNameCell(app.project.activeItem);break;
case	"セルをゴニョ…":	nas.otome.clipCell(app.project.activeItem);nas.otome.smoothCell(app.project.activeItem);break;
default:	;
		}
	this.endUndoGroup();
	return true;
};
//

/*	nas.otome.systemOpen(targetFileName)
:引数:	ファイル名　String
:戻値:	特になし
	ファイル名を与えてシステムで実行する
	実行ファイル、データファイルなどをシステム経由で起動できる
*/

/*	nas.otome.uriOpen(targetURI)
:引数:	URI	String
:戻値:	なし
	URIを与えてシステムで開く
	単純にシステムに渡すのではなく、URIをリダイレクトする一時htmlファイルを
	作成してそれをシステムに渡すので標準のブラウザで実行される
*/

/*	nas.otome.versionView()
:引数:	なし
:戻値:	なし
//		おまけコマンド バージョン表示
*/
/*	nas.otome.loadXPS(targetFile)
:引数:	File ターゲットのファイルオブジェクト
:戻値:	読み込み(またはアップデート)成功したXPSオブジェクトのインデックス(=LayerID) または false

	与えられたXPSファイルを読み出して、Root/[footages]/_etc/[timeSheetBinder]　コンポへ登録する
	プロジェクト内では所定のコンポ内へテキストレイヤのソーステキストとして保存する
	テキストレイヤのコメントデータとして、
		オリジナルファイルのサイズ
		オリジナルファイルのパス
		最終更新日付
	を維持して、いずれかが変更されたとき　内容変更の確認が可能なようにしておく
	ファイルがすでに読み込まれていて、かつ変更されていない場合は読み込みをスキップする

新メソッドでは、ビルドに先立ってXpsオブジェクトが必要なのでMAPビルドに先行して何らかのXPSを初期化する必要がある
読み込んだだけではデフォルトのXPSバッファが初期化されないので、この関数のあとに初期化が必要
 */

/*	nas.otome.getXPSheets(Folder)
:引数:　:Folder　検索の基点フォルダ
:戻値::読み込んだシートの数

	与えられたフォルダを基点として再帰検索を行い発見したタイムシートをプロジェクトに取り込む
	すでにプロジェクト内にあるシート、現在のシートと異なっている場合のみ上書きで読み込む。
	
 */
/*	nas.otome.reOrderCell(Comp)
:引数:　:コンポアイテム
:戻値::なし
	レイヤをセル順に並び替える暫定版
	レイヤ名がフッテージソース名だったらそれっぽい並べ替え用文字列を作る
	現在シート参照部分なし
	この関数は実験関数です。そのうちなくなります
*/
/*	nas.otome.reNameCell(myComp)
:引数:	コンポアイテム
:戻値:	なし
	コンポ内のセルをそれらしいレイヤ名に変更する
	この関数は実験関数です。そのうちなくなります
*/
/*	nas.otome.clipCell(myTarget)
	この関数は実験関数です。そのうちなくなります
*/
/*	nas.otome.smoothCell(myComp)
	この関数は実験関数です。そのうちなくなります
*/
/*	nas.otome.reViewLayout(myComp)
	この関数は実験関数です。そのうちなくなります



//==============アイテム判別に使用される関数群
/*	nas.otome.isPsdFolder(myFolder,mySource)
:引数:	myFolder	フォルダアイテム　mySource	チェックするpsdファイル
:戻値:	フッテージソース　または　false
:引数:のフォルダが特定のpsdファイルのフッテージフォルダか否かを判定する
ソースが省略された場合は最初にあたったファイルソースをあてるので省略可能
psd以外の判定はしないでfalseを戻す
*/
/*	nas.otome.isPsdComp(myComp,mySource)
:引数:	myComp	コンポアイテム　mySource	チェックするpsdファイル
:戻値:	フッテージソースのファイルオブジェクト
内部のプリコンポを遡り:引数:のコンポが特定のpsdファイルのコンポか否かを判定する
ソースが省略された場合は最初にあたったファイルソースをあてるので省略可能
他のフッテージを登録した時点で判定は外れ。 平面やヌルは判定外
*/
/*	nas.otome.guessFtgCtg(projectItem)
:引数:　プロジェクトアイテム(CompItem or FolderItem)
:戻値:	カテゴリID
	
	プロジェクトアイテムのフッテージカテゴリを推測するメソッド
	実質のカテゴリはコンポ内の位置で判別される
	カテゴリには以下のものがある
	false	一般のフォルダ、コンポ等のフッテージとして扱わないもの
	コンポやフォルダのうち　ｐｓｄフォルダ・コンポは　フッテージに準ずる:戻値:をもつ
	(セル・背景・レイアウト)等の素材カテゴリ
		そのときどきの登録次第で種別は変化する
		nas.ftgFolders に情報を登録する
	判別不明なフッテージに対しては ＩＤ=0 を返す
	
	包括クラスのコンストラクタがないので乙女の関数で実装
 */
/*	nas.otome.getFootage(targetFolder)
	このインポート関数はもともとスマートインポータだったものですが、もう
	なんか別物? でもリダクションしたい 2006/01/22 kiyo
 */
// 以下はインポータの内部関数外のメソッドに持ち出したほうが良いものが何点かある
/* isSequenceElements(file)
:引数::ファイルオブジェクト
:戻値::Object/false
	ファイルがシーケンスの一部か否かを判定する
	判定は以下の条件を満たすもの
		ラベルおよび数値部分を持つファイル名であること
		ラベルは空文字列でもよろしいが、その場合はラベルとファイルの所属フォルダ名は一致している必要がある?(>ないことにする)
		指定の拡張子であるもの（nas のプロパティをみる）
		同一のフォルダに同ラベルのナンバリングファイルが複数あるか
		または単独フォルダであっても親フォルダのラベルが当該ファイルのラベルとマッチしているもの

正規表現見直し。ラベルの範囲をひろく採る　2009/10/19
…これで同時に開始ファイルを返したら下の判定楽になる？　nasのメソッドだね
 */
/*	testForSequence(files)
:引数:　：　ファイルを要素とする配列
:戻値:　：　先頭ファイルの配列
	基準
	　ラベルおよび数値部分を持つファイル名であること
	　ラベルは空文字列でもよろしい
	　連番桁あわせは行われていること
	　テスト範囲のフォルダはファイルシステム上で同じ位置であること
	　元のシーケンス判定はあまり良くないので消す
	　PSDファイルのシーケンスをトラップすることにする
*/
/*	importSafeWithError
:引数:　：インポートオプションオブジェクト
:戻値:　：なし
名前ほど格好よくないね　とほほ
　*/
/*	isImported(file)
:引数:　：　ファイルオブジェクト
:戻値:　：　ヒットしたアイテムインデックス
ファイルがプロジェクトにすでにインポートされているか否かテストする
ヒットがなければfalse
 */
/*	processFolder(theFolder)
//	フォルダ処理
 */



//============================================素材分類用フォルダアイテム作成
/*	nas.otome.mkWorkFolders()
:引数::なし
:戻値::作成成功したフォルダの配列（一考？
プロジェクトにフッテージ格納用のフォルダアイテムを作る
オートビルダのための準備関数
AE7　以降で動作
乙女の設定を参照して予備的にフォルダアイテムを作成
あらかじめフォルダが存在しなくても実際は割り振りプロシージャがフォルダアイテムを作るが、作っておくと何かと便利

*/
//============================================フッテージ振り分け
/*	nas.otome.divideFootageItems()
:引数::なし
:戻値::移動したアイテムの個数

選択されたアイテムのうちファイルソースフッテージをプロジェクトフォルダに振り分ける
選択されたアイテムが存在しない場合は、
ルートフォルダのすべてのフッテージアイテムおよび背景コンポ背景コンポのソースレイヤフォルダを対象に動作する。

フォルダはソースの所属フォルダの名前をそのまま使用　すでに同名のフォルダが存在する場合はそのフォルダを使用
フッテージがシーケンスの場合でかつフッテージプレフィックスがフォルダ名と同一の場合のみさらに上のフォルダ名を使用する

各フォルダは　/[footages]/ の配下に作成する

現行きめうちで
*		[footages]
 *			|- _bg  	背景フォルダ "_bg/(BGフォルダ)" 配下にあれば自動登録
 *			|- _etc 	各種素材フォルダ
 *			|- _frame	フレーム設定フォルダ
 *			|- _lo  	レイアウト格納フォルダ　"_lo/(レイアウトフォルダ)"配下にあれば自動登録
 *			|- _paint	セル格納フォルダ　"_paint/(セルフォルダ)"配下にあれば自動登録
 *			|- _sound	(予約)
 *			|- _system	(予約)
 *			|- _rough	(予約)ラフ原用
 *			|- _key　	(予約)原画用
 *			|- _draw(ing)	(予約)動画用
 *			|- _other	不明フッテージを格納
上記のフォルダを対象とする
*/

//============================================グループマップ作成
/*	nas.otome.mkMapGroups()
:引数::なし
:戻値::作成したプリコンポ（タイムライングループ）の数

XPSオブジェクトを参照してセルのプレコンポ(グループマップ)を作成する
XPSオブジェクトが読み込まれていることが前提
オートビルダのための準備関数
セルの実際の配置は行わない
この関数は実際のセルを割り振るときに呼び出す機能関数とするか、またはMAPのメソッドにしたほうが良い
*/
/*	nas.otome.buildMAP()
:引数::なし
:戻値::true/false


	各機能を連続処理してMAPの自動ビルドを行う
	処理成功時はrue / 中断を検知した場合はfalse
	
	現存のフッテージをあさって　マップグループらしきものを作る
	(1)フッテージフォルダを検索してマッチしたコンポに投げ込む
		下セル・上セル・合成セル・ブラシは一応サポート
		判別不能なセルは手動でコンポに入れてほしい。
		サイズと継続時間は調整するけど、最大マッチで投げ込む
	(2)レイアウトフォルダとフレームフォルダをあさってカメラワークマップを作る
		最大マッチで重ねるのみ
	(3)フッテージフォルダから背景らしきものを探し出して背景プリコンポを作る。
	(4)背景プリコンポとカメラワークマップを重ねてステージを作る　カメラレイヤも作成
	(5)ステージにセルを投げ込んでそこでシートマッピングする
	(6)ステージをカメラコンポでクリップ
	(7)カメラコンポを出力コンポにボールドつきで設定　書き出し可能な提携処理を行う

	それぞれ別の機能部品に仕立てるが吉

ココでは前提として有効なXPSファイルがターゲットフォルダの配下に含まれていることが前提である

 */
//===================================================　背景をMAPに取り込み
/*	nas.otome.standbyBGFootages()

:引数::なし
:戻値::処理成功したアイテムの数

タイムライン外のフッテージをプロジェクト内でMAP配置する
背景BOOK等の暗黙の素材が対象である

インポート済みの背景の想定様態は2種
通常フッテージファイルかまたはフォトショップコンポ

通常フッテージファイルの場合は[footages]_bg 配下に取り込んで[MAP][CELL]配下にグループプリコンポを置く(一考)
PSDコンポの場合は暫定処置で背景用のプリコンポを作成　というか背景のフォトショップファイルをインポート時にコンポで読み込んで
フッテージはフォルダをリネームして[footages]_bg　の配下に置き、
コンポは[MAP][CELL]フォルダに移動してファイル名でリネームする。
素材配置は元のファイルの情報を維持
継続時間は兼用カット数分のフレーム・オリジナル配置をベースにステージに自動配置してnullでつなぐ？
（またはカット継続時間の最長？）
 09/21 尺調整未処理

ココでは前提としてインポートおよびプロジェクトフォルダへの配置は済んでいるものとする

*/
/*	nas.otome.standbyCellFootages()
:引数::なし
:戻値::作成成功したアイテムカウントオブジェクト

この関数を呼び出す場合はプロジェクト内のアイテムの配置が完了しているものとする
*/
