イラレでカレンダー

そんなわけで、カレンダー作成スクリプトを作成してみた。
どーいうわけか、環境は
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;
	
}


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