Changeset 121:e140baf77c69 in livinglogic.java.ul4

Show
Ignore:
Timestamp:
07/02/08 00:17:00 (11 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Add date objects, the now() function and the format() and isoformat methods().

format() however isn't implemented yet.

Location:
library/src/com/livinglogic/ul4
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • library/src/com/livinglogic/ul4/Main.java

    r116 r121  
    1313    public static void main(String[] args) 
    1414    { 
    15         Template tmpl = Compiler.compile("<?if data?><ul>\n<?for item in data?><li><?print xmlescape(item)?></li>\n<?end for?></ul>\n<?end if?>"); 
     15        Template tmpl = Compiler.compile("<?print now().isoformat()?>"); 
    1616        long start = new Date().getTime(); 
    1717        String output = tmpl.renders("<gu&rk> & 'foo'"); 
  • library/src/com/livinglogic/ul4/Opcode.java

    r116 r121  
    5555    public static final int OC_RENDER = 50; 
    5656 
     57    public static final int CF0_NOW = 0; 
     58 
    5759    public static final int CF1_XMLESCAPE = 0; 
    5860    public static final int CF1_STR = 1; 
     
    8789    public static final int CM0_LOWER = 5; 
    8890    public static final int CM0_ITEMS = 6; 
     91    public static final int CM0_FORMAT = 7; 
     92    public static final int CM0_ISOFORMAT = 8; 
    8993 
    9094    public static final int CM1_SPLIT = 0; 
     
    218222    public static int callfunc0name2code(String name) 
    219223    { 
    220         throw new UnknownFunctionException(name); 
     224        if (name.equals("now")) 
     225            return CF0_NOW; 
     226        else 
     227            throw new UnknownFunctionException(name); 
    221228    } 
    222229 
     
    301308        else if (name.equals("items")) 
    302309            return CM0_ITEMS; 
     310        else if (name.equals("format")) 
     311            return CM0_FORMAT; 
     312        else if (name.equals("isoformat")) 
     313            return CM0_ISOFORMAT; 
    303314        else 
    304315            throw new UnknownMethodException(name); 
  • library/src/com/livinglogic/ul4/Template.java

    r116 r121  
    1212import java.util.Iterator; 
    1313import java.util.Map; 
     14import java.util.Date; 
    1415import java.util.regex.Pattern; 
    1516import java.util.regex.Matcher; 
     
    682683                            break; 
    683684                        case Opcode.OC_CALLFUNC0: 
    684                             throw new UnknownFunctionException(code.arg); 
     685                            switch (code.argcode) 
     686                            { 
     687                                case Opcode.CF0_NOW: 
     688                                    reg[code.r1] = new Date(); 
     689                                    break; 
     690                            } 
     691                            break; 
    685692                        case Opcode.OC_CALLFUNC1: 
    686693                            switch (code.argcode) 
     
    787794                                case Opcode.CM0_ITEMS: 
    788795                                    reg[code.r1] = Utils.items(reg[code.r2]); 
     796                                    break; 
     797                                case Opcode.CM0_FORMAT: 
     798                                    reg[code.r1] = Utils.format(reg[code.r2]); 
     799                                    break; 
     800                                case Opcode.CM0_ISOFORMAT: 
     801                                    reg[code.r1] = Utils.isoformat(reg[code.r2]); 
    789802                                    break; 
    790803                            } 
  • library/src/com/livinglogic/ul4/Utils.java

    r116 r121  
    1010import java.util.Map; 
    1111import java.util.Vector; 
     12import java.util.Date; 
     13import java.text.SimpleDateFormat; 
    1214 
    1315class Range extends AbstractList  
     
    949951    } 
    950952 
     953    private static SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy.MM.dd"); 
     954    private static SimpleDateFormat timeFormatter = new SimpleDateFormat("HH:mm:ss.S"); 
     955 
     956    public static Object isoformat(Date obj) 
     957    { 
     958        return dateFormatter.format(obj) + "T" + timeFormatter.format(obj) + "000"; 
     959    } 
     960 
     961    public static Object isoformat(Object obj) 
     962    { 
     963        if (obj instanceof Date) 
     964            return isoformat((Date)obj); 
     965        throw new UnsupportedOperationException("Can't call isoformat on instance of " + obj.getClass() + "!"); 
     966    } 
     967 
     968    public static Object format(Object obj) 
     969    { 
     970        throw new UnsupportedOperationException("Can't call format on instance of " + obj.getClass() + "!"); 
     971    } 
     972 
    951973    public static Object items(Map obj) 
    952974    {