/* * This file is part of "SnipSnap Radeox Rendering Engine". * * Copyright (c) 2002 Stephan J. Schmidt, Matthias L. Jugel * All Rights Reserved. * * Please visit http://radeox.org/ for updates and contact. * * --LICENSE NOTICE-- * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * --LICENSE NOTICE-- */ package org.radeox.filter.regex; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.radeox.filter.FilterSupport; import org.radeox.filter.context.FilterContext; /* * Class that stores regular expressions, can be subclassed for special Filters * @author stephan @team sonicteam * * @version $Id: RegexFilter.java 7756 2006-04-13 12:25:49Z ian@caret.cam.ac.uk $ */ public abstract class RegexFilter extends FilterSupport { private static Log log = LogFactory.getLog(RegexFilter.class); protected List pattern = new ArrayList(); protected List substitute = new ArrayList(); public final static boolean SINGLELINE = false; public final static boolean MULTILINE = true; // TODO future use // private RegexService regexService; public RegexFilter() { super(); } /** * create a new regular expression that takes input as multiple lines */ public RegexFilter(String regex, String substitute) { this(); addRegex(regex, substitute); } /** * create a new regular expression and set */ public RegexFilter(String regex, String substitute, boolean multiline) { addRegex(regex, substitute, multiline); } public void clearRegex() { pattern.clear(); substitute.clear(); } public void addRegex(String regex, String substitute) { addRegex(regex, substitute, MULTILINE); } public void addRegex(String regex, String substitute, boolean multiline) { // compiler.compile(regex, (multiline ? Perl5Compiler.MULTILINE_MASK : // Perl5Compiler.SINGLELINE_MASK) | Perl5Compiler.READ_ONLY_MASK)); try { org.radeox.regex.Compiler compiler = org.radeox.regex.Compiler .create(); compiler.setMultiline(multiline); this.pattern.add(compiler.compile(regex)); // Pattern.DOTALL this.substitute.add(substitute); } catch (Exception e) { log.warn("bad pattern: " + regex + " -> " + substitute + " " + e); } } public abstract String filter(String input, FilterContext context); }