TextToHTMLRenderer.java :  » Web-Framework » RSF » uk » org » ponder » htmlutil » Java Open Source

Java Open Source » Web Framework » RSF 
RSF » uk » org » ponder » htmlutil » TextToHTMLRenderer.java
/*
 * Created on 11-Sep-2006
 */
package uk.org.ponder.htmlutil;

import java.io.BufferedReader;
import java.io.Reader;

import uk.org.ponder.streamutil.ReaderCopier;
import uk.org.ponder.streamutil.StreamCloseUtil;
import uk.org.ponder.streamutil.write.PrintOutputStream;
import uk.org.ponder.util.UniversalRuntimeException;
import uk.org.ponder.xml.XMLWriter;

/**
 * @author Antranig Basman (antranig@caret.cam.ac.uk)
 *  
 */
public class TextToHTMLRenderer implements ReaderCopier {

  /**
   * Copies text from input to output, converting newlines into XHTML
   * <br/> elements. The supplied streams WILL be closed!
   */
  public void copyReader(Reader r, PrintOutputStream pos) {
    BufferedReader br = new BufferedReader(r);
    XMLWriter xmlw = new XMLWriter(pos);
    try {
      while (true) {
        String line = br.readLine();
      
        if (line == null)
          break;
        xmlw.write(line);
// TODO: make some kind of "XMLFilterWriter" architecture if necessary        
//        writeEncodeLinks(xmlw, line);
        xmlw.writeRaw("<br/>");
      }
    }
    catch (Throwable t) {
      throw UniversalRuntimeException.accumulate(t,
          "Error rendering text as HTML");
    }
    finally {
      StreamCloseUtil.closeReader(r);
      pos.close();
    }
  }

  public static void writeEncodeLinks(XMLWriter xmlw, String line) {
    int linkpos = line.indexOf("://");
    if (linkpos == -1) {
      xmlw.write(line);
      return;
    }
    int backpos = linkpos - 1;
    for (; backpos >= 0; --backpos) {
      if (Character.isWhitespace(line.charAt(backpos))) break;
    }
    ++ backpos;
    if (backpos == linkpos - 1) { // require non-empty protocol
      xmlw.write(line);
      return;
    }
    
    int frontpos = linkpos + 3;
    for (; frontpos < line.length(); ++ frontpos) {
      if (Character.isWhitespace(line.charAt(backpos))) break;
    }
    String url = line.substring(backpos, frontpos);
    xmlw.write(line.substring(0, backpos));
    xmlw.writeRaw("<a target=\"_top\" href=\"");
    xmlw.write(url);
    xmlw.writeRaw("\">");
    xmlw.write(url);
    xmlw.writeRaw("</a>");
    xmlw.write(line.substring(frontpos));
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.