对于一个规则引擎中的脚本代码编辑器是非常关键的,因为UI控件直接使用对象是规则维护者,关系到用户体验,在选用脚本编辑器的功能时除了满足代码的编辑的基本编辑要求外,功能还需要包含;语法着色,错误提示,代码格式化,代码折叠,自动代码提示,自动补全代码等功能.(目前技术无法做到JS加断点;边调试边运行)
经过众多开源产品的代码编辑器对比与功能测试,ICSharpCode.TextEditor 是JS脚本编辑器最佳选择.
一.语法着色
JS语法着色XML,对JS关键字进行着色,并可以扩展自指定义关键字着色,
应用场影:规则引擎中新增加函数或变量等关键字时, 为用户体验更好,可增加自定义关键字着色;
例:BoardThick 是关键字,那么在JS代码中,以高亮着色加以区分
<?xml version="1.0"?> <!-- syntaxdefinition for JavaScript 2.0 by Svante Lidman --> <SyntaxDefinition name ="JavaScript" extensions = ".js"> <Properties> <Property name="LineComment" value="//"/> </Properties> <Digits name ="Digits" bold ="false" italic ="false" color ="DarkBlue"/> <RuleSets> <RuleSet ignorecase = "false"> <Delimiters>=!><+-/*%&|^~.}{,;][?:</Delimiters> <Span name ="LineComment" bold ="false" italic ="false" color ="DarkSlateGray" stopateol ="true"> <Begin>//</Begin> </Span> <Span name ="BlockComment" bold ="false" italic ="false" color ="DarkSlateGray" stopateol ="false"> <Begin>/*</Begin> <End>*/</End> </Span> <Span name ="String" bold ="false" italic ="false" color ="Sienna" stopateol ="false" escapecharacter="\"> <Begin>"</Begin> <End>"</End> </Span> <Span name = "Character" bold = "false" italic = "false" color = "Sienna" stopateol = "true" escapecharacter="\"> <Begin>'</Begin> <End>'</End> </Span> <KeyWords name ="JavaScriptKeyWords" bold="false" italic = "false" color = "Blue"> <Key word = "break" /> <Key word = "continue" /> <Key word = "delete" /> <Key word = "else" /> <Key word = "for" /> <Key word = "function" /> <Key word = "if" /> <Key word = "in" /> <Key word = "new" /> <Key word = "return" /> <Key word = "this" /> <Key word = "typeof" /> <Key word = "var" /> <Key word = "void" /> <Key word = "while" /> <Key word = "with" /> <!--ECMAScript keywords--> <!-- Reserved for future use (some are already used in some Javascript Engines) --> <Key word = "abstract" /> <Key word = "boolean" /> <Key word = "byte" /> <Key word = "case" /> <Key word = "catch" /> <Key word = "char" /> <Key word = "class" /> <Key word = "const" /> <Key word = "debugger" /> <Key word = "default" /> <Key word = "do" /> <Key word = "double" /> <Key word = "enum" /> <Key word = "export" /> <Key word = "extends" /> <Key word = "final" /> <Key word = "finally" /> <Key word = "float" /> <Key word = "goto" /> <Key word = "implements" /> <Key word = "import" /> <Key word = "instanceof" /> <Key word = "int" /> <Key word = "interface" /> <Key word = "long" /> <Key word = "native" /> <Key word = "package" /> <Key word = "private" /> <Key word = "protected" /> <Key word = "public" /> <Key word = "short" /> <Key word = "static" /> <Key word = "super" /> <Key word = "switch" /> <Key word = "synchronized" /> <Key word = "throw" /> <Key word = "throws" /> <Key word = "transient" /> <Key word = "try" /> <Key word = "volatile" /> </KeyWords> <KeyWords name ="JavaScriptIntrinsics" bold="false" italic = "false" color = "Blue"> <Key word = "Array" /> <Key word = "Boolean" /> <Key word = "Date" /> <Key word = "Function" /> <Key word = "Global" /> <Key word = "Math" /> <Key word = "Number" /> <Key word = "Object" /> <Key word = "RegExp" /> <Key word = "String" /> </KeyWords> <KeyWords name ="JavaScriptLiterals" bold="false" italic = "false" color = "Blue"> <Key word = "false" /> <Key word = "null" /> <Key word = "true" /> <Key word = "NaN" /> <Key word = "Infinity" /> </KeyWords> <KeyWords name ="JavaScriptLiterals" bold="false" italic = "false" color = "Blue"> <Key word = "" /> </KeyWords> <KeyWords name ="JavaScriptGlobalFunctions" bold="false" italic = "false" color = "Blue"> <Key word = "eval" /> <Key word = "parseInt" /> <Key word = "parseFloat" /> <Key word = "escape" /> <Key word = "unescape" /> <Key word = "isNaN" /> <Key word = "isFinite" /> </KeyWords> <KeyWords name ="JavaScriptUserFunctions" bold="false" italic = "false" color = "Blue"> <Key word = "console" /> <Key word = "JSON" /> <Key word = "console.log" /> <Key word = "console.alert" /> <Key word = "console.prompt" /> <Key word = "console.print" /> </KeyWords> </RuleSet> </RuleSets> </SyntaxDefinition>