001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. The ASF licenses this file to You
004: * under the Apache License, Version 2.0 (the "License"); you may not
005: * use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License. For additional information regarding
015: * copyright in this work, please see the NOTICE file in the top level
016: * directory of this distribution.
017: */
018:
019: package org.apache.roller.ui.rendering.plugins;
020:
021: import java.io.BufferedReader;
022: import java.io.StringReader;
023: import java.util.Map;
024: import org.apache.commons.logging.Log;
025: import org.apache.commons.logging.LogFactory;
026: import org.apache.roller.RollerException;
027: import org.apache.roller.pojos.WeblogEntryData;
028: import org.apache.roller.pojos.WebsiteData;
029: import org.apache.roller.business.WeblogEntryPlugin;
030:
031: /**
032: * Simple page plugin that converts paragraphs of plain text into html paragraphs.
033: * We wrap each full paragraph in html <p> opening and closing tags, and
034: * also add <br> tags to the end of lines with breaks inside a paragraph.
035: *
036: * Example:
037: * This is one
038: * paragraph
039: *
040: * Becomes:
041: * <p>This is one<br/>
042: * paragraph</p>
043: *
044: */
045: public class ConvertLineBreaksPlugin implements WeblogEntryPlugin {
046:
047: private static Log mLogger = LogFactory
048: .getLog(ConvertLineBreaksPlugin.class);
049:
050: private static final String name = "Convert Line Breaks";
051: private static final String description = "Convert plain text paragraphs to html by adding p and br tags";
052: private static final String version = "0.1";
053:
054: public ConvertLineBreaksPlugin() {
055: mLogger.debug("Instantiating ConvertLineBreaksPlugin v"
056: + this .version);
057: }
058:
059: public String getName() {
060: return name;
061: }
062:
063: public String getDescription() {
064: return description;
065: }
066:
067: public void init(WebsiteData website) throws RollerException {
068: // we don't need to do any init.
069: mLogger.debug("initing");
070: }
071:
072: /**
073: * Transform the given plain text into html text by inserting p and br
074: * tags around paragraphs and after line breaks.
075: */
076: public String render(WeblogEntryData entry, String str) {
077:
078: if (str == null || str.trim().equals(""))
079: return "";
080:
081: mLogger.debug("Rendering string of length " + str.length());
082:
083: /* setup a buffered reader and iterate through each line
084: * inserting html as needed
085: *
086: * NOTE: we consider a paragraph to be 2 endlines with no text between them
087: */
088: StringBuffer buf = new StringBuffer();
089: try {
090: BufferedReader br = new BufferedReader(
091: new StringReader(str));
092:
093: String line = null;
094: boolean insidePara = false;
095: while ((line = br.readLine()) != null) {
096:
097: if (!insidePara && line.trim().length() > 0) {
098: // start of a new paragraph
099: buf.append("\n<p>");
100: buf.append(line);
101: insidePara = true;
102: } else if (insidePara && line.trim().length() > 0) {
103: // another line in an existing paragraph
104: buf.append("<br/>\n");
105: buf.append(line);
106: } else if (insidePara && line.trim().length() < 1) {
107: // end of a paragraph
108: buf.append("</p>\n\n");
109: insidePara = false;
110: }
111: }
112:
113: // if the text ends without an empty line then we need to
114: // terminate the last paragraph now
115: if (insidePara)
116: buf.append("</p>\n\n");
117:
118: } catch (Exception e) {
119: mLogger.warn("trouble rendering text.", e);
120: return str;
121: }
122:
123: return buf.toString();
124: }
125:
126: }
|