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

편집 요약 없음
편집 요약 없음
태그: 미디어위키와 호환되지 않는 모니위키 문법이 사용됨
8번째 줄: 8번째 줄:
switch(str[i]){
switch(str[i]){
case "<":
case "<":
stack.push(
stack.push({
{
list_i :res.length+1,
list_i :res.length+1,
i : i
i : i
});
});
if(pre_o != i)res.push(str.substring(pre_o,i));
if(pre_o != i){
res.push(str.substring(pre_o,i));
}
pre_o = i+1;
pre_o = i+1;
break;
break;
19번째 줄: 21번째 줄:
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));
}
res.push("&gt;");
res.push("&gt;");
pre_o = i+1;
pre_o = i+1;
37번째 줄: 41번째 줄:
res.splice(o.list_i,0,"&lt;");
res.splice(o.list_i,0,"&lt;");
}
}
if(pre_o != str.length) res.push(str.substring(pre_o,str.length));
if(pre_o != str.length){
res.push(str.substring(pre_o,str.length));
}
return res;
return res;
}
function ConvertToMediaWikiFile(str){
}
function ConvertToMediaWikiRef(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(str[i-1] != "]" && str[i+1] != "]"){ //앞 뒤에 ]이 있으면 이건 링크 태그다.
if(stack.length == 0){//이전에 [*이 없으면
//]도 그냥 장식이다. 이전에 있던 것들과 substring으로 res에 push해주자
if(pre_o != i)res.push(str.substring(pre_o,i));
res.push("]");
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,"[*");
}
if(pre_o != str.length){
res.push(str.substring(pre_o,str.length));
}
for(var i = 0 ; i < res.length ; i++){
var it = res[i];
if(it.startsWith("[*") && it.endsWith("]")){
res[i] = "<ref>" + it.substring(2,it.length-1) + "</ref>";
}
}
return res.join("");
}
}
function ConvertToMediaWikiTable(str){
function ConvertToMediaWikiTable(str){
77번째 줄: 136번째 줄:
a = a.substring(1,a.length-1);
a = a.substring(1,a.length-1);
var v = a.substring(1,a.length);
var v = a.substring(1,a.length);
if(a[0]=="-")colspan = v-1;
if(a[0]=="-"){
else if(a[0]=="|"){   rowspan   ="rowspan=\""+v+"\" ";b=1;}
colspan = v-1;
else if(a[0]=="(")style.push("text-align:left");
}
else if(a[0]==")")style.push("text-align:right");
else if(a[0]=="|"){
else if(a[0]==":")style.push("text-align:center");
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=="h")is_h=1;
else if(a.startsWith("width"))style.push("width:" + a.substring(a.indexOf("=")+1,a.length));
else if(a.startsWith("width")){
else if(a.startsWith("height"))style.push("height:" + a.substring(a.indexOf("=")+1,a.length));
style.push("width:" + 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("height")){
else if(a.startsWith("#"))style.push("background-color:"+a);
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")){
else if(a.startsWith("table")){
var a=a.substring(6,a.length);
var a=a.substring(6,a.length);
98번째 줄: 178번째 줄:
}
}
else c.push(l[j]);
else c.push(l[j]);
}
}
else c.push(l[j]);
else c.push(l[j]);
}
}
c = c.join("");
c = c.join("");
127번째 줄: 207번째 줄:
}
}
if(b)tablemark+="|";
if(b)tablemark+="|";
c = ConvertToMediaWikiRef(c);
tablemark.push(c.replace("[BR]","<br>").replace("[br]","<br>"));
tablemark.push(c.replace("[BR]","<br>").replace("[br]","<br>"));
colspan=0;
colspan=0;
145번째 줄: 226번째 줄:
return res.join("");
return res.join("");
}
}
$(document).ready(function(){
$(document).ready(function(){
$("#wpSave").click(function()
$("#wpSave").click(function()

2015년 6월 30일 (화) 09:08 판

//라이센스 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 ConvertToMediaWikiFile(str){
}
function ConvertToMediaWikiRef(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(str[i-1] != "]" && str[i+1] != "]"){ //앞 뒤에 ]이 있으면 이건 링크 태그다.
				if(stack.length == 0){//이전에 [*이 없으면
					//]도 그냥 장식이다. 이전에 있던 것들과 substring으로 res에 push해주자
					if(pre_o != i)res.push(str.substring(pre_o,i));
					res.push("]");
					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,"[*");
	}
	if(pre_o != str.length){
		res.push(str.substring(pre_o,str.length));
	}
	
	for(var i = 0 ; i < res.length ; i++){
		var it = res[i];
		if(it.startsWith("[*") && it.endsWith("]")){
			res[i] = "<ref>" + it.substring(2,it.length-1) + "</ref>";
		}
	}
	return res.join("");
}
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+="|";
				c = ConvertToMediaWikiRef(c);
				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()));
});
});