
/**
 * 擬似コードによるマニュアル
 */

class PSD {

	// カラーモード定義
	color_mode_bitmap 		= 0;
	color_mode_grayscale 	= 1;
	color_mode_indexed		= 2;
	color_mode_rgb			= 3;
	color_mode_cmyk			= 4;
	color_mode_multichannel	= 7;
	color_mode_duotone		= 8;
	color_mode_lab			= 9;

	// レイヤ種別定義
	layer_type_normal = 0; // 通常レイヤ
	layer_type_hidden = 1; // フォルダ区切り(内部構造用の隠しレイヤなので無視推奨)
	layer_type_folder = 2; // フォルダレイヤ
	layer_type_adjust = 3; // 調整レイヤ
	layer_type_fill   = 4; // 塗りつぶしレイヤ

	// 合成モード定義
	blend_mode_invalid = -1;  // 未知、あるいは何らかの理由で取得出来なかったケース
	blend_mode_normal = 0;
	blend_mode_dissolve = 1;
	blend_mode_darken = 2;
	blend_mode_multiply = 3;
	blend_mode_color_burn = 4;
	blend_mode_linear_burn = 5;
	blend_mode_lighten = 6;
	blend_mode_screen = 7;
	blend_mode_color_dodge = 8;
	blend_mode_linear_dodge = 9;
	blend_mode_overlay = 10;
	blend_mode_soft_light = 11;
	blend_mode_hard_light = 12;
	blend_mode_vivid_light = 13;
	blend_mode_linear_light = 14;
	blend_mode_pin_light = 15;
	blend_mode_hard_mix = 16;
	blend_mode_difference = 17;
	blend_mode_exclusion = 18;
	blend_mode_hue = 19;
	blend_mode_saturation = 20;
	blend_mode_color = 21;
	blend_mode_luminosity = 22;
	blend_mode_pass_through = 23;
	blend_mode_darker_color = 24;	// ここ以降はlibpsd版とは非互換(libpsd版にはない)
	blend_mode_lighter_color = 25;
	blend_mode_subtract = 26;
	blend_mode_divide = 27;

	/**
	 * PSD画像のロード
	 * @param filename ファイル名
	 * @return ロードに成功したら true
	 */
	function load(filename);

	// 画像の基本プロパティ
	
	property width; //< 画像横幅
	property height; //< 画像縦幅
	property channels; //< チャンネル数
	property color_mode; //< カラーモード
	property layer_count; //< レイヤ数

	/**
	 * レイヤ種別の取得
	 * @param no レイヤ番号
	 * @return レイヤ種別
	 */
	function getLayerType(no);

	/**
	 * レイヤの名前の取得
	 * @param no レイヤ番号
	 * @return レイヤ名称
	 */
	function getLayerName(no);

	/**
	 * レイヤの情報の取得
	 * @param no レイヤ番号
	 * @return レイヤ情報がはいった辞書
	 * 辞書の内容
	 * layer_type   レイヤ種別
	 * top          上座標
	 * left         左座標
	 * bottom       底座標
	 * right        右座標
	 * width        横幅
	 * height       縦幅
	 * blend_mode   合成モード
	 * opacity      不透明度
	 * visible      表示状態
	 * name         レイヤ名
	 * type         合成モード（吉里吉里の対応モード)
     * clipping     クリッピングマスクの対象か？
     * mask         レイヤマスクを持っているかどうか？
	 * layer_comp    レイヤーカンプ情報(カンプIDをキーとした辞書)
	 *   %[ <id>: [ id,       // カンプID(getLayerComp() を参照してください)
	 *              offset_x, // レイヤのXオフセット
	 *              offset_y, // レイヤのYオフセット
	 *              enable,   // 表示状態フラグ
	 *            ],... ]
	 */
	function getLayerInfo(no);

	/**
	 * レイヤデータの読み出し
	 * @param layer 読み出し先レイヤ
	 * @param no レイヤ番号
	 * layer_type が layer_type_normal の場合のみ読み込みできます
     * イメージとマスクを合成した状態で読み出します。
	 * データ内容のほか以下のプロパティが自動的にレイヤに設定されます
	 * left          左座標
	 * top           上座標
	 * width         横幅
	 * height        縦幅
	 * type          合成モード
	 * opacity       不透明度
	 * visible       表示状態
	 * imageLeft     0になります
	 * imageTop      0になります
	 * imageWidth    width になります
	 * imageHeight   height になります
	 * name          name が設定されます
	 */
	function getLayerData(layer, no);

	/**
	 * レイヤデータの読み出し
	 * @param layer 読み出し先レイヤ
	 * @param no レイヤ番号
	 * layer_type が layer_type_normal の場合のみ読み込みできます
     * イメージのみを読み出します。
	 * データ内容のほか以下のプロパティが自動的にレイヤに設定されます
	 * left          左座標
	 * top           上座標
	 * width         横幅
	 * height        縦幅
	 * type          合成モード
	 * opacity       不透明度
	 * visible       表示状態
	 * imageLeft     0になります
	 * imageTop      0になります
	 * imageWidth    width になります
	 * imageHeight   height になります
	 * name          name が設定されます
	 */
	function getLayerDataRaw(layer, no);

	/**
	 * レイヤデータの読み出し
	 * @param layer 読み出し先レイヤ
	 * @param no レイヤ番号
	 * layer_type が layer_type_normal の場合のみ読み込みできます
     * マスクのみを読み出します。
	 * データ内容のほか以下のプロパティが自動的にレイヤに設定されます
	 * left          左座標
	 * top           上座標
	 * width         横幅
	 * height        縦幅
	 * type          合成モード
	 * opacity       不透明度
	 * visible       表示状態
	 * imageLeft     0になります
	 * imageTop      0になります
	 * imageWidth    width になります
	 * imageHeight   height になります
	 * name          name が設定されます
	 */
	function getLayerDataMask(layer, no);

	/**
	 * スライスデータの読み出し
	 * @return スライス情報辞書 %[ top, left, bottom, right, slices:[ %[ id, group_id, left, top, bottom, right ], ... ] ]
	 *         スライス情報がない場合は void を返す
	 *         スライスの一番最後は全スライスを含むサイズのスライスのようです
	 */
	function getSlices();

	/**
	 * ガイドデータの読み出し
	 * @return ガイド情報辞書 %[ vertical:[ x1, x2, ... ], horizontal:[ y1, y2, ... ] ]
	 *         ガイド情報がない場合は void を返す
	 */
	function getGuides();

	/**
	 * 合成結果の取得。
	 * ライブラリ中で合成を行うわけではなく、PSDに保存された合成結果を読み出します。
	 * 保存方法によってはこの画像は存在しない可能性があります。
	 * また、レイヤが存在しないカラーモード(2値、インデックスカラー)の場合には
	 * 画像データはこのメソッドで取得する必要があります。
	 * @param layer 格納先レイヤ
	 * @return 取得に成功したら true
	 */
	function getBlend(layer);

	/**
	 * レイヤーカンプデータの読み出し
	 * @return ガイド情報辞書 %[ last_applied_id,  // Photoshp上で最後に適用状態だったid
	 *                           comps:[id,                // カンプID
	 *                                  record_visibility, // 表示/非表示を記録しているか
	 *                                  record_position,   // 位置を記録しているか
	 *                                  record_appearance, // 外観(レイヤーエフェクト)を記録しているか
	 *                                  name,              // カンプ名
	 *                                  comment,           // コメント
	 *                                  ],... ]
	 *         カンプ情報がない場合は void を返す
	 *
	 *   ・record_xxx フラグが立っていな場合は最後に適用したカンプ(last_applied_id ではなく
	 *     プログラムで最後に適用したカンプ)の状態を引き継ぎます
	 *   ・カンプIDに対応した各レイヤーごとの表示状態情報は、レイヤー情報の layer_comp
	 *     プロパティにカンプIDをキーとした辞書に格納してあります。
	 */
	function getLayerComp();
};
