Show
Ignore:
Timestamp:
04/18/08 02:25:19 (5 years ago)
Author:
gyuque
Message:

ascss: parser for number values

Location:
lang/actionscript/ascss/src/css
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/actionscript/ascss/src/css/ASCSS.asy

    r9626 r9656  
    14331433} 
    14341434 
     1435 
     1436// units for parsed value 
     1437public static const U_FUnknown:uint   = 0x0000; 
     1438public static const U_FInteger:uint   = 0x0001; 
     1439public static const U_FNumber:uint    = 0x0002;  // Real Numbers 
     1440public static const U_FPercent:uint   = 0x0004; 
     1441public static const U_FLength:uint    = 0x0008; 
     1442public static const U_FAngle:uint     = 0x0010; 
     1443public static const U_FTime:uint      = 0x0020; 
     1444public static const U_FFrequency:uint = 0x0040; 
     1445public static const U_FRelative:uint  = 0x0100; 
     1446public static const U_FNonNeg:uint    = 0x0200; 
     1447 
    14351448private function parseValue(propId:int, important:Boolean):Boolean 
    14361449{ 
     
    14491462 
    14501463        switch(propId) { 
     1464                case CSSPropertyID.CSSPropertyBottom:               // <length> | <percentage> | auto | inherit 
     1465                case CSSPropertyID.CSSPropertyLeft:                 // <length> | <percentage> | auto | inherit 
     1466                case CSSPropertyID.CSSPropertyRight:                // <length> | <percentage> | auto | inherit 
     1467                case CSSPropertyID.CSSPropertyTop:                  // <length> | <percentage> | auto | inherit 
     1468                case CSSPropertyID.CSSPropertyMarginTop:           //// <margin-width> | inherit 
     1469                case CSSPropertyID.CSSPropertyMarginRight:         //   Which is defined as 
     1470                case CSSPropertyID.CSSPropertyMarginBottom:        //   <length> | <percentage> | auto | inherit 
     1471                case CSSPropertyID.CSSPropertyMarginLeft:          //// 
     1472                case CSSPropertyID.CSSPropertyWebkitMarginStart: 
     1473                if (id == CSSValueKeywords.CSSValueAuto) 
     1474                        valid_primitive = true; 
     1475                else 
     1476                        valid_primitive = (id == 0 && validUnit(val, U_FLength|U_FPercent, mStrict)); 
     1477                break; 
     1478 
     1479 
    14511480                case CSSPropertyID.CSSPropertyBackgroundColor:     // <color> | inherit 
    14521481                case CSSPropertyID.CSSPropertyBorderTopColor:     // <color> | inherit 
     
    14821511        } 
    14831512 
    1484     if (valid_primitive) { 
    1485         if (id != 0) 
    1486             parsedValue = CSSPrimitiveValue.newId(id); 
     1513        if (valid_primitive) { 
     1514                if (id != 0) 
     1515                        parsedValue = CSSPrimitiveValue.newId(id); 
     1516                else if (val.unit >= CSSPrimitiveValue.CSS_NUMBER && val.unit <= CSSPrimitiveValue.CSS_KHZ) 
     1517                        parsedValue = CSSPrimitiveValue.newUnitNumber(val.fValue, val.unit); 
    14871518/* 
    14881519        else if (value->unit == CSSPrimitiveValue::CSS_STRING) 
    14891520            parsedValue = new CSSPrimitiveValue(value->string, (CSSPrimitiveValue::UnitTypes) value->unit); 
    1490         else if (value->unit >= CSSPrimitiveValue::CSS_NUMBER && value->unit <= CSSPrimitiveValue::CSS_KHZ) 
    1491             parsedValue = new CSSPrimitiveValue(value->fValue, (CSSPrimitiveValue::UnitTypes) value->unit); 
    14921521        else if (value->unit >= Value::Q_EMS) 
    14931522            parsedValue = new CSSQuirkPrimitiveValue(value->fValue, CSSPrimitiveValue::CSS_EMS); 
     
    15041533 
    15051534        return false; 
     1535} 
     1536 
     1537private function validUnit(aValue:ParseValue, aUnitFlags:uint, aStrict:Boolean):Boolean 
     1538{ 
     1539        if ((aUnitFlags & U_FNonNeg) != 0 && aValue.fValue < 0) 
     1540                return false; 
     1541 
     1542    var b:Boolean = false; 
     1543    switch(aValue.unit) { 
     1544    case CSSPrimitiveValue.CSS_NUMBER: 
     1545                b = (aUnitFlags & U_FNumber) != 0; 
     1546                if (!b && ((aUnitFlags & (U_FLength | U_FAngle)) != 0 && (aValue.fValue == 0 || !aStrict))) { 
     1547                        aValue.unit = ((aUnitFlags & U_FLength) !=0 ) ? CSSPrimitiveValue.CSS_PX : CSSPrimitiveValue.CSS_DEG; 
     1548                        b = true; 
     1549                } 
     1550                if (!b && (aUnitFlags & U_FInteger) != 0 && aValue.isInt) 
     1551                        b = true; 
     1552                break; 
     1553        case CSSPrimitiveValue.CSS_PERCENTAGE: 
     1554                b = (aUnitFlags & U_FPercent) != 0; 
     1555                break; 
     1556        case ParseValue.Q_EMS: 
     1557        case CSSPrimitiveValue.CSS_EMS: 
     1558        case CSSPrimitiveValue.CSS_EXS: 
     1559        case CSSPrimitiveValue.CSS_PX: 
     1560        case CSSPrimitiveValue.CSS_CM: 
     1561        case CSSPrimitiveValue.CSS_MM: 
     1562        case CSSPrimitiveValue.CSS_IN: 
     1563        case CSSPrimitiveValue.CSS_PT: 
     1564        case CSSPrimitiveValue.CSS_PC: 
     1565                b = (aUnitFlags & U_FLength) != 0; 
     1566                break; 
     1567        case CSSPrimitiveValue.CSS_MS: 
     1568        case CSSPrimitiveValue.CSS_S: 
     1569                b = (aUnitFlags & U_FTime) != 0; 
     1570                break; 
     1571        case CSSPrimitiveValue.CSS_DEG: 
     1572        case CSSPrimitiveValue.CSS_RAD: 
     1573        case CSSPrimitiveValue.CSS_GRAD: 
     1574                b = (aUnitFlags & U_FAngle) != 0; 
     1575                break; 
     1576        case CSSPrimitiveValue.CSS_HZ: 
     1577        case CSSPrimitiveValue.CSS_KHZ: 
     1578        case CSSPrimitiveValue.CSS_DIMENSION: 
     1579    default: 
     1580        break; 
     1581        } 
     1582 
     1583        return b; 
    15061584} 
    15071585 
  • lang/actionscript/ascss/src/css/CSSPrimitiveValue.as

    r9618 r9656  
    1111                public static const CSS_CM:int         = 6; 
    1212                public static const CSS_MM:int         = 7; 
     13                public static const CSS_IN:int         = 8; 
     14                public static const CSS_PT:int         = 9; 
     15                public static const CSS_PC:int         = 10; 
     16                public static const CSS_DEG:int        = 11; 
     17                public static const CSS_RAD:int        = 12; 
     18                public static const CSS_GRAD:int       = 13; 
     19                public static const CSS_MS:int         = 14; 
     20                public static const CSS_S:int          = 15; 
     21                public static const CSS_HZ:int         = 16; 
     22                public static const CSS_KHZ:int        = 17; 
     23                public static const CSS_DIMENSION:int  = 18; 
     24                public static const CSS_STRING:int     = 19; 
     25                public static const CSS_URI:int        = 20; 
    1326                public static const CSS_IDENT:int      = 21; 
    1427                public static const CSS_RGBCOLOR:int   = 25; 
     
    3043                } 
    3144 
     45                public static function newUnitNumber(n:Number, u:int):CSSPrimitiveValue 
     46                { 
     47                        var val:CSSPrimitiveValue = new CSSPrimitiveValue(); 
     48                        val.mType = u; 
     49                        val.mNumValue = n; 
     50 
     51                        return val; 
     52                } 
     53 
    3254                public override function dump():String 
    3355                { 
     
    3860                        else if (mType == CSS_IDENT) 
    3961                                ret += " IDENT " + mIdentValue; 
     62                        else if (mType == CSS_NUMBER) 
     63                                ret += " NUMBER " + mNumValue; 
    4064 
    4165                        return ret; 
     
    4569                private var mRGBColorValue:uint; 
    4670                private var mIdentValue:int; 
     71                private var mNumValue:Number; 
    4772 
    4873                public function get primitiveType():int 
    4974                { 
    5075                        return mType; 
     76                } 
     77 
     78                public function getNumberValue():Number 
     79                { 
     80                        return mNumValue; 
    5181                } 
    5282 
     
    70100                        switch(t) 
    71101                        { 
     102                        case CSS_UNKNOWN:  return "unknown"; 
    72103                        case CSS_RGBCOLOR: return "RGB"; 
    73104                        case CSS_IDENT:    return "IDENT"; 
    74                         default:           return "unknown"; 
     105                        case CSS_NUMBER:   return "NUMBER"; 
     106                        case CSS_PERCENTAGE: return "PERCENT"; 
     107                        case CSS_EMS:      return "em"; 
     108                        case CSS_EXS:      return "ex"; 
     109                        case CSS_PX:       return "px"; 
     110                        default:           return "error ("+t+")"; 
    75111                        } 
    76112                } 
  • lang/actionscript/ascss/src/css/ParseValue.as

    r9626 r9656  
    33        public class ParseValue 
    44        { 
     5                public static const Operator:uint = 0x100000; 
     6                public static const Function:uint = 0x100001; 
     7                public static const Q_EMS:uint    = 0x100002; 
     8 
    59                function ParseValue(aId:int, aUnit:int) 
    610                {