//----------------------------------------------------------------------------------------- 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; } }
//----------------------------------------------------------------------------------------- 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; } }
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)); } } }