From: Scott H. <sco...@us...> - 2005-07-25 05:28:51
|
Update of /cvsroot/actionstep/actionstep/src/org/actionstep In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22374/src/org/actionstep Modified Files: NSCalendarDate.as Log Message: First version of formatting. All formatting methods untested. Unformat not yet implemented. Index: NSCalendarDate.as =================================================================== RCS file: /cvsroot/actionstep/actionstep/src/org/actionstep/NSCalendarDate.as,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** NSCalendarDate.as 25 Jul 2005 03:14:50 -0000 1.1 --- NSCalendarDate.as 25 Jul 2005 05:28:39 -0000 1.2 *************** *** 32,37 **** */ ! import org.actionstep.NSObject; import org.actionstep.NSDictionary; /** --- 32,40 ---- */ ! import org.actionstep.NSArray; import org.actionstep.NSDictionary; + import org.actionstep.NSException; + import org.actionstep.NSObject; + import org.actionstep.NSUserDefaults; /** *************** *** 42,51 **** */ class org.actionstep.NSCalendarDate extends Date //! should really be NSDate ! { private static var MSPERDAY:Number = 86400000; private static var MSPERHOUR:Number = 3600000; private static var MSPERMINUTE:Number = 60000; private static var MSPERSECOND:Number = 1000; private static var g_firstDayInCommonEra:Date; private var m_calendarFormat:String; --- 45,61 ---- */ class org.actionstep.NSCalendarDate extends Date //! should really be NSDate ! { ! /** The number of milliseconds in a day. */ private static var MSPERDAY:Number = 86400000; + /** The number of milliseconds in an hour. */ private static var MSPERHOUR:Number = 3600000; + /** The number of milliseconds in a minute. */ private static var MSPERMINUTE:Number = 60000; + /** The number of milliseconds in a second. */ private static var MSPERSECOND:Number = 1000; + + /** Format specifier character to function map. */ + private static var g_types:Object; private static var g_firstDayInCommonEra:Date; private var m_calendarFormat:String; *************** *** 89,93 **** format:String, locale:NSDictionary):NSCalendarDate { ! //! implement m_calendarFormat = format; --- 99,103 ---- format:String, locale:NSDictionary):NSCalendarDate { ! NSCalendarDate.reverseFormatWithDescriptionFormatLocale(description, format, locale); m_calendarFormat = format; *************** *** 509,526 **** //****************************************************** ! //* Events ! //****************************************************** ! //****************************************************** ! //* Protected Methods ! //****************************************************** ! //****************************************************** ! //* Private Methods ! //****************************************************** ! //****************************************************** ! //* Public Static Properties //****************************************************** ! //****************************************************** ! //* Public Static Methods ! //****************************************************** //****************************************************** //* Static Constructor --- 519,895 ---- //****************************************************** ! //* Date Formatting Stuff //****************************************************** ! ! /** ! * Formats the date date according to the calendar format format, and ! * returns the resulting string. ! */ ! private static function formatDate(format:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var char:String; // the current character ! var frmtPrt:String; // the formatted "part" ! var isRep:Boolean = false; // "is" a replace character (character following %) ! var len:Number = format.length; ! var formatted:String; ! ! if (locale == null) ! { ! // locale = default; ! } ! ! // ! // Move through the format string's characters. ! // ! for (var i:Number = 0; i < len; i++) ! { ! char = format.charAt(i); ! ! if (isRep) ! { ! if (isTypeCharacter(char)) ! { ! formatted = g_types[char](char, date, locale); ! format = format.substring(0, i - 1) + formatted + ! format.substring(i); ! len += formatted.length - 2; ! } ! else ! { ! //! error? ! } ! ! isRep = false; ! continue; ! } ! ! if (char == "%") ! isRep = true; ! } ! ! return format; ! } ! ! ! /** ! * Uses a string representation of a date and the format string ! * originally used to output the date, and returns the date described. ! */ ! private static function reverseFormatWithDescriptionFormatLocale( ! date:String, format:String, locale:NSDictionary):NSCalendarDate ! { ! var ret:NSCalendarDate; ! ! ret = new NSCalendarDate(); ! ! return ret; ! } ! ! ! /** ! * Handles a percentage symbol. ! */ ! private static function handlePercentage(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! return "%"; ! } ! ! ! /** ! * Handles a formatted weekday. ! */ ! private static function handleWeekDay(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var str:String; ! var arr:NSArray; ! var dayOfWeek:Number = date.dayOfWeek(); ! ! switch (char) ! { ! case "a": ! arr = NSArray(locale.objectForKey( ! NSUserDefaults.NSShortWeekDayNameArray)); ! str = String(arr.objectAtIndex(dayOfWeek)); ! break; ! ! case "A": ! arr = NSArray(locale.objectForKey( ! NSUserDefaults.NSWeekDayNameArray)); ! str = String(arr.objectAtIndex(dayOfWeek)); ! break; ! ! case "w": ! str = dayOfWeek.toString(); ! break; ! ! } ! ! return str; ! } ! ! ! /** ! * Handles a formatted month. ! */ ! private static function handleMonth(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var str:String; ! var arr:NSArray; ! var month:Number = date.monthOfYear() - 1; ! ! switch (char) ! { ! case "b": ! arr = NSArray(locale.objectForKey( ! NSUserDefaults.NSShortMonthNameArray)); ! str = String(arr.objectAtIndex(month)); ! break; ! ! case "B": ! arr = NSArray(locale.objectForKey( ! NSUserDefaults.NSMonthNameArray)); ! str = String(arr.objectAtIndex(month)); ! break; ! ! case "m": ! str = month.toString(); ! ! if (str.length == 1) ! str = "0" + str; ! ! break; ! ! } ! ! return str; ! } ! ! ! /** ! * Handles the locale default (%c = %x %x). ! */ ! private static function handleLocaleDefault(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var str:String = ""; ! ! str += handleDefaultDate(char, date, locale) + " "; ! str += handleDefaultTime(char, date, locale); ! ! return str; ! } ! ! ! /** ! * Handles the day of the month. ! */ ! private static function handleDay(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var str:String ! ! switch (char) ! { ! case "d": ! str = date.dayOfMonth().toString(); ! ! if (str.length == 1) ! str = "0" + str; ! ! break; ! ! case "e": ! str = date.dayOfMonth().toString(); ! break; ! ! case "j": ! str = date.dayOfYear().toString(); ! break; ! ! } ! ! return str; ! } ! ! ! /** ! * Returns the number of milliseconds (0 - 999). ! */ ! private static function handleMilliseconds(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! return date.getMilliseconds().toString(); ! } ! ! ! /** ! * Handles the hour. ! */ ! private static function handleHour(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var str:String; ! ! switch (char) ! { ! case "H": ! str = date.hourOfDay().toString(); ! break; ! ! case "I": ! str = ((date.hourOfDay() % 12) + 1).toString(); ! break; ! ! } ! ! if (str.length == 1) ! str = "0" + str; ! ! return str; ! } ! ! ! /** ! * Handles the timezone. ! */ ! private static function handleTimeZone(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var str:String; ! ! switch (char) ! { ! case "z": ! var hr:String = Math.floor(date.timeZone()).toString(); ! var mn:String = ((date.timeZone() % 1) * 60).toString(); ! ! if (hr.length == 1) ! hr = "0" + hr; ! ! if (mn.length == 1) ! mn = "0" + mn; ! ! str = hr + mn; ! break; ! ! case "Z": ! str = "time zone name"; //! implement ! break; ! ! } ! ! return str; ! } ! ! ! /** ! * Handles the minute. ! */ ! private static function handleMinute(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var str:String = date.minuteOfHour().toString(); ! ! if (str.length == 1) ! str = "0" + str; ! ! return str; ! } ! ! ! /** ! * Returns AM / PM. ! */ ! private static function handleAmPm(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var str:String ! var arr:NSArray = NSArray(locale.objectForKey( ! NSUserDefaults.NSAMPMDesignation)); ! ! if (date.hourOfDay() < 12) ! str = String(arr.objectAtIndex(0)); ! else ! str = String(arr.objectAtIndex(1)); ! ! return str; ! } ! ! ! /** ! * Handles second representation. ! */ ! private static function handleSecond(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var str:String = date.secondOfMinute().toString(); ! ! if (str.length == 1) ! str = "0" + str; ! ! return str; ! } ! ! ! /** ! * Handles years. ! */ ! private static function handleYear(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! var str:String; ! ! switch (char) ! { ! case "y": ! str = date.getYear().toString(); ! break; ! ! case "Y": ! str = date.getFullYear().toString(); ! break; ! ! } ! ! return str; ! } ! ! ! /** ! * Handles default dates according to the locale. ! */ ! private static function handleDefaultDate(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! return NSCalendarDate.formatDate(String( ! locale.objectForKey(NSUserDefaults.NSDateFormatString)), ! date, locale); ! } ! ! ! /** ! * Handles default time according to the locale. ! */ ! private static function handleDefaultTime(char:String, date:NSCalendarDate, ! locale:NSDictionary):String ! { ! return NSCalendarDate.formatDate(String( ! locale.objectForKey(NSUserDefaults.NSTimeDateFormatString)), ! date, locale); ! } ! ! ! /** ! * Returns whether a character should be handled by one of the handlers or not. ! */ ! private static function isTypeCharacter(char:String):Boolean ! { ! return (g_types[char] != undefined); ! } ! //****************************************************** //* Static Constructor *************** *** 537,540 **** --- 906,928 ---- g_firstDayInCommonEra = new Date(1, 0, 1, 0, 0, 0, 0); + // + // Handler functions (for date formatting) + // + g_types = new Object(); + g_types["%"] = handlePercentage; + g_types["a"] = g_types["A"] = g_types["w"] = handleWeekDay; + g_types["b"] = g_types["B"] = g_types["m"] = handleMonth; + g_types["c"] = handleLocaleDefault; + g_types["d"] = g_types["e"] = g_types["j"] = handleDay; + g_types["F"] = handleMilliseconds; + g_types["H"] = g_types["I"] = handleHour; + g_types["M"] = handleMinute; + g_types["p"] = handleAmPm; + g_types["S"] = handleSecond; + g_types["y"] = g_types["Y"] = handleYear; + g_types["z"] = g_types["Z"] = handleTimeZone; + g_types["x"] = handleDefaultDate; + g_types["X"] = handleDefaultTime; + return true; } |