function SplitToList(str){
    var res =[];
    var stack = [];
    var pre_b = -1;
    var pre_o = 0;
    for(var i=0;i<str.length;i++){
        switch(str[i]){
        case "<":
            stack.push(
            {
                list_i :res.length+1,
                i : i
            });
            if(pre_o != i)res.push(str.substring(pre_o,i));
            pre_o = i+1;
        break;
        case ">":
            if(stack.length == 0){//이전에 <이 없으면
                //>도 그냥 장식이다. 이전에 있던 것들과 substring으로 res에 push해주자
                if(pre_o != i)res.push(str.substring(pre_o,i));
                res.push("&gt;");
                pre_o = i+1;
            }
            else{//이전에 <이 있었으면
                //<의 안쪽을 넣어주자.
                res.push(str.substring(stack.pop().i,i+1));
                pre_o = i+1;
            }
        break;
        }
    }
    //만약에 <이 남아 있으면
    //짝이 안남는 불쌍한 것들이다... 원래 위치에 넣어주자.
    var o = null;
    while(null != (o = stack.pop())){
        res.splice(o.list_i,0,"&lt;");
    }
    if(pre_o != str.length) res.push(str.substring(pre_o,str.length));
    return res;
}
function ConvertToMediaWikiTable(str){
    var res = [];var tablemark = null;var markStartIdx = 0;
    while(-1 != (markStartIdx = str.indexOf("\n||"))){
        res.push(str.substring(0,markStartIdx));
        str = str.substring(markStartIdx,str.length);
        tablemark = [];
        var tablestyle=[];
        while(1){
            var newLineIdx = str.indexOf("\n")+1;
            if(str.substr(newLineIdx,2) != "||") break;
            str = str.substring(newLineIdx,str.length);
            var lineEndIdx = str.indexOf("\n");
            if(lineEndIdx==-1)lineEndIdx = str.length;
            var line = str.substring(0,lineEndIdx).split("||");
            str = str.substring(lineEndIdx,str.length);
            line.splice(0,1);
            line.splice(line.length-1,1);
            var colspan = 0;
            var rowspan= "";
            var d = [];
            for(var i=0; i < line.length ; i++){
                var c=line[i];
                line[i] = "";
                if(c.length==0)colspan++;
                else{
                var b=0;
                var is_h = 0;
                var style = [];
                var l = SplitToList(c);
                c = [];
 
                for(var j = 0 ; j < l.length ; j++)
                {
                    var a=l[j];
                    if(a[0] == "<" && a[a.length-1] == ">"){
                        a = a.substring(1,a.length-1);
                        var v = a.substring(1,a.length);
                       
                        if(a[0]=="-")colspan = v-1;
                        else if(a[0]=="|"){   rowspan    ="rowspan=\""+v+"\" ";b=1;}
                        else if(a[0]=="(")style.push("text-align:left");
                        else if(a[0]==")")style.push("text-align:right");
                        else if(a[0]==":")style.push("text-align:center");
                        else if(a=="h")is_h=1;
                        else if(a.startsWith("width"))style.push("width:" + a.substring(a.indexOf("=")+1,a.length));
                        else if(a.startsWith("height"))style.push("height:" + a.substring(a.indexOf("=")+1,a.length));
                        else if(a.startsWith("bgcolor"))style.push("background-color:" + a.substring(a.indexOf("=")+1,a.length));
                        else if(a.startsWith("style"))style.push(a.substring(a.indexOf("=")+1,a.length-1));
                        else if(a.startsWith("#"))style.push("background-color:"+a);
                        else if(a.startsWith("table")){
                            var a=a.substring(6,a.length);
                            v=a.substring(a.indexOf("=")+1,a.length);
                            if(a.startsWith("bgcolor"))tablestyle.push("background-color:"+v);
                            else if(a.startsWith("align"))tablestyle.push("float:"+v);
                            else if(a.startsWith("width"))tablestyle.push("width:"+v);
                            else if(a.startsWith("style"))tablestyle.push(v.substring(0,v.length-1));
                        }
                        else c.push(l[j]);
                           
                    }
                    else c.push(l[j]);
                       
                }
                c = c.join("");
                if(c.length == 0){
                    colspan++;
                    continue;
                }
                if(is_h==0){
                    tablemark.push("\n|");
                }
                else{
                    tablemark.push("\n!");
                }
                tablemark.push(rowspan);
                if(style.length!=0){
                    b=1;
                    var t = "style=\"";
                    t+=style.join(";");
                    t+='" ';
                    tablemark.push(t);
                }
                if(colspan!=0){
                    tablemark.push("colspan=\"" + (colspan +1) + "\" ");
                    b=1;
                }
                if(b)tablemark+="|";
                tablemark.push(c.replace("[BR]","<br>").replace("[br]","<br>"));
                colspan=0;
                }
            }
            tablemark.push("\n|-");
        }
        res.push("\n{|class=\"wikitable\" style=\"");
        if(tablestyle.length!=0){
            b=1;
            res.push(tablestyle.join(";"));
        }
        res.push("\"\n|-");
        res.push(tablemark.join(""));
        res.push("\n|}");
    }
    res.push(str);
    return res.join("");
}



모니위키 테이블마크를 미디어위키 테이블마크로 바꾸는 건데 이정도면 잘한 거같냐?