void ExpandSelector(List<CssRuleSetGroup> relatedRuleSets, WebDom.CssElementSelector selector)
{
//recursive
//create active element set
if (selector.IsSimpleSelector)
{
WebDom.CssSimpleElementSelector simpleSelector = (WebDom.CssSimpleElementSelector)selector;
switch (simpleSelector.selectorType)
{
default:
{
throw new NotSupportedException();
}
case WebDom.SimpleElementSelectorKind.ClassName:
{
//any element with specific class name
relatedRuleSets.Add(
GetGroupOrCreateIfNotExists(
rulesForClassName,
simpleSelector));
}
break;
case WebDom.SimpleElementSelectorKind.Extend:
{
}
break;
case WebDom.SimpleElementSelectorKind.Id:
{
//element with id
relatedRuleSets.Add(
GetGroupOrCreateIfNotExists(
rulesForElementId,
simpleSelector));
}
break;
case WebDom.SimpleElementSelectorKind.PseudoClass:
{
relatedRuleSets.Add(
GetGroupOrCreateIfNotExists(
rulesForPsedoClass,
simpleSelector));
}
break;
case WebDom.SimpleElementSelectorKind.TagName:
{
relatedRuleSets.Add(
GetGroupOrCreateIfNotExists(
rulesForTagName,
simpleSelector));
}
break;
case WebDom.SimpleElementSelectorKind.All:
{
relatedRuleSets.Add(
GetGroupOrCreateIfNotExists(
rulesForAll,
simpleSelector));
}
break;
}
}
else
{
WebDom.CssCompundElementSelector combiSelector = (WebDom.CssCompundElementSelector)selector;
switch (combiSelector.OperatorName)
{
case WebDom.CssCombinatorOperator.List:
{
ExpandSelector(relatedRuleSets, combiSelector.LeftSelector);
ExpandSelector(relatedRuleSets, combiSelector.RightSelector);
}
break;
case WebDom.CssCombinatorOperator.Descendant:
{
//focus on right side?
ExpandSelector(relatedRuleSets, combiSelector.RightSelector);
}
break;
default:
{
throw new NotSupportedException();
}
}
}
//-----------------------------------------------------------------------------
}