阅读内容 

Use Java to implement the UBB future.

[日期:2005-10-31] 来源:未知  作者:佚名 [字体: ]
UBB & JAVA
    ----Use Java to implement the UBB future.

[Author] pizer.chen -- iceant -- 陈鹏
iceant@21cn.com
[icq   ] 77777369

These days,I write some publish system,just like BBS/news etc.
The client asked me ,whether they can insert the image and href url to the plain text when they published them.
so i write this.
I use XML file for dynamic UBB extends.
U can make the UBB rule of yourself.
The only thing that u need to do is modify the UBB.XML config file.

Best Regards
===============
                                                                    pizer.chen/2001-9-4

===========================
    Resource Link
===========================
It is based on XML & RegularExpressions tech.
about XML & regularExpression u can find them here:

http://www.w3.org/XML/     
http://XML.apache.org
http://www.meurrens.org/ip-Links/java/regex/navi.HTML
http://www.savarese.org/oro/
http://jakarta.apache.org/oro
about ubb u can find them here:
http://www.ubbdesign.com

========================
it used :
    jakarta-regexp-1.2              (download form http://jakarta.apache.org)
    dom4j-0.6(over 0.6 version)     (download form http://sourceforge.NET)
    jdk(over 1.2 version)           (download form http://java.sun.com)

==========================
        UBB.XML
it must be stored in CLASSPATH
==========================
the regularExpression & replace string map file.
<!--============================-->

<?XML version="1.0" encoding="UTF-8"?>
<UBB-map>
    <map ubb-code="\[b\](.+?)\[\/b\]" map-to="<b>$1</b>"/>         <!--<b>$1</b>-->
    <map ubb-code="\[i\](.+?)\[\/i\]" map-to="<i>$1</i>"/>         <!--<i>$1</i>-->
    <map ubb-code="\[h1\](.+?)\[\/h1\]" map-to="<h1>$1</h1>"/>     <!--<h1>$1</h1>-->
    <map ubb-code="\(.+?)\[\/url\]" map-to="<a href=../../"$1" target="_blank">$2</a>"/>        <!--<a href=../../"$1" target="_blank">$2</a>-->
    <!--...-->
</UBB-map>

=========================

        UBB.java

=========================

/*
* UBB.java
*
* Created on 2001年9月3日, 下午4:01
*/

package com.wacos.util.ubb;

import org.dom4j.*;
import org.dom4j.io.*;
import java.io.*;
import java.util.*;
import org.apache.regexp.*;
/**
*
* @author  Pizer.chen -- iceant -- 陈鹏
* @version 0.1
*/
public class UBB {
    
    private static final String XML_CONFIG_FILE = "UBB.xml";
    private static org.dom4j.Document doc = null;
     
    /** Creates new UBB */
    public UBB() {
    }
    
    public static String parse(String inStr){
        try{
            List list = getUBBCodeList();
            String ubbCode="";
            String mapStr="";
            Attribute attribute=null;
            for (Iterator iter = list.iterator(); iter.hasNext(); ) {
                attribute = (Attribute) iter.next();
                ubbCode = attribute.getValue();
                mapStr= getMapValue(ubbCode);
                inStr=REReplace.replace(ubbCode,mapStr,inStr);
            }
            return inStr;
        }catch(Exception err){
            System.out.println(err);
            return err.toString();
        }
    }

    /**
     * parse the XML file to Document object
    **/
    private static Document XML2Document(){
        try{
            InputStream is = Thread.currentThread().getContextClassLoader()
                            .getResourceAsStream(XML_CONFIG_FILE);
            SAXReader reader = new SAXReader();
            Document document = reader.read(is);
            return document;
        }catch(Exception err){
            System.out.println(err);
            return null;
        }
    }

    /**
     * use xpath to get the map-to value of the ubb-code.
    **/
    private static String getMapValue(String ubbCode){
        try{
            if(doc==null){
                doc=XML2Document();
            }
            Node node = doc.selectSingleNode("//map[@ubb-code='"+ubbCode+"']");
            return node.valueOf( "@map-to" );
        }catch(Exception err){
            System.out.println(err);
            return err.toString();
        }
    }
    /**
     * get the <map ubb-code="..." map-to=".."> ubb-code List
    **/
    private static List getUBBCodeList(){
        try{
            if(doc==null){
                doc=XML2Document();
            }
            return doc.selectNodes( "//map/@ubb-code" );
        }catch(Exception err){
            System.out.println(err);
            return null;
        }
    }
    /**
     * get the <map ubb-code="..." map-to=".."> map-to List
    **/
    private static List getUBBMapList(){
        try {
            if(doc==null){
                doc=XML2Document();
            }
            return doc.selectNodes("//map//@map-to");
        }
        catch (Exception e) {
            System.out.println(e);
            return null;
        }
    }
}

========================

     REReplace.java

========================
package com.wacos.util.ubb;

import java.io.*;
import java.util.*;
import org.apache.regexp.*;

public class REReplace
{
    /**
     * replace the inStr with pattern1 & pattern2
    **/
    public static String replace(String pattern1,String pattern2,String inStr){
        try {
            RE re = new RE(pattern1);
            int point=0;
            while(re.match(inStr)){
                RE re2 = new RE("\\$([0-9])");
                while(re2.match(pattern2)){
                    point = Integer.parseInt(re2.getParen(1));
                    pattern2=re2.subst(pattern2,re.getParen(point),RE.REPLACE_FIRSTONLY);
                }
                inStr = re.subst(inStr,pattern2);
            }
            return inStr;
        }
        catch (Exception e) {
            System.out.println(e);
            return e.toString();
        }  
    }

}


=============================
        UBBTest
=============================
package com.wacos.util.ubb;

public class UBBTest
{
    public static void main(String[] args)
    {
        try{
            String test ="atest

H1 Font

\r\n [url href=http://www.21cn.com]测试hehe..";

            System.out.println(UBB.parse(test));
        }catch(Exception err){
            System.out.println(err);
        }
    }
}


阅读:
录入:

推荐 】 【 打印
相关新闻      
本文评论       全部评论
发表评论
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款


点评: 字数
姓名:
Advertisement
内容查询


Advertisement