イラレでカレンダー
そんなわけで、カレンダー作成スクリプトを作成してみた。
どーいうわけか、環境は
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; }
だらだら、適当に書きましたので、洗練されてませんが・・・