使用支持语法高亮的控件

   刚才辛苦写了半个小时,居然没有保存,郁闷啊。这是一个月之前做的工作,希望能够让需要的人省点时间。这几个月一直在做一个逻辑编辑器,生成的是python文件,用delphi写的,语法高亮使用的synedit。最近Level Design部门有些新的需求。原来的编辑器使用xml+schema存储数据,速度快,开发效率高,但是对于数值关联比较多的情况,查找,更新,就很繁琐了。因此这次决定使用数据库,用hibernate来做O/R映射,因为是桌面程序,当然是采用c#来开发了。
  语法高亮的控件,自己写很费时间。正好有这样一个开源的控件: http://www.icsharpcode.net/OpenSource/SD/中的ICSharpCode.TextEditor。最早是在CodeLib.net中看到它的应用,因为codelib.net编辑器支持java,c++,c#等的语法
高亮,我想改改能够用于其他语言,把sharpdevelop的代码下载下来一看。果然如此!首先需要先下载一个源代码包,找到icsharpcode.texteditor的工程,在resource files中添加一个python-mode.xshd文件,把build action设为EmbedAsResource,同时需要修改syntaxmodes.xml,重新编译。这样就得到了一个ICSharpCode.TextEditor.dll。python-mode.xshd是一个xml格式的语法文件,我是从linux下的某个编辑器的配置文件下刨出来的,EditPlus的网站也提供很多语法配置文件,这些拿来都不能直接用的,格式不一样,需要参考ICSharpCode.TextEditor本身带的一些语法文件进行修改。
  编译完成后,在vs.net的工具箱里面添加一个引用,就会得到这个控件ICSharpCode.TextEditor.TextEditorControl
很简单,下面是我改写的python-mode.xshd文件
<? xml version="1.0" ?>
<!--  syntaxdefinition for Python by tsbob  -->

< SyntaxDefinition  name  ="Python"  extensions  = ".py" >
    
    
< Properties >
        
< Property  name ="LineComment"  value ="#" />
    
</ Properties >

    
< Digits  name  ="Digits"  bold  ="false"  italic  ="false"  color  ="DarkRed" />

    
< RuleSets >
        
< RuleSet  ignorecase  = "false" >
            
< Delimiters > =! &gt;&lt; +-/*% &amp; |^~.}{,;][?: </ Delimiters >
            
            
< Span  name  ="LineComment"  bold  ="false"  italic  ="false"  color  ="DarkMagenta"  stopateol  ="true" >
                
< Begin > # </ Begin >
            
</ Span >
                    
            
< Span  name  ="BlockComment"  bold  ="false"  italic  ="false"  color  ="DarkSlateGray"  stopateol  ="true" >
                
< Begin > [uUrR]? &quot;&quot;&quot; </ Begin >
                
< End > &quot;&quot;&quot; </ End >
            
</ Span >
            
            
< Span  name  ="String"  bold  ="false"  italic  ="false"  color  ="Green"  stopateol  ="false" >
                
< Begin > &quot; </ Begin >
                
< End > &quot; </ End >
            
</ Span >
    
            
< Span  name  = "String2"  bold  = "false"  italic  = "false"  color  = "Green"  stopateol  = "false" >
                
< Begin > &apos; </ Begin >
                
< End > &apos; </ End >
            
</ Span >
            
            
< Span  name  ="Multiline String"  bold  ="false"  italic  ="false"  color  ="DarkSlateGray"  stopateol  ="false" >
                
< Begin > [uUrR]? &quot;&quot;&quot; </ Begin >
                
< End > &quot;&quot;&quot; </ End >
            
</ Span >
            
            
< Span  name  ="Multiline String 2"  bold  ="false"  italic  ="false"  color  ="DarkSlateGray"  stopateol  ="false" >
                
< Begin > [uUrR]? &apos;&apos;&apos; </ Begin >
                
< End > &apos;&apos;&apos; </ End >
            
</ Span >
            
< KeyWords  name  ="PythonKeyWords"  bold ="false"  italic  = "false"  color  = "DarkOrange" >
                
< Key  word  =  "import"   />
< Key  word  =  "from"   />
< Key  word  =  "as"   />
< Key  word  =  "False"   />
< Key  word  =  "None"   />
< Key  word  =  "True"   />
< Key  word  =  "def"   />
< Key  word  =  "class"   />
< Key  word  =  "return"   />
< Key  word  =  "and"   />
< Key  word  =  "assert"   />
< Key  word  =  "break"   />
< Key  word  =  "continue"   />
< Key  word  =  "del"   />
< Key  word  =  "elif"   />
< Key  word  =  "else"   />
< Key  word  =  "except"   />
< Key  word  =  "exec"   />
< Key  word  =  "finally"   />
< Key  word  =  "for"   />
< Key  word  =  "global"   />
< Key  word  =  "if"   />
< Key  word  =  "in"   />
< Key  word  =  "is"   />
< Key  word  =  "lambda"   />
< Key  word  =  "not"   />
< Key  word  =  "or"   />
< Key  word  =  "pass"   />
< Key  word  =  "print"   />
< Key  word  =  "raise"   />
< Key  word  =  "try"   />
< Key  word  =  "while"   />
< Key  word  =  "yield"   />
            
</ KeyWords >             
            
< KeyWords  name  ="PythonException"  bold ="false"  italic  = "false"  color  = "Blue" >
                
< Key  word  =  "ArithmeticError"   />
< Key  word  =  "AssertionError"   />
< Key  word  =  "AttributeError"   />
< Key  word  =  "EnvironmentError"   />
< Key  word  =  "EOFError"   />
< Key  word  =  "Exception"   />
< Key  word  =  "FloatingPointError"   />
< Key  word  =  "ImportError"   />
< Key  word  =  "IndentationError"   />
< Key  word  =  "IndexError"   />
< Key  word  =  "IOError"   />
< Key  word  =  "KeyboardInterrupt"   />
< Key  word  =  "KeyError"   />
< Key  word  =  "LookupError"   />
< Key  word  =  "MemoryError"   />
< Key  word  =  "NameError"   />
< Key  word  =  "NotImplementedError"   />
< Key  word  =  "OSError"   />
< Key  word  =  "OverflowError"   />
< Key  word  =  "ReferenceError"   />
< Key  word  =  "RuntimeError"   />
< Key  word  =  "StandardError"   />
< Key  word  =  "StopIteration"   />
< Key  word  =  "SyntaxError"   />
< Key  word  =  "SystemError"   />
< Key  word  =  "SystemExit"   />
< Key  word  =  "TabError"   />
< Key  word  =  "TypeError"   />
< Key  word  =  "UnboundLocalError"   />
< Key  word  =  "UnicodeDecodeError"   />
< Key  word  =  "UnicodeEncodeError"   />
< Key  word  =  "UnicodeError"   />
< Key  word  =  "UnicodeTranslateError"   />
< Key  word  =  "ValueError"   />
< Key  word  =  "WindowsError"   />
< Key  word  =  "ZeroDivisionError"   />
            
</ KeyWords >             
            
< KeyWords  name  = "AccessKeywords"  bold ="true"  italic ="false"  color ="Black" >
                
< Key  word  = "self"   />
            
</ KeyWords >
            
            
< KeyWords  name  = "GlobalKeywords"  bold ="true"  italic ="false"  color ="DarkCyan" >
                
< Key  word  =  "abs"   />
< Key  word  =  "apply"   />
< Key  word  =  "basestring"   />
< Key  word  =  "bool"   />
< Key  word  =  "buffer"   />
< Key  word  =  "callable"   />
< Key  word  =  "chr"   />
< Key  word  =  "classmethod"   />
< Key  word  =  "cmp"   />
< Key  word  =  "coerce"   />
< Key  word  =  "compile"   />
< Key  word  =  "complex"   />
< Key  word  =  "delattr"   />
< Key  word  =  "dict"   />
< Key  word  =  "dir"   />
< Key  word  =  "divmod"   />
< Key  word  =  "enumerate"   />
< Key  word  =  "eval"   />
< Key  word  =  "execfile"   />
< Key  word  =  "file"   />
< Key  word  =  "filter"   />
< Key  word  =  "float"   />
< Key  word  =  "getattr"   />
< Key  word  =  "globals"   />
< Key  word  =  "hasattr"   />
< Key  word  =  "hash"   />
< Key  word  =  "hex"   />
< Key  word  =  "id"   />
< Key  word  =  "input"   />
< Key  word  =  "int"   />
< Key  word  =  "intern"   />
< Key  word  =  "isinstance"   />
< Key  word  =  "issubclass"   />
< Key  word  =  "iter"   />
< Key  word  =  "len"   />
< Key  word  =  "list"   />
< Key  word  =  "locals"   />
< Key  word  =  "long"   />
< Key  word  =  "map"   />
< Key  word  =  "max"   />
< Key  word  =  "min"   />
< Key  word  =  "object"   />
< Key  word  =  "oct"   />
< Key  word  =  "open"   />
< Key  word  =  "ord"   />
< Key  word  =  "pow"   />
< Key  word  =  "property"   />
< Key  word  =  "range"   />
< Key  word  =  "raw_input"   />
< Key  word  =  "reduce"   />
< Key  word  =  "reload"   />
< Key  word  =  "repr"   />
< Key  word  =  "round"   />
< Key  word  =  "setattr"   />
< Key  word  =  "slice"   />
< Key  word  =  "staticmethod"   />
< Key  word  =  "str"   />
< Key  word  =  "sum"   />
< Key  word  =  "super"   />
< Key  word  =  "tuple"   />
< Key  word  =  "type"   />
< Key  word  =  "unichr"   />
< Key  word  =  "unicode"   />
< Key  word  =  "vars"   />
< Key  word  =  "xrange"   />
< Key  word  =  "zip"   />
            
</ KeyWords >
            
            
< KeyWords  name  = "NameSpaces"  bold ="true"  italic ="false"  color ="Blue" >
                
< Key  word  = "import"   />
                
< Key  word  = "from"   />
                
< Key  word  =  "__name__"   />
                
< Key  word  =  "__import__"   />
                
< Key  word  =  "__debug__"   />
            
</ KeyWords >     
        
</ RuleSet >
    
</ RuleSets >
    
</ SyntaxDefinition >

你可能感兴趣的:(使用)