function parsesyntax(src) //解析当前文本
{
var text = src.innerhtml;
text = text.replace(/<font[^<>]*>/gi, "").replace(/<\/font[^<>]*>/gi,"");
text = text.replace(/<p>/gi, "\xfe").replace(/<\/p>/gi, "\xff");
text = text.replace(/\ /gi, "\xfd");
text = text.replace(/\r\n/gi,"");
for (var i = 0; i <syntaxset.all.length; i++)
{
var syntaxes = syntaxset.all[i];
for (var j = 0; j < syntaxes.rules.all.length; j++)
{
syntaxes.rules.all[j].color = syntaxes.color;
syntaxes.rules.all[j].cons = syntaxes.cons;
text = parserule(text, syntaxes.rules.all[j]);
}
}
src.innerhtml = text.replace(/\xfc/g,"'").replace(/\xfe/g,"<p>").replace(/\xff/g,"</p>").replace(/\xfd/g," ");
}
function parserule(text, rule) //解析词法
{
//利用正则表达式
var newtext = "";
var idx = text.search(rule.expr);
while (idx != -1)
{
var remark = text.match(rule.expr);
//alert(text.substring(0, idx+remark[0].length));
var subtext = text.substring(0, idx + remark[0].length);
if(rule.cons == null || (idx == 0 || rule.cons.test(text.charat(idx-1))) && (idx + remark[0].length >= text.length || rule.cons.test(text.charat(idx + remark[0].length))))
{
//alert(remark[0]);
//alert(remark[0].replace(/<font[^<>]*>/gi, "").replace(/<\/font[^<>]*>/gi,""));
subtext = subtext.replace(remark[0], "<font color=\xfc"+rule.color+"\xfc>" + remark[0].replace(/<font[^<>]*>/gi, "").replace(/<\/font[^<>]*>/gi,"") + "</font>");
//alert(subtext);
}
newtext += subtext;
text = text.substring(idx + remark[0].length);
idx = text.search(rule.expr);
}
newtext += text;
return newtext;
}
function getcurrenttoken(src)
{
var osel = document.selection.createrange();
var offset = src.document.selection.createrange();
offset.movetopoint(osel.offsetleft, osel.offsettop);
offset.movestart("character", -99999);
var tokens = offset.text.split(/[\s\+\-\*\/]/); //token由连续字母数字、下划线、点号、括号、引号构成
var currenttoken = tokens[tokens.length - 1];
var idx = offset.text.length;
var fulltoken = src.innertext.substring(idx);
fulltoken = fulltoken.replace(/[\s\+\-\*\/]/,"@@@@");
idx = fulltoken.indexof("@@@@");
if(idx != -1)
fulltoken = fulltoken.substring(0, idx);
var token = new array();
token.currenttoken = currenttoken + fulltoken;
token.postok = currenttoken;
return token;
}
array.prototype.pushdistinct = function(obj)
{
for (var i = 0; i < this.length; i++)
{
if (this[i] == obj)
{
return null;
}
}
this.push(obj);
return obj;
}
function putmethods(methodlist, obj, methods) //将方法添加到方法列表
{
var list = methods.split(",");
for (var i = 0; i < list.length; i++)
{
if (obj[list[i]] != null)
{
methodlist.pushdistinct(list[i]);
}
}
}
var now = new date(); //测试用
var a = 33.3333; //测试用
var __expr = new regexp("tt"); //测试用
function setmethods(objstr)
{
var osel = document.selection.createrange();
try
{
if (objstr == "alert") return;
var methodlist = new array();
var obj = eval(objstr);
if (obj.prototype != null)
{
methodlist.pushdistinct("prototype");
}
if (obj != null)
{