public View create(Element elem) {
AttributeSet attrs = elem.getAttributes();
Object elementName =
attrs.getAttribute(AbstractDocument.ElementNameAttribute);
Object o = (elementName != null) ?
null : attrs.getAttribute(StyleConstants.NameAttribute);
if (o instanceof HTML.Tag) {
HTML.Tag kind = (HTML.Tag) o;
if (kind == HTML.Tag.CONTENT) {
return new InlineView(elem);
} else if (kind == HTML.Tag.IMPLIED) {
String ws = (String) elem.getAttributes().getAttribute(
CSS.Attribute.WHITE_SPACE);
if ((ws != null) && ws.equals("pre")) {
return new LineView(elem);
}
return new javax.swing.text.html.ParagraphView(elem);
} else if ((kind == HTML.Tag.P) ||
(kind == HTML.Tag.H1) ||
(kind == HTML.Tag.H2) ||
(kind == HTML.Tag.H3) ||
(kind == HTML.Tag.H4) ||
(kind == HTML.Tag.H5) ||
(kind == HTML.Tag.H6) ||
(kind == HTML.Tag.DT)) {
// paragraph
return new javax.swing.text.html.ParagraphView(elem);
} else if ((kind == HTML.Tag.MENU) ||
(kind == HTML.Tag.DIR) ||
(kind == HTML.Tag.UL) ||
(kind == HTML.Tag.OL)) {
return new ListView(elem);
} else if (kind == HTML.Tag.BODY) {
return new BodyBlockView(elem);
} else if (kind == HTML.Tag.HTML) {
return new BlockView(elem, View.Y_AXIS);
} else if ((kind == HTML.Tag.LI) ||
(kind == HTML.Tag.CENTER) ||
(kind == HTML.Tag.DL) ||
(kind == HTML.Tag.DD) ||
(kind == HTML.Tag.DIV) ||
(kind == HTML.Tag.BLOCKQUOTE) ||
(kind == HTML.Tag.PRE) ||
(kind == HTML.Tag.FORM)) {
// vertical box
return new BlockView(elem, View.Y_AXIS);
} else if (kind == HTML.Tag.NOFRAMES) {
return new NoFramesView(elem, View.Y_AXIS);
} else if (kind==HTML.Tag.IMG) {
return new ImageView(elem);
} else if (kind == HTML.Tag.ISINDEX) {
return new IsindexView(elem);
} else if (kind == HTML.Tag.HR) {
return new HRuleView(elem);
} else if (kind == HTML.Tag.BR) {
return new BRView(elem);
} else if (kind == HTML.Tag.TABLE) {
return new javax.swing.text.html.TableView(elem);
} else if ((kind == HTML.Tag.INPUT) ||
(kind == HTML.Tag.SELECT) ||
(kind == HTML.Tag.TEXTAREA)) {
return new FormView(elem);
} else if (kind == HTML.Tag.OBJECT) {
return new ObjectView(elem);
} else if (kind == HTML.Tag.FRAMESET) {
if (elem.getAttributes().isDefined(HTML.Attribute.ROWS)) {
return new FrameSetView(elem, View.Y_AXIS);
} else if (elem.getAttributes().isDefined(HTML.Attribute.COLS)) {
return new FrameSetView(elem, View.X_AXIS);
}
throw new RuntimeException("Can't build a" + kind + ", " + elem + ":" +
"no ROWS or COLS defined.");
} else if (kind == HTML.Tag.FRAME) {
return new FrameView(elem);
} else if (kind instanceof HTML.UnknownTag) {
return new HiddenTagView(elem);
} else if (kind == HTML.Tag.COMMENT) {
return new CommentView(elem);
} else if (kind == HTML.Tag.HEAD) {
// Make the head never visible, and never load its
// children. For Cursor positioning,
// getNextVisualPositionFrom is overriden to always return
// the end offset of the element.
return new BlockView(elem, View.X_AXIS) {
public float getPreferredSpan(int axis) {
return 0;
}
public float getMinimumSpan(int axis) {
return 0;
}
public float getMaximumSpan(int axis) {
return 0;
}
protected void loadChildren(ViewFactory f) {
}
public Shape modelToView(int pos, Shape a,
Position.Bias b) throws BadLocationException {
return a;
}
public int getNextVisualPositionFrom(int pos,
Position.Bias b, Shape a,
int direction, Position.Bias[] biasRet) {
return getElement().getEndOffset();
}
};
} else if ((kind == HTML.Tag.TITLE) ||
(kind == HTML.Tag.META) ||
(kind == HTML.Tag.LINK) ||
(kind == HTML.Tag.STYLE) ||
(kind == HTML.Tag.SCRIPT) ||
(kind == HTML.Tag.AREA) ||
(kind == HTML.Tag.MAP) ||
(kind == HTML.Tag.PARAM) ||
(kind == HTML.Tag.APPLET)) {
return new HiddenTagView(elem);
}
}
// If we get here, it's either an element we don't know about
// or something from StyledDocument that doesn't have a mapping to HTML.
String nm = (elementName != null) ? (String)elementName :
elem.getName();
if (nm != null) {
if (nm.equals(AbstractDocument.ContentElementName)) {
return new LabelView(elem);
} else if (nm.equals(AbstractDocument.ParagraphElementName)) {
return new ParagraphView(elem);
} else if (nm.equals(AbstractDocument.SectionElementName)) {
return new BoxView(elem, View.Y_AXIS);
} else if (nm.equals(StyleConstants.ComponentElementName)) {
return new ComponentView(elem);
} else if (nm.equals(StyleConstants.IconElementName)) {
return new IconView(elem);
}
}
// default to text display
return new LabelView(elem);
}
Creates a view from an element. |