Changeset 141:ec50117de6af in livinglogic.java.ul4

Show
Ignore:
Timestamp:
07/09/08 19:10:39 (11 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Implement repr() function. Fix some StringUtils? calls. Have isoformat() always return a string.

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

Legend:

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

    r136 r141  
    1414    public static void main(String[] args) 
    1515    { 
    16         Template tmpl = Compiler.compile("<?for i in [1,2,3,4]?><?for j in [1,2,3,4]?><?print j?>, <?if j>=i?><?break?><?end if?><?end for?><?if i>=3?><?break?><?end if?>\n<?end for?>"); 
     16        Template tmpl = Compiler.compile("<?for o in [None, True, False, 42, 4.2, 'fo\\'\"\\r\\n', now(), [0, 1, None], {1: 'eins', 2: 'zwei', 3: 'drei'}]?><?print repr(o)?>\n<?end for?>"); 
    1717        long start = new Date().getTime(); 
    1818        String output = tmpl.renders(); 
  • library/src/com/livinglogic/ul4/Opcode.java

    r139 r141  
    6969    public static final int CF1_XMLESCAPE = 0; 
    7070    public static final int CF1_STR = 1; 
    71     public static final int CF1_INT = 2; 
    72     public static final int CF1_BOOL = 3; 
    73     public static final int CF1_LEN = 4; 
    74     public static final int CF1_ENUMERATE = 5; 
    75     public static final int CF1_ISNONE = 6; 
    76     public static final int CF1_ISSTR = 7; 
    77     public static final int CF1_ISINT = 8; 
    78     public static final int CF1_ISFLOAT = 9; 
    79     public static final int CF1_ISBOOL = 10; 
    80     public static final int CF1_ISDATE = 11; 
    81     public static final int CF1_ISLIST = 12; 
    82     public static final int CF1_ISDICT = 13; 
    83     public static final int CF1_CHR = 14; 
    84     public static final int CF1_ORD = 15; 
    85     public static final int CF1_HEX = 16; 
    86     public static final int CF1_OCT = 17; 
    87     public static final int CF1_BIN = 18; 
    88     public static final int CF1_SORTED = 19; 
    89     public static final int CF1_RANGE = 20; 
     71    public static final int CF1_REPR = 2; 
     72    public static final int CF1_INT = 3; 
     73    public static final int CF1_BOOL = 4; 
     74    public static final int CF1_LEN = 5; 
     75    public static final int CF1_ENUMERATE = 6; 
     76    public static final int CF1_ISNONE = 7; 
     77    public static final int CF1_ISSTR = 8; 
     78    public static final int CF1_ISINT = 9; 
     79    public static final int CF1_ISFLOAT = 10; 
     80    public static final int CF1_ISBOOL = 11; 
     81    public static final int CF1_ISDATE = 12; 
     82    public static final int CF1_ISLIST = 13; 
     83    public static final int CF1_ISDICT = 14; 
     84    public static final int CF1_CHR = 15; 
     85    public static final int CF1_ORD = 16; 
     86    public static final int CF1_HEX = 17; 
     87    public static final int CF1_OCT = 18; 
     88    public static final int CF1_BIN = 19; 
     89    public static final int CF1_SORTED = 20; 
     90    public static final int CF1_RANGE = 21; 
    9091 
    9192    public static final int CF2_RANGE = 0; 
     
    267268        else if (name.equals("str")) 
    268269            return CF1_STR; 
     270        else if (name.equals("repr")) 
     271            return CF1_REPR; 
    269272        else if (name.equals("int")) 
    270273            return CF1_INT; 
  • library/src/com/livinglogic/ul4/Template.java

    r139 r141  
    11071107                                    reg[code.r1] = ObjectUtils.toString(reg[code.r2]); 
    11081108                                    break; 
     1109                                case Opcode.CF1_REPR: 
     1110                                    reg[code.r1] = Utils.repr(reg[code.r2]); 
     1111                                    break; 
    11091112                                case Opcode.CF1_INT: 
    11101113                                    reg[code.r1] = Utils.toInteger(reg[code.r2]); 
  • library/src/com/livinglogic/ul4/Utils.java

    r140 r141  
    1414import java.text.SimpleDateFormat; 
    1515import org.apache.commons.lang.StringUtils; 
     16import org.apache.commons.lang.StringEscapeUtils; 
    1617 
    1718class Range extends AbstractList 
     
    600601    } 
    601602 
     603    public static String repr(Object obj) 
     604    { 
     605        if (obj == null) 
     606            return "None"; 
     607        else if (obj instanceof Boolean) 
     608            return ((Boolean)obj).booleanValue() ? "True" : "False"; 
     609        else if (obj instanceof Integer) 
     610            return String.valueOf(((Integer)obj).intValue()); 
     611        else if (obj instanceof Double) 
     612            return String.valueOf(((Double)obj).doubleValue()); 
     613        else if (obj instanceof String) 
     614            return new StringBuffer() 
     615                .append("\"") 
     616                .append(StringEscapeUtils.escapeJava(((String)obj))) 
     617                .append("\"") 
     618                .toString(); 
     619        else if (obj instanceof Date) 
     620            return isoformat((Date)obj); 
     621        else if (obj instanceof Collection) 
     622        { 
     623            StringBuffer sb = new StringBuffer(); 
     624            sb.append("["); 
     625            boolean first = true; 
     626            for (Iterator iter = ((Collection)obj).iterator(); iter.hasNext();) 
     627            { 
     628                if (first) 
     629                    first = false; 
     630                else 
     631                    sb.append(", "); 
     632                sb.append(repr(iter.next())); 
     633            } 
     634            sb.append("]"); 
     635            return sb.toString(); 
     636        } 
     637        else if (obj instanceof Map) 
     638        { 
     639            StringBuffer sb = new StringBuffer(); 
     640            sb.append("{"); 
     641            boolean first = true; 
     642            for (Iterator iter = ((Map)obj).entrySet().iterator(); iter.hasNext();) 
     643            { 
     644                if (first) 
     645                    first = false; 
     646                else 
     647                    sb.append(", "); 
     648                Map.Entry entry = (Map.Entry)iter.next(); 
     649                sb.append(repr(entry.getKey())); 
     650                sb.append(": "); 
     651                sb.append(repr(entry.getValue())); 
     652            } 
     653            sb.append("}"); 
     654            return sb.toString(); 
     655        } 
     656        return null; 
     657    } 
     658     
    602659    public static Object length(String obj) 
    603660    { 
     
    842899    { 
    843900        if (obj instanceof String) 
    844             return StringUtils.split(obj); 
     901            return StringUtils.split((String)obj); 
    845902        throw new UnsupportedOperationException("Can't split instance of " + obj.getClass() + "!"); 
    846903    } 
     
    863920    { 
    864921        if (obj instanceof String) 
    865         return StringUtils.stripStart((String)obj); 
     922            return StringUtils.stripStart((String)obj, null); 
    866923        throw new UnsupportedOperationException("Can't lstrip instance of " + obj.getClass() + "!"); 
    867924    } 
     
    870927    { 
    871928        if (obj instanceof String) 
    872         return StringUtils.stripEnd((StringU)obj); 
     929            return StringUtils.stripEnd((String)obj, null); 
    873930        throw new UnsupportedOperationException("Can't rstrip instance of " + obj.getClass() + "!"); 
    874931    } 
     
    900957    public static SimpleDateFormat isoDateFormatter = new SimpleDateFormat("yyyy.MM.dd'T'HH:mm:ss.SSS'000'"); 
    901958 
    902     public static Object isoformat(Date obj) 
     959    public static String isoformat(Date obj) 
    903960    { 
    904961        return isoDateFormatter.format(obj); 
    905962    } 
    906963 
    907     public static Object isoformat(Object obj) 
     964    public static String isoformat(Object obj) 
    908965    { 
    909966        if (obj instanceof Date)