All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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" +"\r\n" +"\r\n" +"\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" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " "; } } /** * An unformatted table without borders, no background */ private class TableBare extends Table { private boolean m_headerRowDone = false; String beginTable() { return "
"; } else { return "
"; } } String beginRow(int span) { if (!mHeaderRowDone) { return "
"; } else { return "
"; } } String beginHRow() { mHeaderRowDone = false; return beginRow(); } String beginHRow(int span) { mHeaderRowDone = false; return beginRow(span); } String tab() { if (!mHeaderRowDone) { return "  "; } else { return "  "; } } String tab(int span) { if (!mHeaderRowDone) { return "  "; } else { return "  "; } } String endRow() { mHeaderRowDone = true; 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 = "&#x"; 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(); } }