package org.qrone.r7.parser; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.util.ArrayList; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.qrone.r7.Extendable; import org.qrone.r7.PortingService; import org.qrone.r7.resolver.URIResolver; import org.qrone.util.QrONEUtils; import org.qrone.util.Stream; import org.qrone.util.XDeck; import org.w3c.dom.Element; import org.w3c.dom.css.CSSRuleList; public class HTML5Deck extends XDeck<HTML5OM>{ private CSS3Deck cssdeck; private PortingService services; public HTML5Deck(URIResolver resolver){ super(resolver); cssdeck = new CSS3Deck(resolver); } public HTML5Deck(PortingService service){ super(service.getURIResolver()); this.services = service; cssdeck = new CSS3Deck(resolver); } public PortingService getPortingService(){ return services; } @Override public HTML5OM compile(URI uri, InputStream in, String encoding) throws Exception { HTML5OM xom = new HTML5OM(this, cssdeck, uri); xom.parse(resolver); return xom; } public void outputScripts(HTML5Writer b, HTML5Set set, URI file){ //--------------- // script src //--------------- for (Iterator<String> i = set.jslibs.iterator(); i.hasNext();) { String src = i.next(); b.append("<script src=\""); b.append(QrONEUtils.escape(src)); b.append("\"></script>"); } //--------------- // script inline //--------------- StringBuffer js = new StringBuffer(); js.append(set.js.toString()); if(js.length() > 0){ b.append("<script>"); b.append(js.toString()); b.append("</script>"); } } public void outputStyles(HTML5Writer b, HTML5Set set, URI file){ //--------------- // css href //--------------- for (Iterator<Element> i = set.csslibs.iterator(); i.hasNext();) { Element el = i.next(); b.append("<link rel=\"stylesheet\" type=\"text/css\" href=\""); b.append(QrONEUtils.escape(el.getAttribute("href"))); b.append("\" />"); } //--------------- // css inline //--------------- StringBuffer css = new StringBuffer(); for (Iterator<CSS3OM> j = set.css.iterator(); j.hasNext();) { css.append(j.next().getCssText()); } String css2 = CSS3Parser.compress(css.toString()); if(css2.length() > 0){ b.append("<style>"); b.append(css2); b.append("</style>"); } } public static class HTML5Set{ public StringBuffer js = new StringBuffer(); public List<CSS3OM> css = new ArrayList<CSS3OM>(); public List<String> jslibs = new ArrayList<String>(); public List<Element> csslibs = new ArrayList<Element>(); } }