/*
------------------------------------
JavaOnTracks Thibaut Colar
tcolar-jot AT colar DOT net
Artistic Licence 2.0
http://www.javaontracks.net
------------------------------------
*/
package net.jot.utils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.jot.logger.JOTLogger;
import net.jot.web.view.JOTViewParser;
/**
* Utilities for HTML processing
* @author thibautc
*/
public class JOTHTMLUtilities {
public static final int ENCODE_HTML_CHARS = 1;
public static final int ENCODE_LINE_BREAKS=2;
public static final int ENCODE_SYMBOLS=4;
public static final int ENCODE_CURLEYS=8;
public static final int ENCODE_ALL=16383;
private static final int PATTERN_FLAGS_MULTI=Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE | Pattern.CANON_EQ;
private static final Pattern PATTERN_LINE_BREAKS=Pattern.compile("\n",PATTERN_FLAGS_MULTI);
/**
* Encode a text into HTML, ie: process & > < lineBreaks symbols etc...
* This methods converts everyhting it can.
* @param text
* @return
*/
public static String textToHtml(String text)
{
//do curleys before chars
return textToHtml(text, ENCODE_ALL);
}
/**
* Encode a text into HTML, converting only what requested using the flags.
* falgs example: ENCODE_LINE_BREAKS | ENCODE_CURLEYS
* @param text
* @param flags
* @return
*/
public static String textToHtml(String text, int flags)
{
JOTLogger.log(JOTLogger.DEBUG_LEVEL, JOTHTMLUtilities.class, "Replacing chars for.");
if((flags & ENCODE_HTML_CHARS)>0)
{
text=text.replaceAll("&", "&");
text=text.replaceAll("<", "<");
text=text.replaceAll(">", ">");
}
/*if((flags & ENCODE_CURLEYS)>0)
{
text=doCurleys(text);
}
else
{
text=doStraight(text);
}*/
if((flags & ENCODE_SYMBOLS)>0)
{
text=doSymbols(text);
}
if((flags & ENCODE_LINE_BREAKS)>0)
{
text=doLineBreaks(text);
}
return text;
}
private static String doLineBreaks(String page)
{
// REPLACE CARRIAGE RETURNS BY <BR>
Matcher m=PATTERN_LINE_BREAKS.matcher(page);
StringBuffer buf=new StringBuffer();
while(m.find())
{
JOTViewParser.safeAppendReplacement(m,buf,"<br/>\n");
}
m.appendTail(buf);
page=buf.toString();
return page;
}
public static String doSymbols(String s)
{
//sepcial symbols
s=s.replaceAll("\\(c\\)", "©");
s=s.replaceAll("\\(tm\\)", "™");
s=s.replaceAll("\\(r\\)", "®");
// real symbols
s=s.replaceAll("�", "©");
s=s.replaceAll("�", "™");
s=s.replaceAll("�", "®");
// currencies
s=s.replaceAll("�", "¥");
s=s.replaceAll("�", "€");
s=s.replaceAll("�", "£");
s=s.replaceAll("�", "¢");
s=s.replaceAll("�", "¤");
// punctuations,quotes etc ..
s=s.replaceAll("�", "“");
s=s.replaceAll("�", "”");
s=s.replaceAll("�", "‚");
s=s.replaceAll("�", "’");
s=s.replaceAll("�", "¡");
s=s.replaceAll("�", "„");
s=s.replaceAll("�", "&brkbar;");
s=s.replaceAll("�", "ª");
s=s.replaceAll("�", "«");
s=s.replaceAll("�", "»");
s=s.replaceAll("�", "‹");
s=s.replaceAll("�", "›");
s=s.replaceAll("�", "·");
s=s.replaceAll("�", "—");
s=s.replaceAll("�", "–");
// symbols
s=s.replaceAll("�", "†");
s=s.replaceAll("�", "‡");
s=s.replaceAll("�", "§");
s=s.replaceAll("�", "¶");
// math
s=s.replaceAll("�", "°");
s=s.replaceAll("�", "±");
s=s.replaceAll("�", "¹");
s=s.replaceAll("�", "²");
s=s.replaceAll("�", "³");
s=s.replaceAll("�", "º");
s=s.replaceAll("�", "¼");
s=s.replaceAll("�", "½");
s=s.replaceAll("�", "¾");
s=s.replaceAll("�", "÷");
s=s.replaceAll("�", "µ");
s=s.replaceAll("�", "¬");
s=s.replaceAll("�", "‰");
// single accents
s=s.replaceAll("�", "¸");
s=s.replaceAll("�", "´");
s=s.replaceAll("�", "¯");
s=s.replaceAll("�", "uml;");
// lowercase accents
s=s.replaceAll("�", "à");
s=s.replaceAll("�", "á");
s=s.replaceAll("�", "&aacirc;");
s=s.replaceAll("�", "ã");
s=s.replaceAll("�", "ä");
s=s.replaceAll("�", "å");
s=s.replaceAll("�", "æ");
s=s.replaceAll("�", "è");
s=s.replaceAll("�", "é");
s=s.replaceAll("�", "&eacirc;");
s=s.replaceAll("�", "ë");
s=s.replaceAll("�", "ì");
s=s.replaceAll("�", "í");
s=s.replaceAll("�", "&iacirc;");
s=s.replaceAll("�", "ï");
s=s.replaceAll("�", "ò");
s=s.replaceAll("�", "ó");
s=s.replaceAll("�", "&oacirc;");
s=s.replaceAll("�", "õ");
s=s.replaceAll("�", "ö");
s=s.replaceAll("�", "ù");
s=s.replaceAll("�", "ú");
s=s.replaceAll("�", "&uacirc;");
s=s.replaceAll("�", "ü");
s=s.replaceAll("�", "ý");
s=s.replaceAll("�", "ÿ");
// uppercase accents
s=s.replaceAll("�", "À");
s=s.replaceAll("�", "Á");
s=s.replaceAll("�", "&Aacirc;");
s=s.replaceAll("�", "Ã");
s=s.replaceAll("�", "Ä");
s=s.replaceAll("�", "Å");
s=s.replaceAll("�", "Æ");
s=s.replaceAll("�", "È");
s=s.replaceAll("�", "É");
s=s.replaceAll("�", "&Eacirc;");
s=s.replaceAll("�", "Ë");
s=s.replaceAll("�", "Ì");
s=s.replaceAll("�", "Í");
s=s.replaceAll("�", "&Iacirc;");
s=s.replaceAll("�", "Ï");
s=s.replaceAll("�", "Ò");
s=s.replaceAll("�", "Ó");
s=s.replaceAll("�", "&Oacirc;");
s=s.replaceAll("�", "Õ");
s=s.replaceAll("�", "Ö");
s=s.replaceAll("�", "Ù");
s=s.replaceAll("�", "Ú");
s=s.replaceAll("�", "&Uacirc;");
s=s.replaceAll("�", "Ü");
s=s.replaceAll("�", "Ý");
// other foreign
s=s.replaceAll("�", "Ç");
s=s.replaceAll("�", "ç");
s=s.replaceAll("�", "¿");
s=s.replaceAll("�", "Ð");
s=s.replaceAll("�", "ð");
s=s.replaceAll("�", "Ñ");
s=s.replaceAll("�", "ñ");
s=s.replaceAll("�", "&Ntimes;");
s=s.replaceAll("�", "Ø");
s=s.replaceAll("�", "ø");
s=s.replaceAll("�", "Þ");
s=s.replaceAll("�", "þ");
s=s.replaceAll("�", "ß");
return s;
}
public static String doCurleys(String s)
{
s=s.replaceAll("'", "’");
s=s.replaceAll("\"(.*)\"", "“$1”");
return s;
}
/**
* Straight quotes
* @param s
* @return
*/
public static String doStraight(String s)
{
s=s.replaceAll("\"", """);
s=s.replaceAll("�", "‘");
return s;
}
}