,NEGATIVE_INFINITY,POSITIVE_INFINITY"); putMethods(methodList,obj,"toString,toLocalString,toFixed,toExponential,toPrecision");
//基本RegExp方法 putMethods(methodList,obj,"global,ignoreCase,lastIndex,multiline,source,exec,test");
//基本String方法 putMethods(methodList,obj,"charAt,charCodeAt,contact,indexOf,lastIndexOf,match,replace,search,slice,split,substring,substr,toLowerCase,toString,toUpperCase,valueOf,fromCharCode"); putMethods(methodList,obj,"anchor,big,blink,bold,fixed,fontcolor,fontsize,italics,link,small,strike,sub,sup");
} for (each in obj) { methodList.pushDistinct(each); } methodList.sort();
if (methodList.length > 0) { methods.options.length = 0; for (var i = 0; i < methodList.length; i++) { methods.options.add(new Option(methodList[i])); } if (methods.options.length > 10) { methods.size = 10; } else { methods.size = methods.options.length; } methods.style.top = oSel.offsetTop; methods.style.left = oSel.offsetLeft; methods.style.display = ""; methods.options[0].selected = true; methods.focus(); } } catch(e){} }
function SelectMethod() { var src = event.srcElement; if(event.keyCode == 13) { SelMethod(src); }
if(event.keyCode == 27 || event.keyCode == 8 || event.keyCode == 32) { src.style.display = "none"; editbox.focus(); } }
function SelMethod(src) { clipboardData.setData('text',src.options[src.selectedIndex].text); editbox.focus(); editbox.document.execCommand('paste'); src.style.display = "none"; getCursorPosition(); } function getPos(text) //计算行数、列数 { var rows = 1; var cols = 1; var idx = 0; var subText = text; while((idx = subText.indexOf("\n")) != -1) { subText = subText.substring(idx + 1); rows++; } return new Array(rows, subText.length + 1); } function getNullRows(src,oSel) //计算空行 { var rows = 0;
var offsetEnd = src.document.selection.createRange();
var oldTop = 2; var oldLeft = 2;
while(1) { offsetEnd.moveToPoint(oSel.offsetLeft, oSel.offsetTop); offsetEnd.moveStart("character",-1-rows);
if (offsetEnd.text.length > 0 || offsetEnd.offsetTop == oldTop && offsetEnd.offsetLeft == oldLeft) { break; }
rows ++; oldTop = offsetEnd.offsetTop; oldLeft = offsetEnd.offsetLeft; } return rows; } function getCursorPosition() { var src = event.srcElement; var offset = src.document.selection.createRange(); var oSel = document.selection.createRange();
var textLength = src.innerText.length;
offset.moveToPoint(oSel.offsetLeft, oSel.offsetTop); offset.moveStart("character", -99999); //src.document.execCommand("ForeColor",false,"#ff0000"); var rowSpans = offset.getClientRects();
var pos = getPos(offset.text); var charCodes = offset.text.length; //字符总数 var chars = offset.text.replace(/\r\n/g,"").length + 1; //字符
var extRows = getNullRows(src,oSel); if(extRows > 0) { pos[0] += extRows; pos[1] = 1; } window.status = "行: " + pos[0] +", 列: " + pos[1] + ", 第 " + chars + " 个字符" + " ("+ oSel.offsetTop +","+ oSel.offsetLeft +")"; return charCodes; }
///词法解析过程................................................................................ ///............................................................................................ ///............................................................................................
var SyntaxSet = new Array(); //词法规则集合 SyntaxSet.All = new Array();
SyntaxSet.parse = function(token) //针对token返回rule { for (var i = 0; i < this.All.length; i++) { var syntaxes = this.All[i]; for (var j = 0; j < syntaxes.rules.All.length; j++) { if (syntaxes.rules.All[j].test(token)) { syntaxes.rules.All[j].color = syntaxes.color; return syntaxes.rules.All[j]; } } }
return null; }
SyntaxSet.add = function(syntaxes) { if(this[syntaxes.name] != null) return; this[syntaxes.name] = syntaxes; this.All.push(syntaxes); }
function Syntaxes(name, color, cons) //词法规则组(同组规则用一种颜色标记) { this.name = name; //规则组名称 this.color = color; //标记该语法的颜色 this.rules = new Array(); //语法规则(以次序决定优先级) this.rules.All = new Array(); this.cons = cons; //边界约束
Syntaxes.prototype.addRule = function(rule) { if(this.rules[rule.name] != null) return; this.rules[rule.name] = rule; this.rules.All.push(rule); } }
function SyntaxRule(name, regExp) //词法规则 { this.name = name; //规则名称 this.expr = regExp; //规则描述 (正则表达式) SyntaxRule.prototype.test = function(token) { return this.expr.test(token); } }
function RegExprX(exprStr) //扩展正则表达式的功能,支持定义嵌套 { this.expr = exprStr; } RegExprX.prototype.getPattern = function(tag) //获取正则表达式对象 { if (tag == null) return new RegExp(this.expr); else return new RegExp(this.expr, tag); } RegExprX.prototype.concat = function(expr, rule) //连接两个正则表达式串 { if (rule == null) this.expr += expr; //直接连接 else if (rule == "union") //联合 this.expr = "(" + this.expr + ")" + "|" + "(" + expr + ")"; else if (rule == "cons") //约束 this.expr = this.expr + "(?=" + expr + ")"; return this.expr; }
//为保证正确计算偏移量需要替换回车\n\r为\xff SyntaxSet.add(new Syntaxes("keywords", "#0000ff", /[\s\.\xfe\xff\xfd\(\{\}\)\;\,]/)); //词法?关键词?蓝色 SyntaxSet["keywords"].addRule(new SyntaxRule("Function",/function/)); SyntaxSet["keywords"].addRule(new SyntaxRule("Variable",/var/)); SyntaxSet["keywords"].addRule(new SyntaxRule("Return",/return/)); SyntaxSet["keywords"].addRule(new SyntaxRule("Exception",/(try|catch|throw)/)); SyntaxSet["keywords"].addRule(new SyntaxRule("Condition",/(if|else|switch)/)); SyntaxSet["keywords"].addRule(new SyntaxRule("Cycle",/(for|while|do)/)); SyntaxSet["keywords"].addRule(new SyntaxRule("Type",/(int|double|float|void|char)/)); SyntaxSet["keywords"].addRule(new SyntaxRule("Right",/(public|private|protected|static)/)); SyntaxSet["keywords"].addRule(new SyntaxRule("Constant",/(null|undefined|NaN|Infinity)/)); SyntaxSet["keywords"].addRule(new SyntaxRule("Construct",/(new|delete)/));
SyntaxSet.add(new Syntaxes("objects", "#FF0000", /[\s\.\xfe\xff\xfd\(\{\}\)\;\,]/)); //词法?对象?红色 SyntaxSet["objects"].addRule(new SyntaxRule("Object",/(Array|arguments|Boolean|Date|Error|Function|Object|Number|Math|RegExp|String)/));
SyntaxSet.add(new Syntaxes("global", "#800000", /[\s\.\xfe\xff\xfd\(\{\}\)\;\,]/)); //词法?系统函数?红色 SyntaxSet["global"].addRule(new SyntaxRule("SystemFunc",/(alert|parseFloat|parseInt|eval|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|unescape)/));
SyntaxSet.add(new Syntaxes("String", "#ff00ff", /[\s\.\xfe\xff\xfd\(\{\}\)\;\,\+\-\*\/]/)); //词法?字符串?粉色 SyntaxSet["String"].addRule(new SyntaxRule("String", /('((\\\')|[^\xff\'])*([^\\\']|(\\\'))')|("((\\\")|[^\xff\"])*([^\\\"]|(\\\"))")/));
SyntaxSet.add(new Syntaxes("remarks", "#008000")); //词法?注释?绿色 SyntaxSet["remarks"].addRule(new SyntaxRule("ShortRemark",/\/\/[^\xff]*/)); SyntaxSet["remarks"].addRule(new SyntaxRule("LongRemark",/\/\*((.*\*\/)|(.*$))/));
function Grammars() //语法规则 { } </script>
上一页 [1] [2] 没有相关教程
|