
net.sf.hulp.util.MarkupHtml Maven / Gradle / Ivy
The newest version!
// Copyright (c) 1999 Frank Gerard
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
package net.sf.hulp.util;
/**
* Specialized for HTML markup
*/
public class MarkupHtml extends Markup {
final static private int MAXTABLES = 20;
private Table[] mTableStack = new Table[MAXTABLES];
private int m_iTable = -1;
/**
* Displays a horizontal menu
*/
public static class Menu {
StringBuffer m_data = new StringBuffer(200);
boolean m_added;
public Menu(String name) {
String top = "\n"
+ "\n"
+ "\n"
+ " \n"
+ "" +name+ " \n"
+ "\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n"
+ " \n"
+ "\n"
+ "" +name+ ": \n"
+ "";
m_data.append(top);
//
//
//
//
// $(name)$
//
//
//
//
//
//
//
// $(name)$:
//
// $(name)$
//
// |
//
//
//
//
}
public Menu add(String link, String name) {
if (m_added) {
m_data.append(" | \n");
} else {
m_added = true;
}
String item =
"" +name+ "\n"
+ "";
m_data.append(item);
return this;
}
public String toString() {
return m_data + "";
}
}
static int hideRandom = 0;
public String beginHide(String link) {
// Thread safe not an issue
return beginHide(link, "showhideid" + Integer.toString(++hideRandom));
}
public String beginHide(String link, String id) {
return "" +link+ "\n"
+ "\n";
}
public String endHide() {
return "";
}
/**
* Baseclass for all HTML tables
*/
private static abstract class Table {
abstract String beginTable();
abstract String beginRow();
abstract String beginRow(int span);
abstract String beginHRow();
abstract String beginHRow(int span);
abstract String tab();
abstract String tab(int span);
String endRow() {
return "\r\n";
}
String endTable() {
return "";
}
}
public String beginTable(int style) {
switch (style) {
case TABLESTYLE_SIMPLE :
mTableStack[++m_iTable] = new SimpleTable();
break;
case TABLESTYLE_BANNER :
mTableStack[++m_iTable] = new BannerTableEgal();
break;
case TABLESTYLE_BANNEREGAL :
mTableStack[++m_iTable] = new BannerTableEgal();
break;
case TABLESTYLE_BARE :
mTableStack[++m_iTable] = new TableBare();
break;
default:
mTableStack[++m_iTable] = new SimpleTable();
break;
}
return mTableStack[m_iTable].beginTable();
}
public String endTable() {
return mTableStack[m_iTable--].endTable();
}
public String beginRow() {
return mTableStack[m_iTable].beginRow();
}
public String beginRow(int span) {
return mTableStack[m_iTable].beginRow(span);
}
public String beginHRow() {
return mTableStack[m_iTable].beginHRow();
}
public String beginHRow(int span) {
return mTableStack[m_iTable].beginHRow(span);
}
public String endRow() {
return mTableStack[m_iTable].endRow();
}
public String tab() {
return mTableStack[m_iTable].tab();
}
public String tab(int span) {
return mTableStack[m_iTable].tab(span);
}
public String br() {
return "
\r\n";
}
public String beginArea() {
return "\r\n";
}
public String endArea() {
return "
\r\n";
}
public String caption(String str) {
return "
" + str + "
";
}
public String bold(String str) {
return "" + str + "";
}
public String strong(String str) {
return "" + str + "";
}
public String fine(String str) {
return "" + str + "";
}
public String beginPage() {
return "\n"
+ "\n"
+ "\n"
+ "\n"
+ " \n"
+ "";
}
public String endPage() {
return "";
}
public String makeSafe(String val) {
return xmlNormalize(val);
}
public String beginPre() {
return "";
}
public String endPre() {
return "
";
}
/**
* A HTML doc that contains two sub frames: one called body with URL ?body
* and one called menu with URL ?menu
*
* @return HTML doc
*/
public String pageFrame() {
return ""
+"\r\n"
+"";
}
public String link(String url) {
return "";
}
public String link() {
return "";
}
/**
* A simple HTML table using borders.
*/
private static class SimpleTable extends Table {
String beginTable() { return "\r\n"; }
String beginRow() { return ""; }
String beginRow(int span) { return ""; }
String beginHRow() { return beginRow(); }
String beginHRow(int span) { return beginHRow(span); }
String tab() { return " "; }
String tab(int span){ return " "; }
}
/**
* A nicely formatted table with borders, no header row, on a light gray background
*/
private class BannerTableEgal extends Table {
private boolean mHeaderRowDone = false;
String beginTable() {
return "\n";
}
String beginRow() {
if (!mHeaderRowDone) {
return " \n"
+ " ";
} else {
return " \n"
+ " ";
}
}
String beginRow(int span) {
if (!mHeaderRowDone) {
return " \n"
+ " ";
} else {
return " \n"
+ " ";
}
}
String beginHRow() {
mHeaderRowDone = false;
return beginRow();
}
String beginHRow(int span) {
mHeaderRowDone = false;
return beginRow(span);
}
String tab() {
if (!mHeaderRowDone) {
return " \n"
+ " ";
} else {
return " \n"
+ " ";
}
}
String tab(int span) {
if (!mHeaderRowDone) {
return " \n"
+ " ";
} else {
return " \n"
+ " ";
}
}
String endRow() {
mHeaderRowDone = true;
return " ";
}
}
/**
* An unformatted table without borders, no background
*/
private class TableBare extends Table {
private boolean m_headerRowDone = false;
String beginTable() {
return "";
}
String beginRow() {
return m_headerRowDone
? ""
: " ";
}
String beginRow(int span) {
return m_headerRowDone
? " "
: " ";
}
String beginHRow() {
m_headerRowDone = false;
return beginRow();
}
String beginHRow(int span) {
m_headerRowDone = false;
return beginRow(span);
}
String tab() {
return m_headerRowDone
? " "
: " ";
}
String tab(int span) {
return m_headerRowDone
? " "
: " ";
}
String endRow() {
m_headerRowDone = true;
return super.endRow();
}
}
/**
* Makes a string xml safe
*/
public static String xmlNormalize(String s) {
StringBuffer ret = new StringBuffer(s.length());
String esc = null;
int end = s.length();
for (int i = 0; i < end; i++) {
char ch = s.charAt(i);
switch(ch) {
case '<' : {
esc = "<";
break;
}
case '>' : {
esc = ">";
break;
}
case '&' : {
esc = "&";
break;
}
case '"' : {
esc = """;
break;
}
case '\'' : {
esc = "'";
break;
}
// else, default append char
default: {
if (('\u0020' > ch) || (ch > '\u007E')) {
// Unprintable or non-ASCII: use XML numeric
// character reference.
esc = "";
for (int n = 12; n >= 0; n -= 4) {
esc += ("0123456789ABCDEF".charAt(
(ch >> n) & 0xF));
}
esc += ";";
}
}
}
if (esc != null) {
ret.append(esc);
esc = null;
} else {
ret.append(ch);
}
}
return ret.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy