package com.adobe.dp.css;
import java.io.PrintWriter;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;
public class CSSStylesheet {
Vector statements = new Vector();
Hashtable rulesBySelector = new Hashtable();
public void add(Object rule) {
if (rule instanceof SelectorRule) {
SelectorRule srule = (SelectorRule) rule;
Selector[] selectors = srule.selectors;
if (selectors.length == 1)
rulesBySelector.put(selectors[0], rule);
}
statements.add(rule);
}
public Selector getSimpleSelector(String elementName, String className) {
NamedElementSelector elementSelector = null;
if (elementName != null)
elementSelector = new NamedElementSelector(null, null, elementName);
if (className == null)
return elementSelector;
Selector selector = new ClassSelector(className);
if (elementSelector != null)
selector = new AndSelector(elementSelector, selector);
return selector;
}
public SelectorRule getRuleForSelector(Selector selector, boolean create) {
SelectorRule rule = (SelectorRule) rulesBySelector.get(selector);
if (rule == null && create) {
Selector[] selectors = { selector };
rule = new SelectorRule(selectors);
add(rule);
}
return rule;
}
public void serialize(PrintWriter out) {
Iterator list = statements.iterator();
while (list.hasNext()) {
Object stmt = list.next();
if (stmt instanceof FontFaceRule) {
((FontFaceRule) stmt).serialize(out);
out.println();
} else if (stmt instanceof BaseRule) {
((SelectorRule) stmt).serialize(out);
out.println();
} else if (stmt instanceof MediaRule) {
((MediaRule) stmt).serialize(out);
out.println();
} else if (stmt instanceof ImportRule) {
((ImportRule) stmt).serialize(out);
out.println();
} else if (stmt instanceof PageRule) {
((PageRule) stmt).serialize(out);
out.println();
}
}
}
public Iterator statements() {
return statements.iterator();
}
}