001 // Copyright 2004, 2005 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry.html;
016
017 import org.apache.tapestry.IMarkupWriter;
018
019 /**
020 * Defines a number of ways to format multi-line text for proper renderring.
021 *
022 * @author Howard Lewis Ship
023 */
024
025 public abstract class InsertTextMode
026 {
027 /**
028 * Mode where each line (after the first) is preceded by a <br> tag.
029 */
030
031 public static final InsertTextMode BREAK = new BreakMode();
032
033 /**
034 * Mode where each line is wrapped with a <p> element.
035 */
036
037 public static final InsertTextMode PARAGRAPH = new ParagraphMode();
038
039 private final String _name;
040
041 protected InsertTextMode(String name)
042 {
043 _name = name;
044 }
045
046 public String toString()
047 {
048 return "InsertTextMode[" + _name + "]";
049 }
050
051 /**
052 * Invoked by the {@link InsertText} component to write the next line.
053 *
054 * @param lineNumber
055 * the line number of the line, starting with 0 for the first line.
056 * @param line
057 * the String for the current line.
058 * @param writer
059 * the {@link IMarkupWriter} to send output to.
060 * @param raw
061 * if true, then the output should be unfiltered
062 */
063
064 public abstract void writeLine(int lineNumber, String line, IMarkupWriter writer, boolean raw);
065
066 private static class BreakMode extends InsertTextMode
067 {
068 private BreakMode()
069 {
070 super("BREAK");
071 }
072
073 public void writeLine(int lineNumber, String line, IMarkupWriter writer, boolean raw)
074 {
075 if (lineNumber > 0)
076 writer.beginEmpty("br");
077
078 writer.print(line, raw);
079 }
080 }
081
082 private static class ParagraphMode extends InsertTextMode
083 {
084 private ParagraphMode()
085 {
086 super("PARAGRAPH");
087 }
088
089 public void writeLine(int lineNumber, String line, IMarkupWriter writer, boolean raw)
090 {
091 writer.begin("p");
092
093 writer.print(line, raw);
094
095 writer.end();
096 }
097 }
098
099 }