引刀成一快

导航

 
   刚才辛苦写了半个小时,居然没有保存,郁闷啊。这是一个月之前做的工作,希望能够让需要的人省点时间。这几个月一直在做一个逻辑编辑器,生成的是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>

posted on 2005-10-09 11:07  tsbob  阅读(3140)  评论(1编辑  收藏  举报