/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * 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. */ package net.java.sip.communicator.impl.gui.main.chat; /** * The Replacer interface defines the expectations of message content replacers. * Replacers get called with pieces of message content and can then perform * appropriate modifications to the content before writing the result. * * @author Danny van Heumen */ public interface Replacer { /** * If a replacer expects plain text strings, then html content is * automatically unescaped. The replacer is responsible for correctly * escaping normal text. * * @return returns true if it needs plain text or false if it wants html * content */ boolean expectsPlainText(); /** * Actual replace operation. The replacer is called with a piece of text * (either plain text or HTML dependening on the result of * {@link #expectsPlainText()}) and the result should be written to * <tt>target</tt>. If nothing gets written to <tt>target</tt> then that * piece of text is lost, so the replacer has full control of the * transformation of that particular piece of text. * <p> * If {@link #expectsPlainText()} returns true, then <tt>replace</tt> is * called with a piece of plain text. If <tt>expectsPlainText()</tt> returns * false, then a piece of HTML content is provided. In both cases the * replacer is expected to write HTML content into <tt>target</tt>. * </p> * <p> * <b>Note</b> that the replacer has to do <b>appropriate HTML escaping</b> * itself when necessary, because we cannot determine the nature of the * replacer's specific implementation. * </p> * * @param target the target buffer to write the result to * @param piece the piece of text that can be replaced */ void replace(StringBuilder target, String piece); }