사용자:다메즈마/nmtbtomwtb.js: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
5번째 줄: 5번째 줄:
var pre_b = -1;
var pre_b = -1;
var pre_o = 0;
var pre_o = 0;
for(var i=0;i<str.length;i++)
for(var i=0;i<str.length;i++){
{
switch(str[i]){
switch(str[i])
{
case "<":
case "<":
stack.push(
stack.push(
{
{
20번째 줄: 17번째 줄:
break;
break;
case ">":
case ">":
if(stack.length == 0)//이전에 <이 없으면
if(stack.length == 0){//이전에 <이 없으면
{
//>도 그냥 장식이다. 이전에 있던 것들과 substring으로 res에 push해주자
//>도 그냥 장식이다. 이전에 있던 것들과 substring으로 res에 push해주자
if(pre_o != i)res.push(str.substring(pre_o,i));
if(pre_o != i)res.push(str.substring(pre_o,i));
27번째 줄: 23번째 줄:
pre_o = i+1;
pre_o = i+1;
}
}
else//이전에 <이 있었으면
else{//이전에 <이 있었으면
{
//<의 안쪽을 넣어주자.
//<의 안쪽을 넣어주자.
res.push(str.substring(stack.pop().i,i+1));
res.push(str.substring(stack.pop().i,i+1));
42번째 줄: 37번째 줄:
res.splice(o.list_i,0,"&lt;");
res.splice(o.list_i,0,"&lt;");
}
}
if(pre_o != str.length)
if(pre_o != str.length) res.push(str.substring(pre_o,str.length));
{
res.push(str.substring(pre_o,str.length));
}
return res;
return res;
}
}
function ConvertToMediaWikiTable(str){
function ConvertToMediaWikiTable(str){
var res = [];var tablemark = null;var markStartIdx = 0;
var res = [];var tablemark = null;var markStartIdx = 0;
while(-1 != (markStartIdx = str.indexOf("\n||"))){
while(-1 != (markStartIdx = str.indexOf("||"))){
res.push(str.substring(0,markStartIdx));
res.push(str.substring(0,markStartIdx));
str = str.substring(markStartIdx,str.length);
str = str.substring(markStartIdx,str.length);
105번째 줄: 97번째 줄:
else if(a.startsWith("style"))tablestyle.push(v.substring(0,v.length-1));
else if(a.startsWith("style"))tablestyle.push(v.substring(0,v.length-1));
}
}
else{
else c.push(l[j]);
c.push(l[j]);
}
}
else{
c.push(l[j]);
}
}
else c.push(l[j]);
}
}
c = c.join("");
c = c.join("");

2015년 6월 30일 (화) 07:51 판

//라이센스 GPLv2입니다.
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("||"))){
		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("");
}
$(document).ready(function(){
$("#wpSave").click(function()
{
	$("#wpTextbox1").val(ConvertToMediaWikiTable($("#wpTextbox1").val()));
});
});