Changeset 180:f5e5ff1fb496 in livinglogic.java.ul4

Show
Ignore:
Timestamp:
12/26/08 20:22:11 (11 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Add support for color constants.

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

Legend:

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

    r179 r180  
    232232    } 
    233233 
     234    public String repr() 
     235    { 
     236        StringBuffer buffer = new StringBuffer(9); 
     237 
     238        buffer.append("#"); 
     239        if (((r>>4) == (r&0xf)) && ((g>>4) == (g&0xf)) && ((b>>4) == (b&0xf)) && ((a>>4) == (a&0xf))) 
     240        { 
     241            buffer.append(Integer.toHexString(r>>4)); 
     242            buffer.append(Integer.toHexString(g>>4)); 
     243            buffer.append(Integer.toHexString(b>>4)); 
     244            if (a != 255) 
     245                buffer.append(Integer.toHexString(a>>4)); 
     246        } 
     247        else 
     248        { 
     249            String sr = Integer.toHexString(r); 
     250            if (sr.length() < 2) 
     251                buffer.append("0"); 
     252            buffer.append(sr); 
     253 
     254            String sg = Integer.toHexString(g); 
     255            if (sg.length() < 2) 
     256                buffer.append("0"); 
     257            buffer.append(sg); 
     258 
     259            String sb = Integer.toHexString(b); 
     260            if (sb.length() < 2) 
     261                buffer.append("0"); 
     262            buffer.append(sb); 
     263 
     264            if (a != 255) 
     265            { 
     266                String sa = Integer.toHexString(a); 
     267                if (sa.length() < 2) 
     268                    buffer.append("0"); 
     269                buffer.append(sa); 
     270            } 
     271        } 
     272        return buffer.toString(); 
     273    } 
     274 
     275    public String dump() 
     276    { 
     277        StringBuffer buffer = new StringBuffer(8); 
     278 
     279        String sr = Integer.toHexString(r); 
     280        if (sr.length() < 2) 
     281            buffer.append("0"); 
     282        buffer.append(sr); 
     283 
     284        String sg = Integer.toHexString(g); 
     285        if (sg.length() < 2) 
     286            buffer.append("0"); 
     287        buffer.append(sg); 
     288 
     289        String sb = Integer.toHexString(b); 
     290        if (sb.length() < 2) 
     291            buffer.append("0"); 
     292        buffer.append(sb); 
     293 
     294        String sa = Integer.toHexString(a); 
     295        if (sa.length() < 2) 
     296            buffer.append("0"); 
     297        buffer.append(sa); 
     298 
     299        return buffer.toString(); 
     300    } 
     301 
     302    public static Color fromdump(String value) 
     303    { 
     304        int r = Integer.valueOf(value.substring(0, 2), 16); 
     305        int g = Integer.valueOf(value.substring(2, 4), 16); 
     306        int b = Integer.valueOf(value.substring(4, 6), 16); 
     307        int a = Integer.valueOf(value.substring(6, 8), 16); 
     308        return new Color(r, g, b, a); 
     309    } 
     310 
    234311    public Color blend(Color color) 
    235312    { 
  • library/src/com/livinglogic/ul4/LoadColor.java

    r179 r180  
    2020        int r = registers.alloc(); 
    2121         
    22         String sr = Integer.toHexString(value.getR()); 
    23         if (sr.length() < 2) 
    24             sr = "0" + sr; 
    25  
    26         String sg = Integer.toHexString(value.getG()); 
    27         if (sg.length() < 2) 
    28             sg = "0" + sg; 
    29  
    30         String sb = Integer.toHexString(value.getB()); 
    31         if (sb.length() < 2) 
    32             sb = "0" + sb; 
    33  
    34         template.opcode(Opcode.OC_LOADCOLOR, r, sr + sg + sb, location); 
     22        template.opcode(Opcode.OC_LOADCOLOR, r, value.dump(), location); 
    3523        return r; 
    3624    } 
  • library/src/com/livinglogic/ul4/Main.java

    r179 r180  
    1111        Color c = new Color(0x00, 0x63, 0xa8, 0x33); 
    1212        Color b = new Color(0x00, 0x00, 0x00, 0xff); 
    13         Template tmpl = Compiler.compile("<?for c in rgb(-1,2,0.5, 1)?><?print hex(c)?>,<?end for?>"); 
     13        Template tmpl = Compiler.compile("<?for c in #fc96?><?print hex(c)?>,<?end for?>"); 
    1414        System.out.println(tmpl); 
    1515        long start = System.currentTimeMillis(); 
  • library/src/com/livinglogic/ul4/Opcode.java

    r179 r180  
    682682            case OC_LOADDATE: 
    683683                return "r" + r1 + " = " + Utils.repr(arg); 
     684            case OC_LOADCOLOR: 
     685                return "r" + r1 + " = " + Color.fromdump(arg).repr(); 
    684686            case OC_BUILDLIST: 
    685687                return "r" + r1 + " = []"; 
  • library/src/com/livinglogic/ul4/Template.java

    r179 r180  
    3030    private static Pattern intPattern; 
    3131    private static Pattern datePattern; 
     32    private static Pattern color3Pattern; 
     33    private static Pattern color4Pattern; 
     34    private static Pattern color6Pattern; 
     35    private static Pattern color8Pattern; 
    3236    private static Pattern whitespacePattern; 
    3337    private static Pattern escaped8BitCharPattern; 
     
    4751        intPattern = Pattern.compile("\\d+"); 
    4852        datePattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}T(\\d{2}:\\d{2}(:\\d{2}(.\\d{6})?)?)?"); 
     53        color3Pattern = Pattern.compile("[#][0-9a-zA-Z]{3}"); 
     54        color4Pattern = Pattern.compile("[#][0-9a-zA-Z]{4}"); 
     55        color6Pattern = Pattern.compile("[#][0-9a-zA-Z]{6}"); 
     56        color8Pattern = Pattern.compile("[#][0-9a-zA-Z]{8}"); 
    4957        whitespacePattern = Pattern.compile("\\s+"); 
    5058        escaped8BitCharPattern = Pattern.compile("\\\\x[0-9a-fA-F]{2}"); 
     
    912920                            reg[code.r1] = Utils.isoDateFormatter.parse(code.arg); 
    913921                            break; 
     922                        case Opcode.OC_LOADCOLOR: 
     923                            reg[code.r1] = Color.fromdump(code.arg); 
     924                            break; 
    914925                        case Opcode.OC_BUILDLIST: 
    915926                            reg[code.r1] = new ArrayList(); 
     
    14081419                Matcher intMatcher = intPattern.matcher(source); 
    14091420                Matcher dateMatcher = datePattern.matcher(source); 
     1421                Matcher color3Matcher = color3Pattern.matcher(source); 
     1422                Matcher color4Matcher = color4Pattern.matcher(source); 
     1423                Matcher color6Matcher = color6Pattern.matcher(source); 
     1424                Matcher color8Matcher = color8Pattern.matcher(source); 
    14101425                Matcher whitespaceMatcher = whitespacePattern.matcher(source); 
    14111426                Matcher escaped8BitCharMatcher = escaped8BitCharPattern.matcher(source); 
     
    14381453                    len = dateMatcher.end(); 
    14391454                    tokens.add(new LoadDate(pos, pos+len, Utils.isoDateFormatter.parse(dateMatcher.group()))); 
     1455                } 
     1456                else if (stringMode==0 && color8Matcher.lookingAt()) 
     1457                { 
     1458                    len = color8Matcher.end(); 
     1459                    String value = color8Matcher.group(); 
     1460                    int r = Integer.valueOf(value.substring(1, 3), 16); 
     1461                    int g = Integer.valueOf(value.substring(3, 5), 16); 
     1462                    int b = Integer.valueOf(value.substring(5, 7), 16); 
     1463                    int a = Integer.valueOf(value.substring(7, 9), 16); 
     1464                    tokens.add(new LoadColor(pos, pos+len, new Color(r, g, b, a))); 
     1465                } 
     1466                else if (stringMode==0 && color6Matcher.lookingAt()) 
     1467                { 
     1468                    len = color6Matcher.end(); 
     1469                    String value = color6Matcher.group(); 
     1470                    int r = Integer.valueOf(value.substring(1, 3), 16); 
     1471                    int g = Integer.valueOf(value.substring(3, 5), 16); 
     1472                    int b = Integer.valueOf(value.substring(5, 7), 16); 
     1473                    tokens.add(new LoadColor(pos, pos+len, new Color(r, g, b))); 
     1474                } 
     1475                else if (stringMode==0 && color4Matcher.lookingAt()) 
     1476                { 
     1477                    len = color4Matcher.end(); 
     1478                    String value = color4Matcher.group(); 
     1479                    int r = 17*Integer.valueOf(value.substring(1, 2), 16); 
     1480                    int g = 17*Integer.valueOf(value.substring(2, 3), 16); 
     1481                    int b = 17*Integer.valueOf(value.substring(3, 4), 16); 
     1482                    int a = 17*Integer.valueOf(value.substring(4, 5), 16); 
     1483                    tokens.add(new LoadColor(pos, pos+len, new Color(r, g, b, a))); 
     1484                } 
     1485                else if (stringMode==0 && color3Matcher.lookingAt()) 
     1486                { 
     1487                    len = color3Matcher.end(); 
     1488                    String value = color3Matcher.group(); 
     1489                    int r = 17*Integer.valueOf(value.substring(1, 2), 16); 
     1490                    int g = 17*Integer.valueOf(value.substring(2, 3), 16); 
     1491                    int b = 17*Integer.valueOf(value.substring(3, 4), 16); 
     1492                    tokens.add(new LoadColor(pos, pos+len, new Color(r, g, b))); 
    14401493                } 
    14411494                else if (stringMode==0 && floatMatcher.lookingAt()) 
  • library/src/com/livinglogic/ul4/Utils.java

    r179 r180  
    705705        else if (obj instanceof Date) 
    706706            return isoformat((Date)obj); 
     707        else if (obj instanceof Color) 
     708            return ((Color)obj).repr(); 
    707709        else if (obj instanceof Collection) 
    708710        { 
  • library/src/com/livinglogic/ul4/ul4c.py

    r179 r180  
    175175        'expr11 ::= float', 
    176176        'expr11 ::= date', 
     177        'expr11 ::= color', 
    177178        'expr11 ::= name', 
    178179    ]