祝日ロジック修正した箇所

http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm#JS

↑こちらのスクリプトから改変した場所
tsunodaholiday.jsxとかにして、ライブラリ化としておけば、InDesignでもイラレでも使えるかと?

///ネームスペースもどき
var tsunodaholiday = new Object ();

tsunodaholiday.MONDAY = 1;
tsunodaholiday.TUESDAY = 2;
tsunodaholiday.WEDNESDAY = 3;

tsunodaholiday.cstShowaTaiso = new Date(1989,2-1,24);
tsunodaholiday.cstNorihitoKekkon = new Date(1993,6-1,9);
tsunodaholiday.cstSokuireiseiden = new Date(1990,11-1,12);
tsunodaholiday.cstImplementHoliday = new Date(1973,4-1,12);


functionは全てtsunodaholiday.をつれて↓こんな感じに変更。

tsunodaholiday.ktHolidayName = function ktHolidayName(y,m,d)

ktHolidayNameはy,m,dを渡すように変更してm-1しておくようにした。

あとはソース内の関数名を置換で終わり。

使いたいプログラムでインクルードして
alert(tsunodaholiday.ktHolidayName(2009,9,21));
とでもして、試してみる。

イラレでカレンダー

そんなわけで、カレンダー作成スクリプトを作成してみた。
どーいうわけか、環境は
Windows XP Illustrator CS3
なぜかイラストレータで挑戦してみた。なんとなく・・・

休日ロジックは
http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm#JS
↑こちらのロジックを使用させて頂きました。若干修正して、ライブラリ化してインクルードしています。
人のソースなので転載しちゃだめだろうな・・・

#include '~/My Documents/tsunodaholiday.jsx';

////////
var Sat_color;
var San_color;
var Week_color;
var Page_doc;
var Text_obj;


var Kiten_x;
var Kiten_y;

var Font_obj;

var Year_u =  (new Date()).getFullYear();
var Month_u =  (new Date()).getMonth() +1;

////
///マックは'Osaka'とか
var Font_name = 'MS-Gothic';


/////init////////
setColor();


////基準点
Kiten_x = mmToPoint(10);
Kiten_y = mmToPoint(287);

///行間隔
Gyo_kan = mmToPoint(7);
Ji_kan = mmToPoint(6);


////////////////


////新規ページ
Page_doc = documents.add(DocumentColorSpace.CMYK,mmToPoint(210),mmToPoint(297));



var userprompt = prompt("西暦4桁",Year_u);

Year_u = userprompt



for(var i=1;i<=12;i++)
{
	
		Month_u = i;
		var Line_counter = 0;
		var Text_obj_x;
		var Text_obj_y;
		var Days__ = new Array();
		var Holiday__ = new Array();
		
		var IX;
		

		main();
		
		Kiten_x += mmToPoint(60);
		
		if(i % 3 == 0) {
			Kiten_y -= mmToPoint(60);
			Kiten_x = mmToPoint(10);
		
		}

}


////////function////////////////

function main(){
	

Text_obj_x = Kiten_x;
Text_obj_y = Kiten_y;

	
///タイトル作成
wrTitle(Year_u+'年'+Month_u+'月');

///Y軸下げ
Text_obj_y -= Gyo_kan;


///曜日作成
wrWeek();
///Y軸下げ
Text_obj_y -= Gyo_kan;
///X軸戻し
Text_obj_x = Kiten_x;


///本体作成
Days__ = calendar(Year_u,Month_u);

for(var i=0;i<Days__.length;i++)
{
	IX = i;
	
	Line_counter++;
	makeDay(Days__[i]);
	
	if(Line_counter == 7){
		Line_counter = 0
		
		Text_obj_y -= Gyo_kan;
		Text_obj_x = Kiten_x;
	}

}


}



//////配列を返す
function calendar(year,month){
	
		var week;
		var day_count = 1;
		var month_end_day__ = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
		
		var result__ = new Array();
		
		var theDate = new Date();


		///閏年の判定
		if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
		{
			month_end_day__[2] = 29;
		}

		theDate.setFullYear (year);
		theDate.setMonth (month -1);
		theDate.setDate (1);
		
		week = theDate.getDay();
	
	
		///空白
		for(var i=0;i<week;i++)
		{
			Holiday__[i] = false;
			result__[i] = ' ';
		}
		
		///日にち
		for(var i=week;i<= 42;i++)
		{
			
			
			if(tsunodaholiday.ktHolidayName(parseInt(year),parseInt(month),parseInt(day_count)) != ""){
				Holiday__[i] = true;
				
			}else{
				Holiday__[i] = false;
			}
		
			result__[i] = day_count;
			day_count++;
			if(day_count > month_end_day__[month]) break;
			
		}
	
		
		return result__;
		

}


function makeDay(moji){
	
	var text_obj;
	
	text_obj = Page_doc.textFrames.add();
	text_obj.contents = String(moji);
	

	mojiKazari(text_obj,Font_name,8,Line_counter);
	

	text_obj.left = Text_obj_x;
	text_obj.top = Text_obj_y; 
	
	Text_obj_x += Ji_kan;
	
	text_obj.paragraphs[0].justification = Justification.CENTER; 
	
}



function mojiKazari(textObj,fontname,size,line){
	
	var fonttype = app.textFonts.getByName(fontname);
	
	
	for(var i=0;i < textObj.characters.length;i++)
	{
		
		textObj.characters[i].textFont = fonttype; 
		textObj.characters[i].fillColor = Week_color; 
		
		if(line == 1) textObj.characters[i].fillColor = San_color;
		if(line == 7) textObj.characters[i].fillColor = Sat_color;
		
		if(Holiday__[IX]) textObj.characters[i].fillColor = San_color;
		
		
		textObj.characters[i].size =size; //pt 
	}
	
	
}

function wrTitle(title){
	
	////基準点から作成
	
	var title_obj;
	var font_obj = app.textFonts.getByName(Font_name);
	
	title_obj = Page_doc.textFrames.add();
	title_obj.contents = String(title);
	
	title_obj.left = Kiten_x;
	title_obj.top = Kiten_y;
	
	
	wrMoji(title_obj,font_obj,Week_color,10);
	

}

function wrWeek(){
	
	var fonttype = app.textFonts.getByName(Font_name);
	
	
	var week__ = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
	var text_obj;
	
	for(var i=0;i<week__.length;i++)
	{
		text_obj = Page_doc.textFrames.add();
		text_obj.contents = week__[i];
		
		text_obj.left = Text_obj_x;
		text_obj.top = Text_obj_y;
		
		Text_obj_x += Ji_kan;
		
		mojiKazari(text_obj,Font_name,6,i+1);
		
		text_obj.paragraphs[0].justification = Justification.CENTER;
		
		
	}
					

}


function wrMoji(tx_obj,font_obj,color_obj,size){
	
		for(var i=0;i < tx_obj.characters.length;i++)
		{
					tx_obj.characters[i].textFont = font_obj; 
					tx_obj.characters[i].fillColor = color_obj; 
					tx_obj.characters[i].size = size;
		}

}

function setColor(){
	
		Sat_color = new CMYKColor();
		Sat_color.cyan = 100;
		Sat_color.magenta = 0;
		Sat_color.yellow = 0;
		Sat_color.black = 0;
	
		San_color = new CMYKColor();
		San_color.cyan = 0;
		San_color.magenta = 100;
		San_color.yellow = 0;
		San_color.black = 0;
	
		Week_color = new CMYKColor();
		Week_color.cyan = 0;
		Week_color.magenta = 0;
		Week_color.yellow = 0;
		Week_color.black = 100;	
		
		Gray_color = new CMYKColor();
		Gray_color.cyan = 0;
		Gray_color.magenta = 0;
		Gray_color.yellow = 0;
		Gray_color.black = 50;
	
	}


function mmToPoint(mm){
	
	return mm * 2.834;
	
}


だらだら、適当に書きましたので、洗練されてませんが・・・

setMonth()

カレンダーを作ることにしました。そんなロジック転がっているけども、人の書いたものってよくわからない・・・。
ということで車輪の再開発を決意。と、思ったけど、曜日がとれない。今日って水曜なんだけども、5が返ってくる・・・。

setMonth()の引数って(月-1)なのね・・・
9月だったらsetMonth(8)なのね・・・。
知りませんでした、すいません・・・。

前途多難。

オブジェクトサイズの調整

Obj.fit(FitOptions.contentToFrame); //内容をフレームに合わせる

FitOptions.frameToContent フレームを内容に合わせる
FitOptions.centerContent 内容を中央に合わせる
FitOptions.proportionally 内容を縦横比率に応じて合わせる
FitOptions.fillProportionally フレームに均等に流し込み

インデザインメニューの[オブジェクト]>[オブジェクトサイズの調整]の操作 

ファイルかフォルダの判定

バイブルのInDesign自動処理実例集に記載されていた・・・
P152下 getFiles フォルダならundefined ファイルならオブジェクトを返すって書いてある。
しかも、サブフォルダを含むファイル一覧の処理までも・・・・

でも書いてみるとファイルの場合にundefinedが返ってくるんだよなぁ〜。

OSX 10.4 CS3

#include "~/Library/IddJavascript/spaceiru.jsx"

if(spaceiru.system.selectFolder()== false){
	
	alert('ユーザーによってキャンセルされました。');
	exit();
}

////選択フォルダ
var baseFolder = spaceiru.system.getFoldername();
var list =  (new Folder(baseFolder)).getFiles ();

for(var i=0;i<list.length;i++)
{

	for(var i=0;i<list.length;i++)
	{
		alert(list[i].getFiles);
	}
		
}

PDF書き出し

結局なにをしたかったかと言うと、特定のフォルダのインデザインファイルのPDF書き出しの自動化。
フォントチェックとリンクチェックをしてから書き出し。

OSX10.4 CS3


メインスクリプト

#include "~/Library/IddJavascript/spaceiru.jsx"

//////////////////////
////PDF書き出しのプリセット名の指定があったら書く。指定がない場合は空にする。
var pdfPreSetName = '[プレス品質]';
/////////////////////


////ファイルオープン時に警告ダイアログを出さない。
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;


if(spaceiru.system.selectFolder('インデザインフォルダ')== false){
	alert('ユーザーによってキャンセルされました。');
	exit();
}

////選択フォルダ
var baseFolder = spaceiru.system.getFoldername();

////書き出しフォルダ
if(spaceiru.system.selectFolder('書き出しフォルダ')== false){
	alert('ユーザーによってキャンセルされました。');
	exit();
}

var outputFolder = spaceiru.system.getFoldername();

///確認
if(confirm('本当に実行しますか?') == false)
{
	exit();
}



///ライブラリ初期設定 選択フォルダのパスを渡す
spaceiru.idd.initIdd(baseFolder);

///ライブラリメイン処理
spaceiru.idd.getIdd();

///結果取得(パスが配列で返る)
var iddFile = spaceiru.idd.getResult();

///結果取得(ファイル名)
var iddFileName = spaceiru.idd.getResult('file');


for(var i=0;i<iddFile.length;i++)
{
	
	//オープン
	openfile(iddFile[i]);
	
	//リンクとフォントのチェックして書き出し
	
	if((spaceiru.idd.linkCheck() == true) && (spaceiru.idd.fontCheck() == true)){
		
		exportPDF(outputFolder,iddFileName[i]);
		
	}
	
	//クローズ
	closefile();	
}



////ファイルオープン時の警告ダイアログを元に戻す
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;


///////////////////function/////////////////////////

function openfile(name){
	
	var fileobj;
	fileobj = app.open(new File(name));

}

function closefile(){
	
	app.activeDocument.close(SaveOptions.no);

}


function exportPDF(path,name){
		
		////拡張子をpdfにする
		name = name.replace (/\.[^\.]*$/,".pdf");
		path = path + '/' + name;
		
		fileobj = new File(path);
		
		if(pdfPreSetName == '')
		{
				app.activeDocument.exportFile(ExportFormat.pdfType, fileobj, false);
		}else{
				app.activeDocument.exportFile(ExportFormat.pdfType, fileobj, false,pdfPreSetName);
		}
	
	}


インクルードファイル spaceiru.jsx

//namespace spaceiru
//
//
//

var spaceiru = new Object();
spaceiru.system = new Object();
spaceiru.idd = new Object();


spaceiru.foldername = "";


spaceiru.system.selectFolder = function selectFolder(mes){
	
			if(mes == undefined){
				mes = 'フォルダを選択してください。';
			}
	
			var folderObj;
			var foldername;
			
			foldername = Folder.selectDialog (mes);
		
			if(foldername != null){
				
				spaceiru.system.setFoldername(foldername);
				
				return true;
				
			}else{
				
				return false;
				
			}
	}

spaceiru.system.getFoldername = function getFoldername(){
	
				return spaceiru.foldername;
}


spaceiru.system.setFoldername = function setFoldername(name){
	
				spaceiru.foldername = name;
				
}


//////////////////idd File Select/////////////////
///////////////////////////////////////////////

spaceiru.idd.initIdd = function initIdd(folder){
	
			spaceiru.idd.baseFolder = folder;
			spaceiru.idd.presentFolder = 	spaceiru.idd.baseFolder;
			spaceiru.idd.count = 0;
			spaceiru.idd.presentRoop = new Array();

			spaceiru.idd.baseFilecont = (new Folder(spaceiru.idd.baseFolder)).getFiles().length;

			spaceiru.idd.checkFolderName;
			
			///結果を入れる配列 フルパス
			spaceiru.idd.result = new Array();
			
			////結果を入れる配列 ファイル名
			spaceiru.idd.resultFilename = new Array();
			
}


spaceiru.idd.getIdd = function getIdd(){
	

	spaceiru.idd.presentRoop[0] = 0;

	if(spaceiru.idd.baseFilecont == 0) return;
	

	while(spaceiru.idd.presentFolder != false)
	{
		
		spaceiru.idd.presentFolder = spaceiru.idd.checkFolder(spaceiru.idd.presentFolder,spaceiru.idd.presentRoop[spaceiru.idd.count]);
		
		
		if(spaceiru.idd.presentFolder == false)
		{
			if(spaceiru.idd.count > 0){
				spaceiru.idd.count -= 1;
			}
			
			///親にセット
			spaceiru.idd.presentFolder = (new Folder(spaceiru.idd.checkFolderName)).parent.fsName;
			
			if((spaceiru.idd.count == 0) && ( spaceiru.idd.baseFilecont  == spaceiru.idd.presentRoop[0]))
			{
				
				///終了
				spaceiru.idd.presentFolder = false;
				
			}
			
		}else{
			///次の階層
			spaceiru.idd.count += 1;
			spaceiru.idd.presentRoop[spaceiru.idd.count] = 0;
		}
		
	}

}


spaceiru.idd.checkFolder = function checkFolder(name,start){
	
	var list =  (new Folder(name)).getFiles ();
	var result = false;


	for(var i=start;i < list.length;i++)
	{
		
		
		spaceiru.idd.presentRoop[spaceiru.idd.count] = i +1 ;
		
		
		var len = (new Folder(list[i].fsName)).getFiles().length;
		if(len > 0)
		{
			result = list[i].fsName;
			break;
			
		}else{
			
			spaceiru.idd.setResult(list[i]);

			
		}
		
	}
	
	
	spaceiru.idd.checkFolderName = name;
	
	return result;
	

}

/////ファイル名チェック
spaceiru.idd.setResult = function setResult(obj){
	
	var name = obj.name;
	var path = obj.fsName;
	
	if(name.match(/\.indd$/g))
	{
	      spaceiru.idd.result.push(path);
		  spaceiru.idd.resultFilename.push(name);
		  
	}
	
}


////引数があればファイル名を返す
spaceiru.idd.getResult = function getResult(type){

		if(type == undefined){
				return spaceiru.idd.result;
		}else{
			
			return spaceiru.idd.resultFilename;
		}
	
	

}


/////リンクチェック
////全てリンクされてたらTrue
spaceiru.idd.linkCheck = function linkCheck(){
	
	var allLinks = app.activeDocument.links;
	var result = true;
	
	for(var i=0; i < allLinks.length;i++)
	{
				if((allLinks[i].status == LinkStatus.linkMissing) || (allLinks[i].status == LinkStatus.linkOutOfDate))
				{
					result = false;
					break;
				}
	}
	
	return result;
	
}

////フォントチェック
///全て適用されたらTrue
spaceiru.idd.fontCheck = function fontCheck(){
	
	var docObj = app.activeDocument;
	var result = true;
	
	for(var i=0; i < docObj.fonts.length;i++)
	{
		if(docObj.fonts[i].status != FontStatus.installed)
		{
			result = false;
			break;
		}
	}
	
	return result;
	
}

どーだろう?