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