User:Bluedeck/serve/parenfix.js
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
// Author: Bluedeck <bluedeck@outlook.com>
// 本脚本未设计为可公开引用。未咨询 bluedeck 的引用可能造成脚本冲突。
function Sw_Parenfix()
{
this.data={"brief":{},"label":"","raw":""};
this.setParendata = function(parendata)
{
if(this.check_validity_parendata(parendata))
{
this.data = this.parendata_to_json(parendata);
return true;
}
return false;
};
this.getParendata = function()
{
return this.json_to_parendata(this.data);
};
this.setJson = function(json)
{
if(this.check_validity_json(json))
{
this.data = json;
return true;
}
retrun false;
};
this.getJson = function()
{
return this.data;
};
this.parendata_to_json = function(string)
{
arr = string.split(")");
brief = {};
label = "";
raw = "";
for(i=0; i<arr.length; i++)
{
if(arr[i].split(":").length !== 2)
{
label = arr[i].split("(")[1];
break;
}
}
for(j=0; j<i; j++)
{
brief[arr[j].split(":")[0].split("(")[1]] = arr[j].split(":")[1];
}
brr=[];
for(i++; i<arr.length; i++)
{
brr = brr.concat(arr[i]);
}
raw = brr.join(")");
return {"brief":brief,"label":label,"raw":raw};
};
this.json_to_parendata = function(json)
{
parendata = "";
for(i in json.brief)
{
parendata += "(" + i + ":" + json.brief[i] + ")";
}
parendata += "(" + json.label + ")";
parendata += json.raw;
return parendata;
};
this.check_validity_parendata = function(string)
{
if(string.length<2)
{
// string has to contain at least "()".
return false;
}
if(string.length===2&&string!=="()")
{
// string has to be "()" if it has a length of 2
return false;
}
arr = string.split(")");
for(i=0; i<arr.length; i++)
{
if(arr[i].split(":").length >2)
{
// more than 1 colon in each pair of parentheses is not allowed.
return false;
}
if(arr[i][0] !== "(")
{
// has to have left parenthesis
return false;
}
if(arr[i].split(":").length === 1)
{
// has to have a label
break;
}
}
return true;
};
this.check_validity_json = function(json)
{
if(typeof json.brief !== "object")
{
// json.brief has to be object
return false;
}
if(typeof json.label !== "string")
{
// json.label has to be string
return false;
}
if(json.label.split(":").length !== 1)
{
// does not allow ":" in label
return false;
}
if(json.label.split("(").length !== 1)
{
// does not allow "(" in label
return false;
}
if(json.label.split(")").length !== 1)
{
// does not allow ")" in label
return false;
}
if(typeof json.raw !== "string")
{
// json.raw has to be string
return false;
}
for(var i in json.brief)
{
if(i.split("(").length !== 1)
{
// does not allow "(" in cell key
return false;
}
if(i.split(")").length !== 1)
{
// does not allow ")" in cell key
return false;
}
if(i.split(":").length !== 1)
{
// does not allow ":" in cell key
return false;
}
if(typeof json.brief[i] !== "string")
{
// each cell of brief has to be string
return false;
}
if(json.brief[i].split("(").length !== 1)
{
//does not allow "(" in cell data
return false;
}
if(json.brief[i].split(")").length !== 1)
{
//does not allow ")" in cell data
return false;
}
if(json.brief[i].split(":").length !== 1)
{
//does not allow ":" in cell data
return false;
}
}
return true;
};
}