Пример #1
0
        /// <summary>
        /// Add style defined by given styleDefinition into given block
        /// </summary>
        /// <param name="styleDefinition">Definition of added style</param>
        /// <param name="block">Block where definition will be added</param>
        private void addStyle(Node styleDefinition, CssBlock block)
        {
            var keyNode   = styleDefinition.ChildNodes[0];
            var valueNode = styleDefinition.ChildNodes[1];

            var key   = GetTerminalText(keyNode);
            var value = GetTerminalText(valueNode);

            foreach (var variable in _variables)
            {
                value = value.Replace("$" + variable.Key, variable.Value);
            }

            block.AddDefinition(key, value);
        }
Пример #2
0
        /// <summary>
        /// Get css block representation from given node
        /// </summary>
        /// <param name="blockNode">Node representing css block</param>
        /// <returns>Created css block</returns>
        private CssBlock getBlock(Node blockNode, CssBlock parentBlock)
        {
            var specifiersNode = GetDescendant(blockNode, "specifiers");
            var specifiers     = getSpecifiers(specifiersNode);

            if (parentBlock != null)
            {
                specifiers.SetParent(parentBlock.Specifiers);
            }

            var block = new CssBlock(specifiers);

            foreach (var definitionNode in GetDescendant(blockNode, "definitions").ChildNodes)
            {
                switch (definitionNode.Name)
                {
                case "variable_def":
                    defineVariable(definitionNode);
                    break;

                case "style_def":
                    addStyle(definitionNode, block);
                    break;

                case "block_def":
                    discoverBlock(definitionNode, block);
                    break;

                case "comment_def":
                    //there is nothing to do with comments
                    break;

                default:
                    throw new NotSupportedException("Unsupported definition: " + definitionNode);
                }
            }

            return(block);
        }