コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }