public bool Import(UnityStyleSheet asset, string contents) { ParserStyleSheet styleSheet = m_Parser.Parse(contents); if (styleSheet.Errors.Count > 0) { foreach (StylesheetParseError error in styleSheet.Errors) { m_Errors.AddSyntaxError(error.ToString()); } } else { try { VisitSheet(styleSheet); } catch (Exception exc) { m_Errors.AddInternalError(exc.Message); } } if (!m_Errors.hasErrors) { m_Builder.BuildTo(asset); } return(!m_Errors.hasErrors); }
protected void VisitValue(Term term) { var primitiveTerm = term as PrimitiveTerm; var colorTerm = term as HtmlColor; var funcTerm = term as GenericFunction; var termList = term as TermList; var commaTerm = term as Comma; var wsTerm = term as Whitespace; if (term == PrimitiveTerm.Inherit) { m_Builder.AddValue(StyleValueKeyword.Inherit); } else if (primitiveTerm != null) { string rawStr = term.ToString(); switch (primitiveTerm.PrimitiveType) { case UnitType.Number: float?floatValue = primitiveTerm.GetFloatValue(UnitType.Pixel); m_Builder.AddValue(floatValue.Value); break; case UnitType.Pixel: float?pixelValue = primitiveTerm.GetFloatValue(UnitType.Pixel); m_Builder.AddValue(new Dimension(pixelValue.Value, Dimension.Unit.Pixel)); break; case UnitType.Percentage: float?percentValue = primitiveTerm.GetFloatValue(UnitType.Pixel); m_Builder.AddValue(new Dimension(percentValue.Value, Dimension.Unit.Percent)); break; case UnitType.Ident: StyleValueKeyword keyword; if (TryParseKeyword(rawStr, out keyword)) { m_Builder.AddValue(keyword); } else { m_Builder.AddValue(rawStr, StyleValueType.Enum); } break; case UnitType.String: string unquotedStr = rawStr.Trim('\'', '\"'); m_Builder.AddValue(unquotedStr, StyleValueType.String); break; case UnitType.Uri: VisitUrlFunction(primitiveTerm); break; default: m_Errors.AddSemanticError(StyleSheetImportErrorCode.UnsupportedUnit, primitiveTerm.ToString()); return; } } else if (colorTerm != null) { var color = new Color((float)colorTerm.R / 255.0f, (float)colorTerm.G / 255.0f, (float)colorTerm.B / 255.0f, (float)colorTerm.A / 255.0f); m_Builder.AddValue(color); } else if (funcTerm != null) { if (funcTerm.Name == k_ResourcePathFunctionName) { VisitResourceFunction(funcTerm); } else { if (funcTerm.Arguments.Length == 0) { m_Errors.AddSemanticError(StyleSheetImportErrorCode.MissingFunctionArgument, funcTerm.Name); return; } m_Builder.AddValue(funcTerm.Name, StyleValueType.Function); m_Builder.AddValue(funcTerm.Arguments.Count(a => !(a is Whitespace))); foreach (var arg in funcTerm.Arguments) { VisitValue(arg); } } } else if (termList != null) { foreach (Term childTerm in termList) { VisitValue(childTerm); } } else if (commaTerm != null) { m_Builder.AddValue(commaTerm.ToString(), StyleValueType.FunctionSeparator); } else if (wsTerm != null) { // skip } else { m_Errors.AddInternalError(term.GetType().Name); } }
protected void VisitValue(Term term) { var primitiveTerm = term as PrimitiveTerm; var colorTerm = term as HtmlColor; var funcTerm = term as GenericFunction; var termList = term as TermList; if (term == PrimitiveTerm.Inherit) { m_Builder.AddValue(StyleValueKeyword.Inherit); } else if (primitiveTerm != null) { string rawStr = term.ToString(); switch (primitiveTerm.PrimitiveType) { case UnitType.Pixel: case UnitType.Number: float?floatValue = primitiveTerm.GetFloatValue(UnitType.Pixel); m_Builder.AddValue(floatValue.Value); break; case UnitType.Ident: StyleValueKeyword keyword; if (TryParseKeyword(rawStr, out keyword)) { m_Builder.AddValue(keyword); } else { m_Builder.AddValue(rawStr, StyleValueType.Enum); } break; case UnitType.String: string unquotedStr = rawStr.Trim('\'', '\"'); m_Builder.AddValue(unquotedStr, StyleValueType.String); break; case UnitType.Uri: VisitUrlFunction(primitiveTerm); break; default: m_Errors.AddSemanticError(StyleSheetImportErrorCode.UnsupportedUnit, primitiveTerm.ToString()); return; } } else if (colorTerm != null) { var color = new Color((float)colorTerm.R / 255.0f, (float)colorTerm.G / 255.0f, (float)colorTerm.B / 255.0f, (float)colorTerm.A / 255.0f); m_Builder.AddValue(color); } else if (funcTerm != null) { if (funcTerm.Name == k_ResourcePathFunctionName) { VisitResourceFunction(funcTerm); } else { m_Errors.AddSemanticError(StyleSheetImportErrorCode.UnsupportedFunction, funcTerm.Name); } } else if (termList != null) { foreach (Term childTerm in termList) { VisitValue(childTerm); } } else { m_Errors.AddInternalError(term.GetType().Name); } }
internal static void VisitValue(StyleSheetImportErrors errors, StyleSheetBuilder ssb, Term term) { PrimitiveTerm primitiveTerm = term as PrimitiveTerm; HtmlColor htmlColor = term as HtmlColor; GenericFunction genericFunction = term as GenericFunction; TermList termList = term as TermList; if (term == Term.Inherit) { ssb.AddValue(StyleValueKeyword.Inherit); } else if (primitiveTerm != null) { string text = term.ToString(); UnitType primitiveType = primitiveTerm.PrimitiveType; switch (primitiveType) { case UnitType.String: { string value = text.Trim(new char[] { '\'', '"' }); ssb.AddValue(value, StyleValueType.String); goto IL_F9; } case UnitType.Uri: IL_63: if (primitiveType != UnitType.Number && primitiveType != UnitType.Pixel) { errors.AddSemanticError(StyleSheetImportErrorCode.UnsupportedUnit, primitiveTerm.ToString()); return; } ssb.AddValue(primitiveTerm.GetFloatValue(UnitType.Pixel).Value); goto IL_F9; case UnitType.Ident: { StyleValueKeyword keyword; if (StyleSheetImporterImpl.TryParseKeyword(text, out keyword)) { ssb.AddValue(keyword); } else { ssb.AddValue(text, StyleValueType.Enum); } goto IL_F9; } } goto IL_63; IL_F9 :; } else if (htmlColor != null) { Color value2 = new Color((float)htmlColor.R / 255f, (float)htmlColor.G / 255f, (float)htmlColor.B / 255f, (float)htmlColor.A / 255f); ssb.AddValue(value2); } else if (genericFunction != null) { primitiveTerm = (genericFunction.Arguments.FirstOrDefault <Term>() as PrimitiveTerm); if (genericFunction.Name == "resource" && primitiveTerm != null) { string value3 = primitiveTerm.Value as string; ssb.AddValue(value3, StyleValueType.ResourcePath); } else { errors.AddSemanticError(StyleSheetImportErrorCode.UnsupportedFunction, genericFunction.Name); } } else if (termList != null) { foreach (Term current in termList) { StyleSheetImporterImpl.VisitValue(errors, ssb, current); } } else { errors.AddInternalError(term.GetType().Name); } }