ParseTreeNode input;
if (ContentType.JS == type) {
JsLexer lexer = new JsLexer(cp);
JsTokenQueue tq = new JsTokenQueue(lexer, is);
if (tq.isEmpty()) { return null; }
Parser p = new Parser(tq, mq);
input = p.parse();
tq.expectEmpty();
} else if (ContentType.CSS == type) {
TokenQueue<CssTokenType> tq = CssParser.makeTokenQueue(cp, mq, false);
if (tq.isEmpty()) { return null; }
CssParser p = new CssParser(tq, mq, MessageLevel.WARNING);
input = p.parseStyleSheet();
tq.expectEmpty();
} else if (ContentType.HTML == type) {
DomParser p = new DomParser(new HtmlLexer(cp), false, is, mq);
//if (p.getTokenQueue().isEmpty()) { return null; }
input = Dom.transplant(p.parseDocument());
p.getTokenQueue().expectEmpty();
} else {
throw new SomethingWidgyHappenedError("Can't classify input " + is);
}
return input;