想知道SciTE在读入一个文件时做了什么?

3 views
Skip to first unread message

mustang

unread,
Jun 22, 2008, 6:27:57 AM6/22/08
to SciTE研究 - 中文小组
近来学习SciTE真是辛苦,很多东西不理解。
我以为,SciTE会根据配置文件中的"lexer.(文件名模板)=某个lexer"来
做很多东西。
我做了个试验:
在python.properties中:
file.patterns.py=*.py;*.pyw为:file.patterns.py=*.pyw
加上:lexer.*.py=vbscript
保存python.properties并退出SciTE。
然后用SciTE打开一个“demo.py",发现里面的python的关键字果然没有高亮。
最后,我在“demo.py"里键入一些vbscript独有的关键字(如dim,step等),但是却没有被高亮,我原以为*.py会被SciTE认
为是vbscript的文件。
到底lexer可以影响到哪些东西呢?真是头晕。

Danwu Hou

unread,
Jun 22, 2008, 7:12:10 AM6/22/08
to scit...@googlegroups.com
是挺复杂的,我觉得这次的原因是lexer只是定义了语言的匹配模式而已,但具体关键字的定义是在properties里面设定的,lexer会根据完整的关键字列表来进行语法高亮显示。我是这样的观点,或许你可以更多的看一些lexer的资料或者scintilla有关lexer的代码
如果我没猜错的,假如你在demo.py中写
function foo
 ' FOO FUNCTION
end function
应该会在左边出现一个折叠图标(可以关闭、打开foo函数),表明目前的确是在按照vbscript的lexer在解析,只不过python.properties里面的关键词仍然是python的那些,所以对dim, step不会有反应。

2008/6/22 mustang <musta...@sohu.com>:

mustang

unread,
Jun 22, 2008, 11:51:22 PM6/22/08
to SciTE研究 - 中文小组
我在demo.py中写
function foo
' FOO FUNCTION
end function
发现左边没有出现一个折叠图标,而且即便在demo.vbs中写
function foo
' FOO FUNCTION
end function
左边也没有出现一个折叠图标,所以SciTE应该是根据缩进来对vbscript进行折叠的。
不过我发现一个有趣的东西,原来这两种写法是不等价的:
在python.properties中:
(1)file.patterns.py=*.py;*.pyw
lexer.$(file.patterns.py)=python
(2)file.patterns.py=*.pyw
lexer.$(file.patterns.py)=python
lexer.*.py=python
第(1)种:SciTE会对*.py里的python的关键字高亮。
第(2)种:SciTE不会对*.py里的python的关键字高亮。
为什么呢?SciTEDoc.htm里又没有说明,怎么学啊!
“如果你真的懂了这些代码你会发现 SciTE 全身都在闪耀着光芒!”,可
我怎么能懂呢?
希望大家多多交流啊!
Reply all
Reply to author
Forward
0 new messages