示例#1
0
        //-----------------------------------------------------------------------------------------



        public CssLength(float num, CssUnitOrNames unit)
        {
            this._number = num;
            this._flags  = (int)unit | IS_ASSIGN;
            switch (unit)
            {
            case CssUnitOrNames.Ems:
                this._flags |= IS_RELATIVE;
                break;

            case CssUnitOrNames.Pixels:
            case CssUnitOrNames.Ex:
            case CssUnitOrNames.EmptyValue:
                this._flags |= IS_RELATIVE;
                break;

            case CssUnitOrNames.Unknown:
                this._flags |= HAS_ERROR;
                return;

            default:

                break;
            }
        }
示例#2
0
        //-----------------------------------------------------------------------------------------




        public CssLength(float num, CssUnitOrNames unit)
        {
            this._number = num;
            this._flags = (int)unit | IS_ASSIGN;
            switch (unit)
            {
                case CssUnitOrNames.Pixels:
                case CssUnitOrNames.Ems:
                case CssUnitOrNames.Ex:
                case CssUnitOrNames.EmptyValue:
                    this._flags |= IS_RELATIVE;
                    break;
                case CssUnitOrNames.Unknown:
                    this._flags |= HAS_ERROR;
                    return;
                default:

                    break;
            }
        }
示例#3
0
        public static CssLength ParseGenericLength(string lenValue)
        {
            float parsedNumber = 0f;

            switch (lenValue)
            {
            case null:
            case "":
            case "0":
                //Return zero if no length specified, zero specified
                return(CssLength.ZeroNoUnit);

            case "auto":
                return(CssLength.AutoLength);

            case "normal":
                return(CssLength.NormalWordOrLine);
            }

            //then parse
            //If percentage, use ParseNumber
            if (lenValue.EndsWith("%"))
            {
                parsedNumber = float.Parse(lenValue.Substring(0, lenValue.Length - 1));
                return(new CssLength(parsedNumber, CssUnitOrNames.Percent));
            }
            //If no units, has error
            if (lenValue.Length < 3)
            {
                if (float.TryParse(lenValue, out parsedNumber))
                {
                    return(new CssLength(parsedNumber, CssUnitOrNames.Pixels));
                }
                else
                {
                    return(new CssLength(parsedNumber, CssUnitOrNames.Unknown));
                }
            }
            //Get units of the length
            //TODO: Units behave different in paper and in screen!
            CssUnitOrNames unit = GetCssUnit(lenValue.Substring(lenValue.Length - 2, 2));

            //parse number part
            if (unit == CssUnitOrNames.Unknown)
            {
                //check if all char is number?

                if (!float.TryParse(lenValue,
                                    System.Globalization.NumberStyles.Number,
                                    System.Globalization.NumberFormatInfo.InvariantInfo, out parsedNumber))
                {
                    //make an error value
                    return(new CssLength(0, CssUnitOrNames.Unknown));
                }
                else
                {
                    return(new CssLength(parsedNumber, CssUnitOrNames.Pixels));
                }
            }
            else
            {
                string number_part = lenValue.Substring(0, lenValue.Length - 2);
                if (!float.TryParse(number_part,
                                    System.Globalization.NumberStyles.Number,
                                    System.Globalization.NumberFormatInfo.InvariantInfo, out parsedNumber))
                {
                    //make an error value
                    return(new CssLength(0, CssUnitOrNames.Unknown));
                }
                else
                {
                    return(new CssLength(parsedNumber, unit));
                }
            }
        }