语法高亮的控件,自己写很费时间。正好有这样一个开源的控件: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>=!><+-/*%&|^~.}{,;][?:</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]?"""</Begin>
<End>"""</End>
</Span>
<Span name ="String" bold ="false" italic ="false" color ="Green" stopateol ="false">
<Begin>"</Begin>
<End>"</End>
</Span>
<Span name = "String2" bold = "false" italic = "false" color = "Green" stopateol = "false">
<Begin>'</Begin>
<End>'</End>
</Span>
<Span name ="Multiline String" bold ="false" italic ="false" color ="DarkSlateGray" stopateol ="false">
<Begin>[uUrR]?"""</Begin>
<End>"""</End>
</Span>
<Span name ="Multiline String 2" bold ="false" italic ="false" color ="DarkSlateGray" stopateol ="false">
<Begin>[uUrR]?'''</Begin>
<End>'''</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>
<!-- 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>=!><+-/*%&|^~.}{,;][?:</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]?"""</Begin>
<End>"""</End>
</Span>
<Span name ="String" bold ="false" italic ="false" color ="Green" stopateol ="false">
<Begin>"</Begin>
<End>"</End>
</Span>
<Span name = "String2" bold = "false" italic = "false" color = "Green" stopateol = "false">
<Begin>'</Begin>
<End>'</End>
</Span>
<Span name ="Multiline String" bold ="false" italic ="false" color ="DarkSlateGray" stopateol ="false">
<Begin>[uUrR]?"""</Begin>
<End>"""</End>
</Span>
<Span name ="Multiline String 2" bold ="false" italic ="false" color ="DarkSlateGray" stopateol ="false">
<Begin>[uUrR]?'''</Begin>
<End>'''</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>