1 31 32 package org.opencms.workplace.tools.content; 33 34 import org.opencms.util.CmsHtmlParser; 35 import org.opencms.util.CmsHtmlTagRemoveFactory; 36 import org.opencms.util.CmsStringUtil; 37 import org.opencms.util.I_CmsHtmlNodeVisitor; 38 39 import java.util.Iterator ; 40 41 import org.htmlparser.NodeFactory; 42 import org.htmlparser.Parser; 43 import org.htmlparser.Tag; 44 import org.htmlparser.lexer.Lexer; 45 import org.htmlparser.lexer.Page; 46 import org.htmlparser.util.ParserException; 47 48 65 public final class CmsTagReplaceParser extends CmsHtmlParser implements I_CmsHtmlNodeVisitor { 66 67 68 private final NodeFactory m_nodeFactory; 69 70 74 private boolean m_changedContent; 75 78 private final CmsTagReplaceSettings m_settings; 79 80 86 public CmsTagReplaceParser(CmsTagReplaceSettings settings) { 87 88 super(true); 90 m_settings = settings; 91 CmsHtmlTagRemoveFactory nodeFactory = new CmsHtmlTagRemoveFactory(); 92 Iterator itDeleteTags = m_settings.getDeleteTags().iterator(); 94 while (itDeleteTags.hasNext()) { 95 nodeFactory.addTagRemoval((Tag)itDeleteTags.next()); 96 } 97 m_nodeFactory = nodeFactory; 98 99 } 100 101 107 public String getTagHtml(Tag tag) { 108 109 if (CmsStringUtil.isEmpty(tag.getTagName())) { 110 return ""; 111 } 112 StringBuffer result = new StringBuffer (32); 113 result.append('<'); 114 Iterator itAttributes = tag.getAttributesEx().iterator(); 116 while (itAttributes.hasNext()) { 117 result.append(itAttributes.next().toString()); 118 if (itAttributes.hasNext()) { 121 result.append(' '); 122 } 123 } 124 result.append('>'); 125 return result.toString(); 126 } 127 128 147 public String process(String html, String encoding) throws ParserException { 148 149 m_result = new StringBuffer (); 151 m_changedContent = false; 152 153 Parser parser = new Parser(); 155 parser.setNodeFactory(m_nodeFactory); 156 Lexer lexer = new Lexer(); 157 Page page = new Page(html, encoding); 158 lexer.setPage(page); 159 parser.setLexer(lexer); 160 parser.visitAllNodesWith(this); 162 return getResult(); 164 } 165 166 169 public void visitEndTag(Tag tag) { 170 171 boolean change = m_settings.replace(tag); 172 if (change) { 173 m_changedContent = true; 174 } 175 super.visitEndTag(tag); 176 } 177 178 181 public void visitTag(Tag tag) { 182 183 boolean change = m_settings.replace(tag); 184 if (change) { 185 m_changedContent = true; 186 } 187 super.visitTag(tag); 188 } 189 190 196 public boolean isChangedContent() { 197 198 return m_changedContent; 199 } 200 201 } 202 | Popular Tags |