1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.rewriter.html.neko;
18
19 import org.apache.jetspeed.rewriter.Rewriter;
20 import org.apache.xerces.xni.Augmentations;
21 import org.apache.xerces.xni.QName;
22 import org.apache.xerces.xni.XMLAttributes;
23 import org.apache.xerces.xni.XMLString;
24 import org.apache.xerces.xni.XNIException;
25 import org.cyberneko.html.filters.ElementRemover;
26
27 /***
28 * <p>
29 * CallbackElementRemover
30 * </p>
31 * <p>
32 * Extended version of the NekoHTML ElementRemover which provides
33 * tag stripping/removal based on Rewriter settings.
34 * </p>
35 *
36 * @author <a href="mailto:weaver@apache.org">Scott T. Weaver </a>
37 * @version $Id: CallbackElementRemover.java 517719 2007-03-13 15:05:48Z ate $
38 *
39 */
40 public class CallbackElementRemover extends ElementRemover
41 {
42
43 private Rewriter rewriter;
44
45 /***
46 * Construct with reference to the rewriter context to consult for rewriting advice
47 */
48 public CallbackElementRemover( Rewriter rewriter )
49 {
50 super();
51
52 this.rewriter = rewriter;
53 }
54
55
56
57
58 /***
59 * <p>
60 * comment
61 * </p>
62 *
63 * @see org.apache.xerces.xni.XMLDocumentHandler#comment(org.apache.xerces.xni.XMLString text, org.apache.xerces.xni.Augmentations augs)
64 * @param text
65 * @param augs
66 * @throws org.apache.xerces.xni.XNIException
67 */
68 public void comment(XMLString text,Augmentations augs) throws XNIException
69 {
70 if (rewriter.shouldRemoveComments())
71 return;
72 super.comment(text,augs);
73 }
74
75 /***
76 * <p>
77 * emptyElement
78 * </p>
79 *
80 * @see org.apache.xerces.xni.XMLDocumentHandler#emptyElement(org.apache.xerces.xni.QName,
81 * org.apache.xerces.xni.XMLAttributes,
82 * org.apache.xerces.xni.Augmentations)
83 * @param element
84 * @param arg1
85 * @param arg2
86 * @throws org.apache.xerces.xni.XNIException
87 */
88 public void emptyElement( QName element, XMLAttributes attrs, Augmentations arg2 ) throws XNIException
89 {
90 processTag(element,attrs) ;
91 super.emptyElement(element, attrs, arg2);
92 }
93
94 /***
95 * <p>
96 * startElement
97 * </p>
98 *
99 * @see org.apache.xerces.xni.XMLDocumentHandler#startElement(org.apache.xerces.xni.QName,
100 * org.apache.xerces.xni.XMLAttributes,
101 * org.apache.xerces.xni.Augmentations)
102 * @param element
103 * @param arg1
104 * @param arg2
105 * @throws org.apache.xerces.xni.XNIException
106 */
107 public void startElement( QName element, XMLAttributes attrs, Augmentations arg2 ) throws XNIException
108 {
109 processTag(element,attrs);
110 super.startElement(element, attrs, arg2);
111 }
112
113
114
115
116 /***
117 * <p>
118 * processTag
119 * </p>
120 *
121 * @param tag
122 */
123 protected void processTag(QName element, XMLAttributes attrs)
124 {
125 String tag = element.rawname.toLowerCase();
126 if (fRemovedElements.contains(tag))
127 {
128
129 return ;
130 }
131 else if (rewriter.shouldStripTag(tag))
132 {
133
134
135 removeElement(tag);
136 return ;
137 }
138 else if (rewriter.shouldRemoveTag(tag))
139 {
140
141
142
143
144 return ;
145 }
146
147
148
149 rewriter.enterConvertTagEvent(tag,new XMLAttributesWrapper(attrs));
150 acceptElement(tag,getAttributeNames(attrs));
151 }
152 protected String[] getAttributeNames(XMLAttributes attrs)
153 {
154 int length = attrs != null ? attrs.getLength() : 0 ;
155 String[] names = length > 0 ? new String[ length ] : null ;
156
157 for( int i = 0, limit = length;i<limit;i++)
158 {
159 names[i] = attrs.getQName(i) ;
160 }
161 return names ;
162 }
163 }