在 SciTE 中启用 CoffeeScript 词法分析器?
Posted
技术标签:
【中文标题】在 SciTE 中启用 CoffeeScript 词法分析器?【英文标题】:Enabling CoffeeScript lexer in SciTE? 【发布时间】:2012-01-10 16:49:38 【问题描述】:我注意到 SciTE 源代码中有一个LexCoffeeScript.cxx
文件;但是,SciTE 的 Languages 菜单中似乎没有 CoffeeScript 菜单选项。
手动添加选项没有帮助 - 仍然没有任何语法着色。
有没有办法启用内置的词法分析器(而不是求助于外部的)?
【问题讨论】:
【参考方案1】:显然,CoffeeScript 词法分析器是在 Scintilla 中编译的,但不被 SciTE 使用。我的意思是没有coffeescript.properties
文件或任何其他引用词法分析器的文件。您尝试创建自己的文件并将您使用的文件扩展名的词法分析器设置为coffeescript
:
# Define SciTE settings for Coffeescript files.
file.patterns.coffeescript=*.coffee
filter.coffeescript=Coffeescript (coffee)|$(file.patterns.coffeescript)|
lexer.$(file.patterns.coffeescript)=coffeescript
...
然后您将定义词法分析器支持的关键字、着色样式和其他内容 - 查看其来源。您可以在cpp.properties
中获得灵感,例如(C/C++ 和类似语言的词法分析器称为cpp
。)以下是支持的词法状态:
val SCE_COFFEESCRIPT_DEFAULT=0
val SCE_COFFEESCRIPT_COMMENT=1
val SCE_COFFEESCRIPT_COMMENTLINE=2
val SCE_COFFEESCRIPT_COMMENTDOC=3
val SCE_COFFEESCRIPT_NUMBER=4
val SCE_COFFEESCRIPT_WORD=5
val SCE_COFFEESCRIPT_STRING=6
val SCE_COFFEESCRIPT_CHARACTER=7
val SCE_COFFEESCRIPT_UUID=8
val SCE_COFFEESCRIPT_PREPROCESSOR=9
val SCE_COFFEESCRIPT_OPERATOR=10
val SCE_COFFEESCRIPT_IDENTIFIER=11
val SCE_COFFEESCRIPT_STRINGEOL=12
val SCE_COFFEESCRIPT_VERBATIM=13
val SCE_COFFEESCRIPT_REGEX=14
val SCE_COFFEESCRIPT_COMMENTLINEDOC=15
val SCE_COFFEESCRIPT_WORD2=16
val SCE_COFFEESCRIPT_COMMENTDOCKEYWORD=17
val SCE_COFFEESCRIPT_COMMENTDOCKEYWORDERROR=18
val SCE_COFFEESCRIPT_GLOBALCLASS=19
val SCE_COFFEESCRIPT_STRINGRAW=20
val SCE_COFFEESCRIPT_TRIPLEVERBATIM=21
val SCE_COFFEESCRIPT_HASHQUOTEDSTRING=22
val SCE_COFFEESCRIPT_COMMENTBLOCK=22
val SCE_COFFEESCRIPT_VERBOSE_REGEX=23
val SCE_COFFEESCRIPT_VERBOSE_REGEX_COMMENT=24
所有.properties
文件均由SciTEGlobal.properties
中的import *
行自动加载。您还可以将Coffeescript|coffee||\
添加到menu.language
以在Languages
和/或*.coffee
到source.files
中获取新菜单项以在“文件打开”对话框中查看扩展名。
奇怪的是作者没有提供.properties
文件和词法分析器。可以使用 javascript 词法分析器代替。您可以在SciTE mailing list 中询问。
--- 费达
【讨论】:
【参考方案2】:Ferda 的回答是正确的。
这是一个示例 coffeescript.properties 文件,可以帮助您入门并节省一些时间...
# Define SciTE settings for Coffeescript files.
file.patterns.coffeescript=*.coffee
filter.coffeescript=Coffeescript (coffee)|$(file.patterns.coffeescript)|
lexer.$(file.patterns.coffeescript)=coffeescript
keywordclass.coffeescript=abstract boolean break byte case catch char class \
const continue debugger default delete do double else enum export extends \
final finally float for function goto if implements import in instanceof \
int interface long native new package private protected public \
return short static super switch synchronized this throw throws \
transient try typeof var void volatile while with
keywords.$(file.patterns.coffeescript)=$(keywordclass.coffeescript)
keywordclass2.coffeescript=$
keywords2.$(file.patterns.coffeescript)=$(keywordclass2.coffeescript)
# White space
style.coffeescript.0=fore:#808080
# Comment: ### ###
style.coffeescript.1=$(colour.code.comment.box),$(font.code.comment.box)
# Line Comment: #
style.coffeescript.2=$(colour.code.comment.line),$(font.code.comment.line)
# Doc comment: block comments beginning with /** or /*!
style.coffeescript.3=$(colour.code.comment.doc),$(font.code.comment.doc)
# Number
style.coffeescript.4=$(colour.number)
# Keyword
style.coffeescript.5=$(colour.keyword),bold
# Double quoted string
style.coffeescript.6=$(colour.string)
# Single quoted string
style.coffeescript.7=$(colour.char)
# UUIDs (only in IDL)
style.coffeescript.8=fore:#804080
# Preprocessor
style.coffeescript.9=$(colour.preproc)
# Operators
style.coffeescript.10=fore:#FF6600,bold
# Identifiers
style.coffeescript.11=fore:#FF1493
# End of line where string is not closed
style.coffeescript.12=fore:#000000,$(font.monospace),back:#E0C0E0,eolfilled
# Verbatim strings
style.coffeescript.13=fore:#007F00,$(font.monospace),back:#E0FFE0,eolfilled
# Regular expressions for JavaScript
style.coffeescript.14=fore:#3F7F3F,$(font.monospace),back:#E0F0FF,eolfilled
# Doc Comment Line: line comments beginning with /// or //!.
style.coffeescript.15=$(colour.code.comment.doc),$(font.code.comment.doc)
# Keywords2
style.coffeescript.16=fore:#B00040
# Comment keyword
style.coffeescript.17=fore:#3060A0,$(font.code.comment.doc)
# Comment keyword error
style.coffeescript.18=fore:#804020,$(font.code.comment.doc)
# Raw strings
style.coffeescript.20=$(colour.string),back:#FFF3FF,eolfilled
# Triple-quoted strings
style.coffeescript.21=$(font.monospace),fore:#007F00,back:#E0FFE0,eolfilled
# Hash-quoted strings for Pike
style.coffeescript.22=$(font.monospace),fore:#007F00,back:#E7FFD7,eolfilled
# Verbose Regex
style.coffeescript.23=fore:#659900
# Verbose Regex Comment
style.coffeescript.24=$(colour.code.comment.doc)
【讨论】:
【参考方案3】:您需要将此行放入您的SciTEGlobal.properties
文件中。点击Open Global Options File
可以在SciTE的Options菜单中打开。
import lexers/[dir]
其中[dir]
是LexCoffeeScript.cxx
文件在/usr/share/scite/
的lexers 目录中的位置。
更新
我自己试过这个,我安装的 SciTE 没有任何 CoffeeScript cxx 文件,所以我从 here 下载了 scintillua 包,它与 lua
coffeescript 词法分析器打包在一起。按照上面的说明安装它,它工作正常。
【讨论】:
抱歉,您要从 SciTE 导入 C++ 文件?你确定这是这样做的吗? @Mehrdad 用我所做的更新了我的答案。我在源代码中找不到.cxx
文件。
是的,它不起作用(或没有多大意义)。你自己试过吗?
您是否注意到我提出的关于启用内置 词法分析器而不是不是 外部词法分析器的问题?
我做到了,但我无法解决:(这是我能找到的唯一资源:scintilla.org/SciTELexer.html以上是关于在 SciTE 中启用 CoffeeScript 词法分析器?的主要内容,如果未能解决你的问题,请参考以下文章
导轨 3.1。如何防止 Rails 使用 CoffeeScript?