This is an automated email from the ASF dual-hosted git repository.

aharui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 462df29  implement DateFormatter
462df29 is described below

commit 462df29dbf897891acdac1a52eaebd23ddb952ff
Author: Alex Harui <[email protected]>
AuthorDate: Thu Jan 23 15:43:21 2020 -0800

    implement DateFormatter
---
 .../src/main/royale/mx/formatters/DateFormatter.as |  19 +-
 .../main/royale/mx/formatters/StringFormatter.as   | 195 +++++++++++++++++++++
 2 files changed, 204 insertions(+), 10 deletions(-)

diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/formatters/DateFormatter.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/formatters/DateFormatter.as
index 5592d46..a4cfc19 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/formatters/DateFormatter.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/formatters/DateFormatter.as
@@ -75,9 +75,8 @@ use namespace mx_internal;
  *  @playerversion AIR 1.1
  *  @productversion Royale 0.9.3
  */
-public class DateFormatter 
+public class DateFormatter extends Formatter
 {
-/* extends Formatter */
     //include "../core/Version.as";
 
     
//--------------------------------------------------------------------------
@@ -125,7 +124,7 @@ public class DateFormatter
      */
     public static function parseDateString(str:String, format:String = 
null):Date
     {
-        /* if (!str || str == "")
+        if (!str || str == "")
             return null;
 
         var year:int = -1;
@@ -413,7 +412,7 @@ public class DateFormatter
         if (day != newDate.getDate() || mon != newDate.getMonth())
             return null;
 
-        return newDate; */ var newDate:Date;  return newDate;
+        return newDate;
     }
 
     
//--------------------------------------------------------------------------
@@ -643,12 +642,12 @@ public class DateFormatter
      */
     public function set formatString(value:String):void
     {
-        /* formatStringOverride = value;
+        //formatStringOverride = value;
 
         _formatString = value != null ?
                         value :
-                        resourceManager.getString(
-                            "SharedResources", "dateFormat"); */
+                        /*resourceManager.getString(
+                            "SharedResources", "dateFormat");*/ "MM/DD/YYYY";
     }
 
     
//--------------------------------------------------------------------------
@@ -685,9 +684,9 @@ public class DateFormatter
      *  @playerversion AIR 1.1
      *  @productversion Royale 0.9.3
      */
-    /* override */ public function format(value:Object):String
+    override public function format(value:Object):String
     {       
-      /*   // Reset any previous errors.
+        // Reset any previous errors.
         if (error)
             error = null;
 
@@ -755,7 +754,7 @@ public class DateFormatter
             formatString, VALID_PATTERN_CHARS,
             DateBase.extractTokenDate);
 
-        return dataFormatter.formatValue(value); */ return "";
+        return dataFormatter.formatValue(value);
     }
 }
 
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/formatters/StringFormatter.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/formatters/StringFormatter.as
new file mode 100644
index 0000000..7d25de7
--- /dev/null
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/formatters/StringFormatter.as
@@ -0,0 +1,195 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.formatters
+{
+
+[ExcludeClass]
+
+/**
+ *  @private
+ *  The StringFormatter class provides a mechanism for displaying
+ *  and saving data in the specified format.
+ *  The constructor accepts the format and an Array of tokens,
+ *  and uses these values to create the data structures to support
+ *  the formatting during data retrieval and saving. 
+ *  
+ *  <p>This class is used internally by other formatters,
+ *  and is typically not used directly.</p>
+ *  
+ *  @see mx.formatters.DateFormatter
+ */
+public class StringFormatter
+{
+//    include "../core/Version.as";
+
+       
//--------------------------------------------------------------------------
+       //
+       //  Constructor
+       //
+       
//--------------------------------------------------------------------------
+
+       /**
+        *  Constructor.
+        *
+        *  @param format String that contains the desired format.
+        *
+        *  @param tokens String that contains the character tokens
+        *  within the specified format String that is replaced
+        *  during data formatting operations.
+        *
+        *  @param extractTokenFunc The token 
+        *  accessor method to call when formatting for display.
+        *  The method signature is
+        *  value: anything, tokenInfo: {token: id, begin: start, end: finish}.
+        *  This method must return a String representation of value
+        *  for the specified <code>tokenInfo</code>.
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 9
+        *  @playerversion AIR 1.1
+        *  @productversion Flex 3
+        */
+       public function StringFormatter(format:String, tokens:String,
+                                                                       
extractTokenFunc:Function)
+       {
+               super();
+
+               formatPattern(format, tokens);
+               extractToken = extractTokenFunc;
+       }
+
+       
//--------------------------------------------------------------------------
+       //
+       //  Variables
+       //
+       
//--------------------------------------------------------------------------
+
+       /**
+        *  @private
+        */
+       private var extractToken:Function;
+
+       /**
+        *  @private
+        */
+       private var reqFormat:String;
+
+       /**
+        *  @private
+        */
+       private var patternInfo:Array;
+
+       
//--------------------------------------------------------------------------
+       //
+       //  Methods
+       //
+       
//--------------------------------------------------------------------------
+
+       /**
+        *  Returns the formatted String using the format, tokens,
+        *  and extraction function passed to the constructor.
+        *
+        *  @param value String to be formatted.
+        *
+        *  @return Formatted String.
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 9
+        *  @playerversion AIR 1.1
+        *  @productversion Flex 3
+        */
+       public function formatValue(value:Object):String
+       {
+               var curTokenInfo:Object = patternInfo[0];
+               
+               var result:String = reqFormat.substring(0, curTokenInfo.begin) +
+                                                       extractToken(value, 
curTokenInfo);
+
+               var lastTokenInfo:Object = curTokenInfo;
+               
+               var n:int = patternInfo.length;
+               for (var i:int = 1; i < n; i++)
+               {
+                       curTokenInfo = patternInfo[i];
+                       
+                       result += reqFormat.substring(lastTokenInfo.end,
+                                                                               
  curTokenInfo.begin) +
+                                         extractToken(value, curTokenInfo);
+                       
+                       lastTokenInfo = curTokenInfo;
+               }
+               if (lastTokenInfo.end > 0 && lastTokenInfo.end != 
reqFormat.length)
+                       result += reqFormat.substring(lastTokenInfo.end);
+               
+               return result;
+       }
+       
+       /**
+        *  @private
+        *  Formats a user-defined pattern String into a more usable object.
+        *
+        *  @param format String that defines the user-requested pattern.
+        *
+        *  @param tokens List of valid patttern characters.
+        */
+       private function formatPattern(format:String, tokens:String):void
+       {
+               var start:int = 0;
+               var finish:int = 0;
+               var index:int = 0;
+               
+               var tokenArray:Array = tokens.split(",");
+               
+               reqFormat = format;
+               
+               patternInfo = [];
+               
+               var n:int = tokenArray.length;
+               for (var i:int = 0; i < n; i++)
+               {
+                       start = reqFormat.indexOf(tokenArray[i]);
+                       if (start >= 0  && start < reqFormat.length)
+                       {
+                               finish = reqFormat.lastIndexOf(tokenArray[i]);
+                               finish = finish >= 0 ? finish + 1 : start + 1;
+                               patternInfo.splice(index, 0,
+                                       { token: tokenArray[i], begin: start, 
end: finish });
+                               index++;
+                       }
+               }
+               
+               patternInfo.sort(compareValues);
+       }
+
+       /**
+        *  @private
+        */
+       private function compareValues(a:Object, b:Object):int
+       {
+               if (a.begin > b.begin)
+                       return 1;
+               else if (a.begin < b.begin)
+                       return -1;
+               else
+                       return 0;
+       } 
+}
+
+}

Reply via email to