01: /*
02: * Created on Feb 9, 2005
03: *
04: */
05: package com.sun.portal.wireless.htmlconversion;
06:
07: import java.util.HashMap;
08:
09: import org.w3c.dom.Element;
10:
11: /**
12: * Tag processors handle HTML tags, and manipulate the output AML DOM tree to add
13: * in corresponding AML content. Implementations are required to be threadsafe.
14: * All implementations must be registered in the constructor of the
15: * TagProcessorRegistry class.
16: *
17: * @author ashwin.mathew@sun.com
18: */
19: public interface TagProcessor {
20:
21: /**
22: * The name of the AmlTag that an implementation outputs.
23: *
24: * @return
25: */
26: public String getAmlTag();
27:
28: /**
29: * Returns the list of tags that can be handled by an implementation.
30: *
31: * @return
32: */
33: public String[] getSupportedTags();
34:
35: /**
36: * Invoked when an open tag is encountered.
37: *
38: * @param tagName The tag name
39: * @param attributes The tag attributes
40: * @param state The parser state object
41: * @return The new output Element created based on this tag
42: */
43: public Element startTag(String tagName, HashMap attributes,
44: ParserState state);
45:
46: /**
47: * Invoked on a parent TagProcessor implementation when a child is encountered.
48: * This is required in particular for text elements, since AML, unlike HTML, does
49: * not support inline text with formatting elements around it - instead,
50: * individual AmlText elements need to be created corresponding to every change
51: * in formatting.
52: *
53: * For example, in a free text string where a <b> tag is encountered, a new
54: * AmlText element with the bold attribute set true will have to be created
55: * for the following text, while the preceding text will have to be closed
56: * up in it's own AmlText element.
57: *
58: * Behaviour is similar to endTag when
59: * handling text. Non-text tags may not care about this method.
60: * @param state The parser state object
61: *
62: * @return
63: */
64: public Element interruptedTag(ParserState state);
65:
66: /**
67: * Invoked on a tag processor implementation when an end tag is encountered.
68: *
69: * @param tag The name of the tag
70: * @param state The parser state object
71: * @return
72: */
73: public Element endTag(String tag, ParserState state);
74:
75: /**
76: * Indicates whether or not a given tag can have children.
77: * This will decide whether or not it's pushed to the output
78: * tag context on ParserState.
79: * @param state
80: *
81: * @return true if the tag can have children, false otherwise.
82: */
83: public boolean canHaveChildren(ParserState state);
84:
85: /**
86: * Indicates whether or not the element created by an implementation
87: * should be maintained as part of the output tag state on the
88: * ParserState object.
89: * @param state
90: *
91: * @return true if it should be maintained on ParserState, false otherwise
92: */
93: public boolean isMaintainOnState(ParserState state);
94:
95: }
|