对于一个规则引擎中的脚本代码编辑器是非常关键的,因为UI控件直接使用对象是规则维护者,关系到用户体验,在选用脚本编辑器的功能时除了满足代码的编辑的基本编辑要求外,功能还需要包含;语法着色,错误提示,代码格式化,代码折叠,自动代码提示,自动补全代码等功能.(目前技术无法做到JS加断点;边调试边运行)

经过众多开源产品的代码编辑器对比与功能测试,ICSharpCode.TextEditor 是JS脚本编辑器最佳选择. 

 

一.语法着色

    JS语法着色XML,对JS关键字进行着色,并可以扩展自指定义关键字着色,

    应用场影:规则引擎中新增加函数或变量等关键字时, 为用户体验更好,可增加自定义关键字着色;

              例:BoardThick 是关键字,那么在JS代码中,以高亮着色加以区分

                   PCB 规则引擎之编辑器(语法着色,错误提示,代码格式化)

<?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>=!&gt;&lt;+-/*%&amp;|^~.}{,;][?:</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>&quot;</Begin>
                <End>&quot;</End>
            </Span>
    
            <Span name = "Character" bold = "false" italic = "false" color = "Sienna" stopateol = "true" escapecharacter="\">
                <Begin>&apos;</Begin>
                <End>&apos;</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>
View Code

相关文章:

  • 2021-09-15
  • 2022-12-23
  • 2022-12-23
  • 2021-11-01
  • 2022-12-23
  • 2021-05-26
  • 2021-10-09
  • 2021-04-22
猜你喜欢
  • 2021-11-03
  • 2021-12-03
  • 2021-12-28
  • 2021-06-02
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案