js网页编辑器

时间:2022-01-22 19:06:58

 

js网页编辑器 <html>
js网页编辑器    
<head>
js网页编辑器        
<title>Silverna Demo Ver 0.01</title>
js网页编辑器        
<style>
js网页编辑器js网页编辑器            div.silverna__ctr__editbox
{
js网页编辑器                margin:
0 0 0 0;
js网页编辑器                padding:
0 0 0 0;
js网页编辑器                font:
16/18px Arial;
js网页编辑器                width:
99%;
js网页编辑器                height:480px;
js网页编辑器                border:1px solid #
000000;
js网页编辑器                overflow
-y:scroll;
js网页编辑器            }

js网页编辑器js网页编辑器            p
{
js网页编辑器                margin:
0 0 0 0;
js网页编辑器                padding:
0 0 0 0;
js网页编辑器            }

js网页编辑器        
</style>
js网页编辑器    
</head>
js网页编辑器    
<body style="margin:0 0 0 0;padding:0 0 0 0;word-break:break-all;overflow-x:hidden" onload="__silverna__ctr__editbox.focus()">
js网页编辑器    
<div id="__silverna__ctr__editbox" class="silverna__ctr__editbox" contentEditable="true" onkeyDown="return KeyDown()" onkeyUp="KeyUp()" onmouseup="__silverna__ctr__methods.style.display='none';getCursorPosition();">
js网页编辑器    
</div>
js网页编辑器    
<select size="6" style="display:none;position:absolute" id="__silverna__ctr__methods" onkeyup="SelectMethod()" onclick="SelMethod(this)">
js网页编辑器    
</body>
js网页编辑器
</html>
js网页编辑器
</select>
js网页编辑器
<script language=JScript>
js网页编辑器
function KeyDown()
js网页编辑器js网页编辑器
{
js网页编辑器    
if(__silverna__ctr__methods.style.display != 'none')
js网页编辑器js网页编辑器    
{
js网页编辑器        
if (event.keyCode == 38 || event.keyCode == 40 || event.keyCode == 13
js网页编辑器            
|| event.keyCode == 33 || event.keyCode == 34
js网页编辑器js网页编辑器        
{
js网页编辑器            __silverna__ctr__methods.focus();
js网页编辑器        }

js网页编辑器        
else
js网页编辑器            __silverna__ctr__methods.style.display 
= 'none';
js网页编辑器    }

js网页编辑器    
if(event.keyCode == 9
js网页编辑器js网页编辑器    
{
js网页编辑器        clipboardData.setData(
'text','    '); 
js网页编辑器        event.srcElement.document.execCommand(
'paste'); 
js网页编辑器        
return false;        
js网页编辑器    }

js网页编辑器    
if(event.keyCode == 8
js网页编辑器js网页编辑器    
{
js网页编辑器        
var oSel = document.selection.createRange();
js网页编辑器        
var offset = event.srcElement.document.selection.createRange();
js网页编辑器        offset.moveToPoint(oSel.offsetLeft, oSel.offsetTop);
js网页编辑器        offset.moveStart(
'character'-4);
js网页编辑器        
if(offset.text.length < 4return true;
js网页编辑器        
for (var i = 0; i < offset.text.length; i++)
js网页编辑器js网页编辑器        
{
js网页编辑器            
if (offset.text.charAt(i) != " ")
js网页编辑器js网页编辑器            
{
js网页编辑器                
return true;
js网页编辑器            }

js网页编辑器        }

js网页编辑器        offset.select();
js网页编辑器        event.srcElement.document.execCommand(
'Delete'); 
js网页编辑器        
return false;        
js网页编辑器    }

js网页编辑器    
return true;
js网页编辑器}

js网页编辑器
js网页编辑器
function KeyUp()
js网页编辑器js网页编辑器
{
js网页编辑器    
var oSel, offset;
js网页编辑器    
if(event.keyCode == 13)
js网页编辑器js网页编辑器    
{
js网页编辑器        testStr 
= event.srcElement.innerText.substring(0, getCursorPosition());
js网页编辑器        
var space = null;
js网页编辑器        
for (var i = testStr.length - 1; i >= 0; i--)
js网页编辑器js网页编辑器        
{
js网页编辑器            
if (testStr.charAt(i) == " "break;
js网页编辑器            
if (testStr.charAt(i) == " ")
js网页编辑器js网页编辑器            
{
js网页编辑器                
if(space != null) space += " ";
js网页编辑器            }

js网页编辑器            
else
js网页编辑器js网页编辑器            
{
js网页编辑器                space 
= "";
js网页编辑器            }

js网页编辑器        }

js网页编辑器        
var backupData = clipboardData.getData('text');
js网页编辑器        
if(space != null)
js网页编辑器js网页编辑器        
{
js网页编辑器            clipboardData.clearData();
js网页编辑器            clipboardData.setData(
'text',space); 
js网页编辑器            event.srcElement.document.execCommand(
'paste'); 
js网页编辑器        }

js网页编辑器        
if(backupData != null
js网页编辑器js网页编辑器        
{
js网页编辑器            clipboardData.setData(
'text',backupData);
js网页编辑器        }

js网页编辑器    }

js网页编辑器    oSel 
= document.selection.createRange();
js网页编辑器    
var left = oSel.offsetLeft;
js网页编辑器    
var top = oSel.offsetTop;
js网页编辑器    
var token = getCurrentToken(event.srcElement);
js网页编辑器    
var chars = getCursorPosition();
js网页编辑器
js网页编辑器    
if (event.keyCode == 38 || event.keyCode == 40
js网页编辑器        
|| event.keyCode == 33 || event.keyCode == 34
js网页编辑器js网页编辑器    
{
js网页编辑器        
return true;
js网页编辑器    }

js网页编辑器    parseSyntax(event.srcElement);
js网页编辑器    offset 
= event.srcElement.document.selection.createRange();
js网页编辑器    offset.moveToPoint(left, top);
js网页编辑器    offset.select();
js网页编辑器
js网页编辑器    
if(!event.shiftKey && event.keyCode == 190
js网页编辑器js网页编辑器    
{
js网页编辑器        setMethods(token.posSent.slice(
0-1));  
js网页编辑器    }

js网页编辑器}

js网页编辑器
js网页编辑器
function parseSyntax(src)  
js网页编辑器js网页编辑器
{   
js网页编辑器    
var text = src.innerHTML;
js网页编辑器    text 
= text.replace(/<FONT[^<>]*>/gi, "").replace(/</FONT[^<>]*>/gi,"");
js网页编辑器    text 
= text.replace(/<BR>/gi,"ÿþ");
js网页编辑器    text 
= text.replace(/<P>/gi, "þ").replace(/</P>/gi, "ÿ");
js网页编辑器    text 
= text.replace(/ /gi, "ý");
js网页编辑器    text 
= text.replace(/</gi, "ß");
js网页编辑器    text 
= text.replace(/>/gi, "Ý");
js网页编辑器    text 
= text.replace(/ /gi,"");
js网页编辑器
js网页编辑器    
for (var i = 0; i <SyntaxSet.All.length; i++)
js网页编辑器js网页编辑器    
{
js网页编辑器        
var syntaxes = SyntaxSet.All[i];
js网页编辑器        
for (var j = 0; j < syntaxes.rules.All.length; j++)
js网页编辑器js网页编辑器        
{
js网页编辑器            text 
= parseRule(text, syntaxes.rules.All[j]); 
js网页编辑器        }

js网页编辑器    }

js网页编辑器
js网页编辑器    src.innerHTML 
= text.replace(/Þ/g,"").replace(/ü/g,"'").replace(/þ/g,"<P>").replace(/ÿ/g,"</P>").replace(/ý/g," ").replace(/ß/g,"<").replace(/Ý/g,">");
js网页编辑器}

js网页编辑器
function parseRule(text, rule)  
js网页编辑器js网页编辑器
{
js网页编辑器    
var newText = "";
js网页编辑器
js网页编辑器    
var idx = text.search(rule.expr);
js网页编辑器        
js网页编辑器    
while (idx != -1)
js网页编辑器js网页编辑器    
{
js网页编辑器        
var remark = text.match(rule.expr);
js网页编辑器        
var subText = text.substring(0, idx + remark[0].length);
js网页编辑器        
if(rule.parent.fcons == null || (idx == 0 || rule.parent.fcons.test(text.charAt(idx-1))) && (idx + remark[0].length >= text.length || rule.parent.bcons.test(text.charAt(idx + remark[0].length))))
js网页编辑器js网页编辑器        
{
js网页编辑器            
var subToken = remark[0].replace(/<FONT[^<>]*>/gi, "").replace(/</FONT[^<>]*>/gi,"");
js网页编辑器            
for (var i = 0; i < rule.subRules.length; i++)
js网页编辑器js网页编辑器            
{
js网页编辑器                subToken 
= parseRule(subToken, rule.subRules[i]); 
js网页编辑器            }

js网页编辑器            subText 
= subText.replace(remark[0], "<FONT Þcolor=ü"+rule.parent.color+"ü>" + subToken + "</FONT>");
js网页编辑器        }

js网页编辑器        newText 
+= subText;
js网页编辑器        text 
= text.substring(idx + remark[0].length);
js网页编辑器        idx 
= text.search(rule.expr);
js网页编辑器    }

js网页编辑器    newText 
+= text;
js网页编辑器    
return newText; 
js网页编辑器}

js网页编辑器
js网页编辑器
function getCurrentToken(src)
js网页编辑器js网页编辑器
{
js网页编辑器    
var oSel = document.selection.createRange();
js网页编辑器    
var offset = src.document.selection.createRange();
js网页编辑器    offset.moveToPoint(oSel.offsetLeft, oSel.offsetTop);
js网页编辑器    offset.moveStart(
"character"-99999);
js网页编辑器
js网页编辑器js网页编辑器    
var sentences = offset.text.split(/[;}
{]/g);
js网页编辑器    
var currentSentence = sentences[sentences.length - 1];
js网页编辑器
js网页编辑器    
var tokens = offset.text.split(/[s+-*/]/); 
js网页编辑器    
var currentToken = tokens[tokens.length - 1];
js网页编辑器
js网页编辑器    
var idx = offset.text.length;
js网页编辑器
js网页编辑器    
var fullSentence = src.innerText.substring(idx);
js网页编辑器    fullToken 
= fullSentence.replace(/[ $]/,"@@@@");
js网页编辑器    idx 
= fullSentence.indexOf("@@@@");
js网页编辑器    
if(idx != -1)
js网页编辑器        fullSentence 
= fullSentence.substring(0, idx);
js网页编辑器
js网页编辑器    
var fullToken = src.innerText.substring(idx);
js网页编辑器    fullToken 
= fullToken.replace(/[s+-*/$]/,"@@@@");
js网页编辑器    idx 
= fullToken.indexOf("@@@@");
js网页编辑器    
if(idx != -1)
js网页编辑器        fullToken 
= fullToken.substring(0, idx);
js网页编辑器
js网页编辑器    
var token = new Array(); 
js网页编辑器
js网页编辑器    token.currentToken 
= currentToken + fullToken;
js网页编辑器    token.posTok 
= currentToken;
js网页编辑器
js网页编辑器    token.posSent 
= currentSentence;
js网页编辑器    token.currentSentence 
= currentSentence + fullSentence;
js网页编辑器
js网页编辑器    
return token;
js网页编辑器}

js网页编辑器Array.prototype.pushDistinct 
= function(obj)
js网页编辑器js网页编辑器
{
js网页编辑器    
for (var i = 0; i < this.length; i++)
js网页编辑器js网页编辑器    
{
js网页编辑器        
if (this[i] == obj)
js网页编辑器js网页编辑器        
{
js网页编辑器            
return null;
js网页编辑器        }

js网页编辑器    }

js网页编辑器    
this.push(obj);
js网页编辑器    
return obj;
js网页编辑器}

js网页编辑器
js网页编辑器
function putMethods(methodList, obj, methods) 
js网页编辑器js网页编辑器
{
js网页编辑器    
var list = methods.split(",");
js网页编辑器
js网页编辑器    
for (var i = 0; i < list.length; i++)
js网页编辑器js网页编辑器    
{
js网页编辑器        
if (obj[list[i]] != null)
js网页编辑器js网页编辑器        
{
js网页编辑器            methodList.pushDistinct(list[i]);
js网页编辑器        }

js网页编辑器    }

js网页编辑器}

js网页编辑器
function parseObj(objStr)  
js网页编辑器js网页编辑器
{
js网页编辑器    
var cont = 0;  
js网页编辑器    
var sont = 0;  
js网页编辑器    
for (var i = objStr.length - 1; i >= 0; i--)
js网页编辑器js网页编辑器    
{
js网页编辑器        
if (objStr.charAt(i) == ")")
js网页编辑器            cont 
++;
js网页编辑器        
if (objStr.charAt(i) == "(")
js网页编辑器            cont 
--;
js网页编辑器        
if (objStr.charAt(i) == "]")
js网页编辑器            sont 
++;
js网页编辑器        
if (objStr.charAt(i) == "[")
js网页编辑器            sont 
--;
js网页编辑器        
if (cont == 0 && sont == 0 && /[+-*/=,;&|><]/.test(objStr.charAt(i)))
js网页编辑器            
break;
js网页编辑器        
if (cont < 0 || sont < 0)
js网页编辑器            
break;
js网页编辑器    }

js网页编辑器    
return objStr.substring(i+1);
js网页编辑器}

js网页编辑器
//将对象的方法放到Select Object中显示出来,并且初始化不可列举方法
js网页编辑器
function setMethods(objStr)
js网页编辑器js网页编辑器
{
js网页编辑器        
var oSel = document.selection.createRange();
js网页编辑器        objStr 
= parseObj(objStr);
js网页编辑器        objStr 
= objStr.replace(/alert/g,"Object");
js网页编辑器        
var funs = getObjects(event.srcElement);
js网页编辑器        
var vars = getVariables(event.srcElement);
js网页编辑器
js网页编辑器        
for (var __silverna_i = 0; __silverna_i < funs.length; __silverna_i++)
js网页编辑器js网页编辑器        
{
js网页编辑器js网页编辑器            
try{eval(funs[__silverna_i]);} catch(e){};
js网页编辑器        }

js网页编辑器        
for (var __silverna_i = 0; __silverna_i < vars.length; __silverna_i++)
js网页编辑器js网页编辑器        
{
js网页编辑器js网页编辑器            
try{eval(vars[__silverna_i]);}catch(e){};
js网页编辑器        }

js网页编辑器        
if(event.srcElement.style.display == 'none')
js网页编辑器js网页编辑器        
{
js网页编辑器            event.srcElement.style.display 
= '';
js网页编辑器            event.srcElement.focus();
js网页编辑器        }

js网页编辑器        
try
js网页编辑器js网页编辑器        
{
js网页编辑器            
var methodList = new Array();
js网页编辑器            
var obj = eval(objStr);
js网页编辑器
js网页编辑器            
if (obj.prototype != null)
js网页编辑器js网页编辑器            
{
js网页编辑器                methodList.pushDistinct(
"prototype");
js网页编辑器            }

js网页编辑器            
if (obj != null)
js网页编辑器js网页编辑器            
{
js网页编辑器
js网页编辑器                
//基本Object方法
js网页编辑器
                putMethods(methodList, obj,"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf");
js网页编辑器                
js网页编辑器                
//基本Array方法
js网页编辑器
                putMethods(methodList, obj,"concat,join,length,pop,push,reverse,shift,slice,sort,splice,unshift");                    
js网页编辑器
js网页编辑器                
//基本Date方法
js网页编辑器
                putMethods(methodList,obj,"getDate,getUTCDate,getDay,getUTCDay,getFullYear,getUTCFullYear,getHours,getUTCHours,getMilliseconds,getUTCMilliseconds,getMinutes,getUTCMinutes,getMonth,getUTCMonth,getSeconds,getUTCSeconds,getTime,getTimezoneoffset,getYear");
js网页编辑器
js网页编辑器                putMethods(methodList,obj,
"setDate,setUTCDate,setFullYear,setUTCFullYear,setHours,setUTCHours,setMilliseconds,setUTCMilliseconds,setMinutes,setUTCMinutes,setMonth,setUTCMonth,setSeconds,setUTCSeconds,setTime,setYear,toDateString,toGMTString,toLocaleDateString,toLocaleTimeString,toString,toTimeString,toUTCString,valueOf,parse,UTC");
js网页编辑器
js网页编辑器                
//基本Math方法
js网页编辑器
                putMethods(methodList,obj,"E,LN10,LN2,LOG10E,LOG2E,PI,SQRT1_2,SQRT2");
js网页编辑器                putMethods(methodList,obj,
"abs,acos,asin,atan,atan2,ceil,cos,exp,floor,log,max,min,pow,random,round,sin,sqrt,tan");
js网页编辑器
js网页编辑器                
//基本Function方法
js网页编辑器
                putMethods(methodList,obj,"arguments,caller,length,prototype,apply,call,toString");
js网页编辑器                
js网页编辑器                
//基本Number方法
js网页编辑器
                putMethods(methodList,obj,"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY");
js网页编辑器                putMethods(methodList,obj,
"toString,toLocalString,toFixed,toExponential,toPrecision");
js网页编辑器
js网页编辑器                
//基本RegExp方法
js网页编辑器
                putMethods(methodList,obj,"global,ignoreCase,lastIndex,multiline,source,exec,test");
js网页编辑器
js网页编辑器                
//基本String方法
js网页编辑器
                putMethods(methodList,obj,"charAt,charCodeAt,contact,indexOf,lastIndexOf,match,replace,search,slice,split,substring,substr,toLowerCase,toString,toUpperCase,valueOf,fromCharCode");
js网页编辑器                putMethods(methodList,obj,
"anchor,big,blink,bold,fixed,fontcolor,fontsize,italics,link,small,strike,sub,sup");
js网页编辑器
js网页编辑器            }

js网页编辑器            
for (each in obj)
js网页编辑器js网页编辑器            
{
js网页编辑器                methodList.pushDistinct(each);
js网页编辑器            }

js网页编辑器            methodList.sort();
js网页编辑器
js网页编辑器            
if (methodList.length > 0)
js网页编辑器js网页编辑器            
{
js网页编辑器                __silverna__ctr__methods.options.length 
= 0;
js网页编辑器                
for (var __silverna_i = 0; __silverna_i < methodList.length; __silverna_i++)
js网页编辑器js网页编辑器                
{
js网页编辑器                    __silverna__ctr__methods.options.add(
new Option(methodList[__silverna_i]));    
js网页编辑器                }

js网页编辑器                
if (__silverna__ctr__methods.options.length > 6)
js网页编辑器js网页编辑器                
{
js网页编辑器                    __silverna__ctr__methods.size 
= 6;
js网页编辑器                }

js网页编辑器                
else
js网页编辑器js网页编辑器                
{
js网页编辑器                    __silverna__ctr__methods.size 
= __silverna__ctr__methods.options.length;
js网页编辑器                }

js网页编辑器                __silverna__ctr__methods.style.top 
= oSel.offsetTop;
js网页编辑器                __silverna__ctr__methods.style.left 
= oSel.offsetLeft;
js网页编辑器                __silverna__ctr__methods.style.display 
= "";
js网页编辑器                __silverna__ctr__methods.options[
0].selected = true;
js网页编辑器            }

js网页编辑器            
return true;
js网页编辑器        }

js网页编辑器js网页编辑器        
catch(e){return false;}
js网页编辑器}

js网页编辑器
js网页编辑器
function SelectMethod()
js网页编辑器js网页编辑器
{
js网页编辑器    
var src = event.srcElement;
js网页编辑器    
if(event.keyCode == 13 || event.keyCode == 32)
js网页编辑器js网页编辑器    
{
js网页编辑器        SelMethod(src);
js网页编辑器    }

js网页编辑器
js网页编辑器    
if(event.keyCode == 27 || event.keyCode == 8)
js网页编辑器js网页编辑器    
{
js网页编辑器        src.style.display 
= "none";
js网页编辑器        __silverna__ctr__editbox.focus();
js网页编辑器    }

js网页编辑器}

js网页编辑器
function SelMethod(src)
js网页编辑器js网页编辑器
{
js网页编辑器    
var backupData = clipboardData.getData('text');
js网页编辑器    clipboardData.setData(
'text',src.options[src.selectedIndex].text);
js网页编辑器    __silverna__ctr__editbox.focus();
js网页编辑器    __silverna__ctr__editbox.document.execCommand(
'paste'); 
js网页编辑器    src.style.display 
= "none";
js网页编辑器    getCursorPosition();
js网页编辑器    
if(backupData != null
js网页编辑器js网页编辑器    
{
js网页编辑器        clipboardData.setData(
'text',backupData);
js网页编辑器    }

js网页编辑器}

js网页编辑器
js网页编辑器
function getPos(text) 
js网页编辑器js网页编辑器
{
js网页编辑器    
var rows = 1;
js网页编辑器    
var cols = 1;
js网页编辑器    
var idx = 0;
js网页编辑器    
var subText = text;
js网页编辑器    
while((idx = subText.indexOf(" ")) != -1)
js网页编辑器js网页编辑器    
{
js网页编辑器        subText 
= subText.substring(idx + 1);
js网页编辑器        rows
++;
js网页编辑器    }

js网页编辑器    
return new Array(rows, subText.length + 1);
js网页编辑器}

js网页编辑器
function getNullRows(src,oSel) 
js网页编辑器js网页编辑器
{
js网页编辑器    
var rows = 0;
js网页编辑器
js网页编辑器    
var offsetEnd = src.document.selection.createRange();
js网页编辑器
js网页编辑器    
var oldTop = 2;
js网页编辑器    
var oldLeft = 2;
js网页编辑器
js网页编辑器    
while(1)
js网页编辑器js网页编辑器    
{
js网页编辑器        offsetEnd.moveToPoint(oSel.offsetLeft, oSel.offsetTop);
js网页编辑器        offsetEnd.moveStart(
"character",-1-rows);
js网页编辑器
js网页编辑器        
if (offsetEnd.text.length > 0 || offsetEnd.offsetTop == oldTop && offsetEnd.offsetLeft == oldLeft)
js网页编辑器js网页编辑器        
{
js网页编辑器            
break;
js网页编辑器        }

js网页编辑器
js网页编辑器        rows 
++;
js网页编辑器        oldTop 
= offsetEnd.offsetTop;
js网页编辑器        oldLeft 
= offsetEnd.offsetLeft;
js网页编辑器    }

js网页编辑器    
js网页编辑器    
return rows;
js网页编辑器}

js网页编辑器
function getCursorPosition()
js网页编辑器js网页编辑器
{
js网页编辑器    
var src = event.srcElement;
js网页编辑器    
var offset = src.document.selection.createRange();
js网页编辑器    
var oSel = document.selection.createRange();
js网页编辑器
js网页编辑器    
var textLength = src.innerText.length;
js网页编辑器
js网页编辑器    offset.moveToPoint(oSel.offsetLeft, oSel.offsetTop);
js网页编辑器    offset.moveStart(
"character"-99999);
js网页编辑器    
var rowSpans = offset.getClientRects();
js网页编辑器
js网页编辑器    
var pos = getPos(offset.text);
js网页编辑器         
js网页编辑器    
var charCodes = offset.text.length; 
js网页编辑器    
var chars = offset.text.replace(/ /g,"").length + 1;
js网页编辑器
js网页编辑器    
var extRows = getNullRows(src,oSel);
js网页编辑器    
if(extRows > 0)
js网页编辑器js网页编辑器    
{
js网页编辑器        pos[
0+= extRows;
js网页编辑器        pos[
1= 1;
js网页编辑器    }

js网页编辑器    window.status 
= "行: " + pos[0+", 列: " + pos[1+ ", 第 " + chars + " 个字符" + "  ("+ oSel.offsetTop +","+ 
js网页编辑器    oSel.offsetLeft 
+")";
js网页编辑器    
return charCodes;
js网页编辑器}

js网页编辑器
js网页编辑器
var SyntaxSet = new Array(); 
js网页编辑器SyntaxSet.All 
= new Array();
js网页编辑器
js网页编辑器SyntaxSet.parse 
= function(token)   
js网页编辑器js网页编辑器
{
js网页编辑器    
for (var i = 0; i < this.All.length; i++)
js网页编辑器js网页编辑器    
{
js网页编辑器        
var syntaxes = this.All[i];
js网页编辑器        
for (var j = 0; j < syntaxes.rules.All.length; j++)
js网页编辑器js网页编辑器        
{
js网页编辑器            
if (syntaxes.rules.All[j].test(token))
js网页编辑器js网页编辑器            
{
js网页编辑器                syntaxes.rules.All[j].color 
= syntaxes.color;
js网页编辑器                
return syntaxes.rules.All[j];
js网页编辑器            }

js网页编辑器        }

js网页编辑器    }

js网页编辑器
js网页编辑器    
return null;
js网页编辑器}

js网页编辑器
js网页编辑器SyntaxSet.add 
= function(syntaxes)
js网页编辑器js网页编辑器
{
js网页编辑器    
if(this[syntaxes.name] != null)
js网页编辑器        
return;
js网页编辑器    
this[syntaxes.name] = syntaxes;
js网页编辑器    
this.All.push(syntaxes);
js网页编辑器}

js网页编辑器
js网页编辑器
function Syntaxes(name, color, fcons, bcons) 
js网页编辑器js网页编辑器
{
js网页编辑器    
this.name = name; 
js网页编辑器    
this.color = color; 
js网页编辑器    
this.rules = new Array();  
js网页编辑器    
this.rules.All = new Array();
js网页编辑器    
this.fcons = fcons;  
js网页编辑器    
if(bcons != null)
js网页编辑器        
this.bcons = bcons;
js网页编辑器    
else
js网页编辑器        
this.bcons = fcons;  
js网页编辑器
js网页编辑器    Syntaxes.prototype.addRule 
= function(rule)
js网页编辑器js网页编辑器    
{
js网页编辑器        
if(this.rules[rule.name] != null)
js网页编辑器            
return;
js网页编辑器        
this.rules[rule.name] = rule;
js网页编辑器        
this.rules.All.push(rule);
js网页编辑器        rule.parent 
= this;
js网页编辑器    }

js网页编辑器}

js网页编辑器
js网页编辑器
function SyntaxRule(name, regExp)  
js网页编辑器js网页编辑器
{
js网页编辑器    
this.name = name;    
js网页编辑器    
this.expr = regExp;  
js网页编辑器    
this.subRules = new Array();   
js网页编辑器    SyntaxRule.prototype.test 
= function(token)
js网页编辑器js网页编辑器    
{
js网页编辑器        
return this.expr.test(token);
js网页编辑器    }

js网页编辑器    SyntaxRule.prototype.addSubRule 
= function(rule)
js网页编辑器js网页编辑器    
{
js网页编辑器        
this.subRules.push(rule);
js网页编辑器        
if (rule.parent == null)
js网页编辑器            rule.parent 
= this;
js网页编辑器    }

js网页编辑器}

js网页编辑器
js网页编辑器js网页编辑器SyntaxSet.add(
new Syntaxes("keywords""#0000ff"/[;s.þÿý[]({});,]/));  //词法·关键词·蓝色
js网页编辑器
SyntaxSet["keywords"].addRule(new SyntaxRule("Function",/function/));
js网页编辑器SyntaxSet[
"keywords"].addRule(new SyntaxRule("Variable",/var/));
js网页编辑器SyntaxSet[
"keywords"].addRule(new SyntaxRule("Return",/return/));
js网页编辑器SyntaxSet[
"keywords"].addRule(new SyntaxRule("Exception",/(try|catch|throw)/));
js网页编辑器SyntaxSet[
"keywords"].addRule(new SyntaxRule("Condition",/(if|else|switch)/));
js网页编辑器SyntaxSet[
"keywords"].addRule(new SyntaxRule("Cycle",/(for|while|do)/));
js网页编辑器SyntaxSet[
"keywords"].addRule(new SyntaxRule("Type",/(int|double|float|void|char)/));
js网页编辑器SyntaxSet[
"keywords"].addRule(new SyntaxRule("Right",/(public|private|protected|static)/));
js网页编辑器SyntaxSet[
"keywords"].addRule(new SyntaxRule("Constant",/(true|false|null|undefined|NaN|Infinity)/));
js网页编辑器SyntaxSet[
"keywords"].addRule(new SyntaxRule("Construct",/(new|delete)/));
js网页编辑器
js网页编辑器js网页编辑器SyntaxSet.add(
new Syntaxes("objects""#FF0000"/[;s.þÿý[]({});,]/));  //词法·对象·红色
js网页编辑器
SyntaxSet["objects"].addRule(new SyntaxRule("Object",/(Array|arguments|Boolean|Date|Error|Function|Object|Number|Math|RegExp|String)/));
js网页编辑器
js网页编辑器js网页编辑器SyntaxSet.add(
new Syntaxes("global""#800000"/[;s.þÿý[]({});,]/));  //词法·系统函数·红色
js网页编辑器
SyntaxSet["global"].addRule(new SyntaxRule("SystemFunc",/(alert|parseFloat|parseInt|eval|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|unescape)/));
js网页编辑器
js网页编辑器
//ß < Ý >
js网页编辑器
SyntaxSet.add(new Syntaxes("tag","#0000ff")); //词法·标签
js网页编辑器
SyntaxSet["tag"].addRule(new SyntaxRule("startTag",/ß[^Ý'"/sýÿþß?!%]+([sý]+[^Ý'"/sýÿþß?!%]+([sý=]('[^']*')|("[^"]*"))?)*[sý]*[/]?Ý/));
js网页编辑器SyntaxSet["tag"].addRule(new SyntaxRule("endTag",/ß/[^Ý'"/sýÿþß?!%]+Ý/));
js网页编辑器
js网页编辑器var subRule = new Syntaxes("sub_tok","#808000",/[ß/]/,/./);
js网页编辑器subRule.addRule(new SyntaxRule("tagName",/w+/));
js网页编辑器SyntaxSet["tag"].rules["startTag"].addSubRule(subRule.rules["tagName"]);
js网页编辑器SyntaxSet["tag"].rules["endTag"].addSubRule(subRule.rules["tagName"]);
js网页编辑器
js网页编辑器var subRule_2 = new Syntaxes("sub_tok_2","#800080",/[Ýýs=+-*//]/);
js网页编辑器subRule_2.addRule(new SyntaxRule("attribute",/w+/));
js网页编辑器SyntaxSet["tag"].rules["startTag"].addSubRule(subRule_2.rules["attribute"]);
js网页编辑器
js网页编辑器SyntaxSet.add(new Syntaxes("String", "#ff00ff", /[s.þÿý[]({});,+-*/=Ý]/));  //词法·字符串·粉色
js网页编辑器SyntaxSet["String"].addRule(new SyntaxRule("String",
js网页编辑器                            /(
'((/')|[^'ÿ])*([^/']|(/'ÿ))')|("((/")|[^"ÿ])*([^/"ÿ]|(/"))")/));
js网页编辑器
js网页编辑器SyntaxSet.add(
new Syntaxes("remarks""#008000")); //词法·注释·绿色
js网页编辑器
SyntaxSet["remarks"].addRule(new SyntaxRule("ShortRemark",///[^ÿ]*/));
js网页编辑器SyntaxSet[
"remarks"].addRule(new SyntaxRule("LongRemark",//*((.**/)|(.*$))/));
js网页编辑器SyntaxSet[
"remarks"].addRule(new SyntaxRule("HTMLRemark",/ß!--(.(?!--Ý))*.--Ý/));
js网页编辑器
js网页编辑器
function RegExprX(exprStr)  
js网页编辑器js网页编辑器
{
js网页编辑器    
this.expr = exprStr;
js网页编辑器}

js网页编辑器
js网页编辑器
function getObjects(src)  
js网页编辑器js网页编辑器
{
js网页编辑器    
var text = src.innerText;
js网页编辑器    
var funs = null;
js网页编辑器    
var funList = new Array();
js网页编辑器
js网页编辑器    
while((funs = text.match(funDef)) != null)
js网页编辑器js网页编辑器    
{
js网页编辑器        
js网页编辑器        
var stIndex = funs.index + funs[0].length;
js网页编辑器        
var bont = 1;
js网页编辑器        
js网页编辑器        
for (var i = stIndex; bont > 0 && i < text.length; i++)        
js网页编辑器js网页编辑器        
{
js网页编辑器            
if (text.charAt(i) == "{") bont ++;
js网页编辑器            
else if (text.charAt(i) == "}") bont--;
js网页编辑器        }

js网页编辑器        
js网页编辑器        funList.push(text.substring(funs.index, i));
js网页编辑器
js网页编辑器        text 
= text.substring(i);
js网页编辑器    }

js网页编辑器    
return funList;
js网页编辑器}

js网页编辑器
js网页编辑器
function getVariables(src) 
js网页编辑器js网页编辑器
{
js网页编辑器    
var text = src.innerText;
js网页编辑器    
var vars = null;
js网页编辑器    
var varList = new Array();
js网页编辑器
js网页编辑器    
while((vars = text.match(assignment)) != null)
js网页编辑器js网页编辑器    
{
js网页编辑器
js网页编辑器        
var stIndex = vars.index + vars[0].length;
js网页编辑器        
var variable = text.substring(vars.index, stIndex);
js网页编辑器        
if (variable.indexOf("."== -1)
js网页编辑器            variable 
= "var " + variable;
js网页编辑器        varList.push(variable);
js网页编辑器
js网页编辑器        text 
= text.substring(stIndex);
js网页编辑器        varList;
js网页编辑器    }

js网页编辑器    
return varList;
js网页编辑器}

js网页编辑器js网页编辑器
var funDef = /function(([sý ]*)|([sý ]+[^sý ]+))(.*)[sý ]*{/;
js网页编辑器
var objDef = /new[sý ]+[^sý $;]+/g;
js网页编辑器
var funCall = /[^+-*/=]+[sý]*(.*)/g;
js网页编辑器
var assignment = /[^=;]+[sý ]*[=][^;Ýß]+/
js网页编辑器
</script>
js网页编辑器
js网页编辑器 
js网页编辑器