闪烁图标 闪烁

Scintilla文档

NH最新编辑时间2020年3月29日

Scintilla的内部设计的概述
有关使用Scintilla的一些注意事项
如何在Windows上使用Scintilla Edit控件
在Windows上使用来自C ++的Scintilla的简单示例
使用Visual Basic中的Scintilla的一个简单示例
Bait是在GTK上使用Scintilla的一个很小的样本
ScintillaTest是更完整的GTK示例,可用于查找错误或为新功能创建原型。
有关如何编写词法分析器的详细说明,包括对folding的讨论
如何在容器中实现词法分析器
如何实现折叠
词法和折叠入门指南如果您想为Scintilla贡献代码,但不是强制性的,Scintilla和SciTE中使用
编码风格值得遵循。

介绍

Windows版本的Scintilla是Windows控件。这样,它的主要编程接口就是通过Windows消息。Scintilla的早期版本模拟了标准Windows Edit和RichEdit控件定义的许多API,但是现在不赞成使用这些API,而倾向于Scintilla自己的,更一致的API。除了执行普通Edit控件操作的消息外,Scintilla还允许控制语法样式,折叠,标记,自动完成和调用提示。

GTK版本还使用与Windows版本类似的方式使用消息。这与正常的GTK做法不同,但使它更易于快速实施。

Scintilla还使用Cocoa在OS X和Qt上进行构建,并遵循这些平台的约定。

Scintilla在Windows上仅提供有限的实验支持,支持从右到左的语言,如阿拉伯语和希伯来语。尽管这些语言的文本可能看起来正确,但是与其他编辑器一样,与该文本的交互可能无法正常工作。

本文档描述了Scintilla使用的各个消息和通知。它没有描述如何将它们链接在一起以形成有用的编辑器。目前,弄清楚如何使用Scintilla进行开发的最好方法是查看SciTE如何使用它。SciTE行使Scintilla的大部分设施。

在下面的描述中,消息被描述为带有零个,一个或两个参数的函数调用。这两个参数是Windows程序员的标准wParamlParam熟悉的。这些参数是足以容纳指针的整数,并且返回值也是足以容纳指针的整数。尽管命令仅使用描述的参数,但无论Scintilla是否使用它们,所有消息都有两个参数,因此强烈建议将所有未使用的参数都设置为0。这样可以在将来增强消息而又不会破坏现有代码。常见的参数类型为:

bool 参数期望的值为0,false值为1 true
int 参数是32位或64位带符号整数,具体取决于平台。等同于intptr_t
position 文档中的位置和长度。等同于intptr_t
line 文档中的行号。等同于intptr_t
const char * 参数指向要传递给Scintilla但未经修改的文本。文本可以是零终止的,也可以是其他参数指定字符数,说明将使这一点变得清楚。
char * 参数指向Scintilla将用文本填充的文本缓冲区。在某些情况下,另一个参数将告诉Scintilla缓冲区大小。在其他情况下,必须确保缓冲区足够大以容纳请求的文本。如果传递了NULL指针(0),则对于SCI_ *调用,将返回应分配的长度,不包括任何终止NUL。某些调用(标记为“ NUL终止”)将NUL字符添加到结果中,而其他调用则不这样做:通常处理两种类型,分配比所指示的更多的字节并将其设置为NUL。
pointer 内存地址。在某些情况下,这是指向Scintilla中的char序列的指针,该序列仅在有限的时间内可用。等效于void *。
colour 使用RGB格式(红色,绿色,蓝色)设置颜色。每种颜色的强度设置为0到255。如果您有三种强度,则它们的组合为:(绿色<< 8)| (蓝色<< 16)。如果将所有强度设置为255,则颜色为白色。如果将所有强度设置为0,则颜色为黑色。设置颜色时,您是在请求。您将获得的取决于系统的功能和当前的屏幕模式。
alpha 使用alpha值设置半透明。Alpha范围从完全透明的0(SC_ALPHA_TRANSPARENT)到不透明的255(SC_ALPHA_OPAQUE)。值256(SC_ALPHA_NOALPHA)是不透明的,并且使用的代码不支持alpha,因此可能更快。并非所有平台都支持半透明,只有Scintilla的某些功能实现了半透明。大多数功能的默认alpha值为SC_ALPHA_NOALPHA。
<unused> 这是一个未使用的参数。将其设置为0将确保与将来的增强功能兼容。

Lexilla

对于Scintilla 5.0,词法分析器将拆分为一个单独的Lexilla库。Scintilla将负责GUI并与Lexilla一起调用词法分析器,并提供词法分析器。为了使用Scintilla 4.x朝着这个方向努力,第一步是允许构建Lexilla,但还包括Scintilla中的词法分析器。

Lexilla是作为共享库和静态库构建的,应用程序可以选择链接到另一个。

要构建Lexilla,请在lexilla / src目录中,运行make(对于gcc或clang)
make
或nmake for MSVC
nmake -f lexilla.mak

Lexilla遵循外部lexer协议, 因此可以由支持该协议的应用程序加载。由于该协议仅支持对象词法分析器,CreateLexer(const char *name) 因此公开了一个附加功能,该功能将为任何对象词法分析器或函数词法分析器创建一个词法分析器对象(ILexer5 *)。

通过调用SCI_SETILEXER可以在Scintilla中使用Lexilla创建的词法分析器

可以使用lexilla / test中的TestLexers程序测试Lexilla及其包含的词法分析器。阅读lexilla / test / README,以获取有关构建和使用TestLexers的信息。

内容

文字检索和修改 搜索和替换 改写
剪切,复制和粘贴 错误处理 撤消和重做
选择和信息 按字符或UTF-16代码单位 多重选择和虚拟空间
滚动和自动滚动 空白 游标
鼠标捕获 行尾 话语
造型 样式定义 脱字号,选择和热点样式
字符表示 保证金 注释
其他设定 括号突出显示 标签和缩进指南
标记 指标 自动补全
用户列表 通话提示 键盘指令
键绑定 弹出式编辑菜单 宏录制
印刷 直接存取 多个视图
后台加载和保存 ○可 换行
缩放 长线 辅助功能
Lexer Lexer对象 通知
图片 GTK 临时留言
不推荐使用的消息 编辑Scintilla永远不支持的消息 删除的功能
建筑物Scintilla ○行尾注释

带有名称形式的消息SCI_SETxxxxx通常带有一个同伴 SCI_GETxxxxx为了避免繁琐的重复,如果SCI_GETxxxxx消息返回消息设置的值SCI_SETxxxxx,则将对SET例程进行描述,并使GET例程由您自己想象。

文本检索和修改

Scintilla文档中的每个字节都与一个字节的样式信息相关联。字符字节和样式字节的组合称为单元。样式字节被解释为样式数组的索引。

在本文档中,即使使用多字节字符,“字符”通常也指一个字节。长度衡量的是字节数,而不是这些字节中的字符数。

Scintilla文档中的位置是指一个字符或该字符之前的空格。文档中的第一个字符为0,第二个为1,依此类推。如果文档包含nLen字符,则最后一个字符编号为nLen-1。脱字符号位于字符位置之间,并且可以位于第一个字符(0)之前到最后一个字符(nLen)之后。

在无法插入符号的地方,两个字符字节组成一个字符。当文档中包含日文等语言的DBCS字符或行尾用回车的CP / M标准标记后跟换行时,就会发生这种情况。INVALID_POSITION常数(-1)表示文档中的无效位置。

Scintilla中的所有文本行都具有相同的高度,并且此高度是根据任何当前样式中最大的字体计算得出的。此限制是为了提高性能;如果线条的高度不同,则涉及文本定位的计算将要求首先对文本进行样式设置。

SCI_GETTEXT(position length, char *text) → position
SCI_SETTEXT(<unused>, const char *text)
SCI_SETSAVEPOINT
SCI_GETLINE(line line, char *text) → position
SCI_REPLACESEL(<unused>, const char *text)
SCI_SETREADONLY(bool readOnly)
SCI_GETREADONLY → bool
SCI_GETTEXTRANGE(<unused>, Sci_TextRange *tr) → position
SCI_ALLOCATE(position bytes)
SCI_ADDTEXT(position length, const char *text)
SCI_ADDSTYLEDTEXT(position length, cell *c)
SCI_APPENDTEXT(position length, const char *text)
SCI_INSERTTEXT(position pos, const char *text)
SCI_CHANGEINSERTION(position length, const char *text)
SCI_CLEARALL
SCI_DELETERANGE(position start, position lengthDelete)
SCI_CLEARDOCUMENTSTYLE
SCI_GETCHARAT(position pos) → int
SCI_GETSTYLEAT(position pos) → int
SCI_GETSTYLEDTEXT(<unused>, Sci_TextRange *tr) → position
SCI_RELEASEALLEXTENDEDSTYLES
SCI_ALLOCATEEXTENDEDSTYLES(int numberStyles) → int
SCI_TARGETASUTF8(<unused>, char *s) → position
SCI_ENCODEDFROMUTF8(const char *utf8, char *encoded) → position
SCI_SETLENGTHFORENCODE(position bytes)

SCI_GETTEXT(位置长度,字符*文本,NUL终止)→位置从文档开始
处最多返回length-1个字符的文本,再加上一个终止的0字符。length-1超出文档长度时,它将返回文档长度。要收集文档中的所有文本,请使用SCI_GETLENGTH 来获取文档中的字符数(nLen),分配一个长度为nLen+1字节的字符缓冲区,然后调用SCI_GETTEXT(nLen+1, char *text)如果text参数为0,则返回应分配的长度来存储整个文档。如果然后保存该文本,则应使用SCI_SETSAVEPOINT将该文本标记为未修改。

也可以看看: SCI_GETSELTEXT, SCI_GETCURLINE, SCI_GETLINE, SCI_GETSTYLEDTEXT, SCI_GETTEXTRANGE

SCI_SETTEXT(<unused>,const char * text)
这将用您传入的零终止文本字符串替换文档中的所有文本。

SCI_SETSAVEPOINT
该消息告诉Scintilla,文档的当前状态未修改。通常在保存或加载文件时完成此操作,因此名称为“保存点”。当Scintilla执行撤消和重做操作时,它会通知容器它已经进入或离开了保存点,SCN_SAVEPOINTREACHEDSCN_SAVEPOINTLEFT 通知了消息,从而使容器知道该文件是否被认为是脏文件。

也可以看看: SCI_EMPTYUNDOBUFFER, SCI_GETMODIFY

SCI_GETLINE(line line,char * text)→位置
用指定行的内容(行从0开始)填充由text定义的缓冲区。缓冲区不以0字符结尾。请确保使用文本来确保缓冲区足够长SCI_LINELENGTH(line line)返回值是复制到缓冲区的字符数。返回的文本包括任何行尾字符。如果您要求的行号超出文档中行的范围,则将复制0个字符。如果text参数为0,则返回应分配的长度来存储整行。

也可以看看: SCI_GETCURLINE, SCI_GETSELTEXT, SCI_GETTEXTRANGE, SCI_GETSTYLEDTEXT, SCI_GETTEXT

SCI_REPLACESEL(<unused>,const char * text)锚点和当前位置
之间的当前选定文本由0终止的文本字符串替换。如果锚点和当前位置相同,则将文本插入在插入符号位置。插入符号位于插入的文本之后,并且插入符号滚动到视图中。

SCI_SETREADONLY(bool readOnly)
SCI_GETREADONLY→bool
这些消息设置并获取文档的只读标志。如果将文档标记为只读,则尝试修改文本会导致SCN_MODIFYATTEMPTRO通知。

SCI_GETTEXTRANGE(<未使用>,Sci_TextRange * TR)→位置
这收集位置之间的文本cpMincpMax并将其复制到lpstrText(见struct Sci_TextRangeScintilla.h)。如果cpMax为-1,则文本返回到文档末尾。文本以0终止,因此您必须提供至少比要读取的字符数长1个字符的缓冲区。返回值是返回文本的长度,不包括结尾的0。

也可以看看: SCI_GETSELTEXT, SCI_GETLINE, SCI_GETCURLINE, SCI_GETSTYLEDTEXT, SCI_GETTEXT

SCI_GETSTYLEDTEXT(<unused>,Sci_TextRange * tr)→位置
它将样式化的文本收集到缓冲区中,每个单元使用两个字节,其中字符在每对的低地址,而样式字节在高地址。位置cpMin之间的字符cpMax被复制到lpstrText(参见 struct Sci_TextRange中的Scintilla.h)。文本的末尾添加了两个0字节,因此lpstrText指向的缓冲区必须至少为 2*(cpMax-cpMin)+2字节长。不会检查cpMin或的合理值 cpMax文档外部的位置返回字符代码和样式字节0。

也可以看看: SCI_GETSELTEXT, SCI_GETLINE, SCI_GETCURLINE, SCI_GETTEXTRANGE, SCI_GETTEXT

SCI_ALLOCATE(位置字节)
分配足够大的文档缓冲区以存储给定数量的字节。该文档将不会小于其当前内容。

SCI_ADDTEXT(位置长度,const char * text)
这将 在当前位置length从字符串text插入第一个字符 这将包括您可能希望停止插入操作的字符串中的任何0。当前位置设置在插入文本的末尾,但不会滚动到视图中。

SCI_ADDSTYLEDTEXT(位置长度,单元格* c)的
行为类似于SCI_ADDTEXT,但是插入样式化的文本。

SCI_APPENDTEXT(位置长度,const char * text)
这会将length字符串中的第一个字符 添加text到文档的末尾。这将包含您可能希望停止操作的字符串中的任何0。当前选择不会更改,新文本也不会滚动到视图中。

SCI_INSERTTEXT(position pos,const char * text)
会将零终止的text字符串插入-1 pos或当前位置pos如果当前位置在插入点之后,则将其与周围的文本一起移动,但不执行滚动。

SCI_CHANGEINSERTION(位置长度,const char * text)
仅可以从SC_MOD_INSERTCHECK 通知处理程序调用此方法,并将插入的文本更改为提供的文本。

SCI_CLEARALL
除非文档是只读的,否则它将删除所有文本。

SCI_DELETERANGE(位置开始,位置长度
删除删除文档中的文本范围。

SCI_CLEARDOCUMENTSTYLE
当想要完全重新设置文档样式时,例如在选择了词法分析器之后, SCI_CLEARDOCUMENTSTYLE可以使用清除所有样式信息并重置折叠状态。

SCI_GETCHARAT(position pos)→int
这将返回pos文档中的字符;如果pos为负或超出文档末尾,则返回0

SCI_GETSTYLEAT(position pos)→int
这将返回pos文档中的样式;如果pos为负或超出文档末尾,则返回0

SCI_RELEASEALLEXTENDEDSTYLES
SCI_ALLOCATEEXTENDEDSTYLES(int numberStyles)→int
扩展样式用于诸如文本边距和注释之类的功能,以及由Scintilla内部使用。它们超出用于与文档字节关联的样式字节的范围0..255。这些功能管理扩展样式的使用,以确保组件在定义样式时进行协作。 SCI_RELEASEALLEXTENDEDSTYLES释放容器分配的所有扩展样式。 SCI_ALLOCATEEXTENDEDSTYLES在字节样式值之后分配一系列样式号,并返回第一个分配的样式号。在调用SCI_MARGINSETSTYLEOFFSETSCI_ANNOTATIONSETSTYLEOFFSET之前,应分配边距和注释样式的范围

Sci_TextRangeSci_CharacterRange
这些结构被定义为与Win32 TEXTRANGE完全相同的形状CHARRANGE,因此将Scintilla视为RichEdit的旧代码将起作用。

在将来的版本中,Sci_PositionCR当在所有平台上为64位构建Scintilla时,该类型将重新定义为64位。

typedef long Sci_PositionCR;

struct Sci_CharacterRange {
    Sci_PositionCR cpMin;
    Sci_PositionCR cpMax;
};

struct Sci_TextRange {
    struct Sci_CharacterRange chrg;
    字符* lpstrText;
};

仅限于GTK,Cocoa和Windows:访问编码文本

SCI_TARGETASUTF8(<unused>,char * s)→位置
此方法检索编码为UTF-8的目标的值,这是GTK的默认编码,因此对于检索文本以在用户界面的其他部分中使用非常有用,例如查找和替换对话框。返回以字节为单位的编码文本的长度。可可使用的UTF-16很容易从UTF-8转换而来,因此该方法可用于从支持的各种编码中执行更复杂的转码工作。

SCI_ENCODEDFROMUTF8(const char * utf8,char * encoded)→位置
SCI_SETLENGTHFORENCODE(位置字节)
SCI_ENCODEDFROMUTF8将UTF-8字符串转换为文档的编码,这对于获取查找对话框的结果(例如,接收字符串字节)非常有用。可以在文档中搜索。由于文本可以包含nul个字节,因此该SCI_SETLENGTHFORENCODE方法可用于设置要转换的长度。如果设置为-1,则通过找到一个nul字节来确定长度。返回转换后的字符串的长度。

正在搜寻

有一些搜索文本和正则表达式的方法。大多数应用程序应使用 SCI_SEARCHINTARGET 作为其搜索实现的基础。其他调用对此有所补充或在之前实现SCI_SEARCHINTARGET

基本的正则表达式支持是有限的,仅应用于简单案例和初始开发。可以通过设置SCFIND_CXX11REGEX搜索标志来使用C ++运行时<regex>库可以通过编译带有define的Scintilla来禁用C ++ 11 <regex>支持NO_CXX11_REGEX可以将不同的正则表达式库集成到Scintilla中, 或者可以通过SCI_GETCHARACTERPOINTER直接访问缓冲区内容从容器中调用

使用目标进行搜索和替换

使用可以在目标范围内执行搜索SCI_SEARCHINTARGET,该范围使用计数的字符串允许搜索空字符。它返回匹配文本范围的开始位置或失败时返回-1,在这种情况下,目标不会移动。通过所使用的标志 SCI_SEARCHINTARGET,例如SCFIND_MATCHCASESCFIND_WHOLEWORDSCFIND_WORDSTART,和SCFIND_REGEXP 可以设置SCI_SETSEARCHFLAGS

SCI_SETTARGETSTART(position start)
SCI_GETTARGETSTART → position
SCI_SETTARGETSTARTVIRTUALSPACE(position space)
SCI_GETTARGETSTARTVIRTUALSPACE → position
SCI_SETTARGETEND(position end)
SCI_GETTARGETEND → position
SCI_SETTARGETENDVIRTUALSPACE(position space)
SCI_GETTARGETENDVIRTUALSPACE → position
SCI_SETTARGETRANGE(position start, position end)
SCI_TARGETFROMSELECTION
SCI_TARGETWHOLEDOCUMENT
SCI_SETSEARCHFLAGS(int searchFlags)
SCI_GETSEARCHFLAGS → int
SCI_SEARCHINTARGET(position length, const char *text) → position
SCI_GETTARGETTEXT(<unused>, char *text) → position
SCI_REPLACETARGET(position length, const char *text) → position
SCI_REPLACETARGETRE(position length, const char *text) → position
SCI_GETTAG(int tagNumber, char *tagValue) → int

SCI_SETTARGETSTART(位置开始)
SCI_GETTARGETSTART→位置
SCI_SETTARGETSTARTVIRTUALSPACE(位置空间)
SCI_GETTARGETSTARTVIRTUALSPACE→位置
SCI_SETTARGETEND(位置端)
SCI_GETTARGETEND→位置
SCI_SETTARGETENDVIRTUALSPACE(位置空间)
SCI_GETTARGETENDVIRTUALSPACE→位置
SCI_SETTARGETRANGE(位置开始,位置端)
这些函数设置和返回的开始和结束目标。搜索时,您可以将开始设置为大于结束,以查找目标中的最后一个匹配文本,而不是第一个匹配文本。使用SCI_SETTARGETSTARTSCI_SETTARGETENDSCI_SETTARGETRANGE 设置目标位置,或将虚拟空间设置为0。成功也可以设置目标 SCI_SEARCHINTARGET

可以使用相应的...VIRTUALSPACE 方法设置和检索目标范围的虚拟空间这样可以更轻松地将文本插入虚拟空间。

SCI_TARGETFROMSELECTION
设置目标的开始和结束到选择的开始和结束位置。

SCI_TARGETWHOLEDOCUMENT
将目标开始设置为文档的开始,并将目标结束设置为文档的结束。

SCI_SETSEARCHFLAGS(int searchFlags)
SCI_GETSEARCHFLAGS→int
这些获取并设置所searchFlags使用的 SCI_SEARCHINTARGET有几个选项标志,包括简单的正则表达式搜索。

SCI_SEARCHINTARGET(位置长度,常量字符*文本)→位置
这搜索在由所定义的目标文本字符串的第一次出现 SCI_SETTARGETSTARTSCI_SETTARGETEND文本字符串不以零结尾;大小由设置length搜索由设置的搜索标志修改SCI_SETSEARCHFLAGS如果搜索成功,则将目标设置为找到的文本,并且返回值是匹配文本开头的位置。如果搜索失败,则结果为-1。

SCI_GETTARGETTEXT(<未使用>,char * text)→位置
检索目标中的值。

SCI_REPLACETARGET(位置长度,const char *文本)→位置
如果length为-1,text则为零终止字符串,否则 length设置要替换目标的字符数。替换后,目标范围以替换文本为准。返回值是替换字符串的长度。
请注意,建议的删除文档中文本的方法是将目标设置为要删除的文本,并用空字符串执行替换目标。

SCI_REPLACETARGETRE(位置长度,常量字符*文本)→位置
使用正则表达式替换目标。如果length为-1, text则为零终止字符串,否则length为要使用的字符数。替换字符串被从文本串与任何序列形成 \1通过\9替换从最近的正则表达式搜索标记的匹配。\0被最新搜索中的所有匹配文本替换。替换后,目标范围以替换文本为准。返回值是替换字符串的长度。

SCI_GETTAG(int tagNumber,char * tagValue NUL终止)→int
在正则表达式搜索中发现哪些文本与标记表达式匹配。如果应用程序要解释替换字符串本身,这将很有用。

也可以看看: SCI_FINDTEXT

searchFlags
一些搜索例程使用标志选项,其中包括简单的正则表达式搜索。通过添加标记选项来组合它们:

SCFIND_NONE 默认设置为不区分大小写的文字匹配。
SCFIND_MATCHCASE 仅与匹配搜索字符串大小写的文本匹配。
SCFIND_WHOLEWORD 仅当前后字符不是定义的文字字符时,才会发生匹配SCI_SETWORDCHARS
SCFIND_WORDSTART 仅当之前的字符不是定义的文字字符时,才会发生匹配SCI_SETWORDCHARS
SCFIND_REGEXP 搜索字符串应解释为正则表达式。除非与结合使用,否则使用Scintilla的基本实现SCFIND_CXX11REGEX
SCFIND_POSIX 通过解释带标记的部分的裸(和)而不是\(和\),以更兼容POSIX的方式处理正则表达式。SCFIND_CXX11REGEX设置时无效
SCFIND_CXX11REGEX 可以将此标志设置为使用C ++ 11 <regex>代替Scintilla的基本正则表达式。如果正则表达式无效,则返回-1并将status设置为 SC_STATUS_WARN_REGEX在正则表达式对象上设置了ECMAScript标志,并且UTF-8文档将表现出符合Unicode的行为。对于wchar_t为16位的MSVC,相对表达式“ ..”将匹配单个星体平面字符。编译器之间可能还有其他差异。还必须SCFIND_REGEXP设置。

在正则表达式中,使用Scintilla的基本实现,解释的特殊字符为:

. 匹配任何字符
\( 这标志着标记比赛的区域的开始。
\) 这标志着标记区域的结束。
\n 其中n1到9表示替换时第一个到第九个标记区域。例如,如果搜索字符串为Fred\([1-9]\)XXX,替换字符串为Sam\1YYYFred2XXX则将其应用于时将生成Sam2YYY\0指所有匹配的文本。
\< 使用Scintilla的单词定义来匹配单词的开头。
\> 使用Scintilla的单词定义可以匹配单词的结尾。
\x 这样,您就可以使用原本具有特殊含义的字符x。例如,\ [将被解释为[,而不是字符集的开头。
[...] 这表示一组字符,例如[abc]表示字符a,b或c中的任何一个。您还可以使用范围,例如[az]用于任何小写字符。
[^...] 集合中字符的补码。例如,[^ A-Za-z]表示除字母字符之外的任何字符。
^ 这与行的开头匹配(除非在集合中使用,请参见上文)。
$ 这与行尾匹配。
* 这匹配0次或多次。例如,Sa*m比赛SmSamSaamSaaam等等。
+ 这匹配1次或多次。例如,Sa+m比赛 SamSaamSaaam等等。

正则表达式将只匹配单行中的范围,而不会匹配多行。

使用SCFIND_CXX11REGEX更多功能时,通常类似于JavaScript中的正则表达式支持。有关受支持内容的详细信息,请参见C ++运行时的文档。

SCI_FINDTEXT(int searchFlags, Sci_TextToFind *ft) → position
SCI_SEARCHANCHOR
SCI_SEARCHNEXT(int searchFlags, const char *text) → position
SCI_SEARCHPREV(int searchFlags, const char *text) → position

SCI_FINDTEXT(int searchFlags,Sci_TextToFind * ft)→位置
此消息在文档中搜索文本。它不使用或移动当前选择。searchFlags参数控制搜索类型,其中包括正则表达式搜索。

您可以通过在开始位置之前设置搜索范围的结尾来向后搜索,以找到搜索字符串的上一个出现位置。

Sci_TextToFind结构被定义在Scintilla.h; 设置 chrg.cpMinchrg.cpMax根据文档中的位置范围进行搜索。您可以通过设置chrg.cpMax小于来向后搜索chrg.cpMin将的lpstrText成员设置Sci_TextToFind为指向包含搜索模式的零终止文本字符串。如果您的语言使使用Sci_TextToFind 变得困难,则应考虑SCI_SEARCHINTARGET改为使用

如果搜索失败,则返回值为-1;如果搜索成功,则返回值的开头。chrgText.cpMinchrgText.cpMax成员 Sci_TextToFind填充了找到的文本的开始和结束位置。

也可以看看: SCI_SEARCHINTARGET

Sci_TextToFind
将此结构定义为与FINDTEXTEX将Scintilla视为RichEdit控件的旧代码的Win32结构完全相同

struct Sci_TextToFind {
    struct Sci_CharacterRange chrg; //搜索范围
    const char * lpstrText; //搜索模式(零终止)
    struct Sci_CharacterRange chrgText; //作为匹配文本的位置返回
};

SCI_SEARCHANCHOR
SCI_SEARCHNEXT(int searchFlags,const char * text)→位置
SCI_SEARCHPREV(int searchFlags,const char * text)→position
这些消息提供可重定位的搜索支持。这样就可以宏记录多个增量交互式搜索,同时仍将选择设置为找到的文本,因此查找/选择操作是独立的。如果启用了宏录制,这三个消息将发送通知SCN_MACRORECORD

SCI_SEARCHANCHOR设置由所使用的搜索起点 SCI_SEARCHNEXTSCI_SEARCHPREV到当前选择,即,更靠近该文件的开始的选择结束的开始。在调用SCI_SEARCHNEXT之前,应始终先调用此函数SCI_SEARCHPREV

SCI_SEARCHNEXTSCI_SEARCHPREV搜索文本所指向的零终止搜索字符串的下一个和上一个匹配项。搜索被修改searchFlags

如果未找到任何内容,则返回值为-1,否则返回值为匹配文本的起始位置。选择内容将更新为显示匹配的文本,但不会滚动到视图中。

另请参阅:SCI_SEARCHINTARGETSCI_FINDTEXT

改写

SCI_SETOVERTYPE(bool overType)
SCI_GETOVERTYPE → bool

SCI_SETOVERTYPE(bool overType)
SCI_GETOVERTYPE→bool
启用改写后,每个键入的字符都会替换文本插入符号右侧的字符。禁用改写时,将在插入符号处插入字符。 如果启用了超级键入,则SCI_GETOVERTYPE返回true(1),否则 false将返回(0)。使用SCI_SETOVERTYPE设置改写模式。

剪切,复制和粘贴

SCI_CUT
SCI_COPY
SCI_PASTE
SCI_CLEAR
SCI_CANPASTE → bool
SCI_COPYRANGE(position start, position end)
SCI_COPYTEXT(position length, const char *text)
SCI_COPYALLOWLINE
SCI_SETPASTECONVERTENDINGS(bool convert)
SCI_GETPASTECONVERTENDINGS → bool

SCI_CUT
SCI_COPY
SCI_PASTE
SCI_CLEAR
SCI_CANPASTE→bool
SCI_COPYALLOWLINE
这些命令执行将数据剪切和复制到剪贴板,从剪贴板粘贴到文档中以及清除文档的标准任务。 SCI_CANPASTE如果文档不是只读的,并且所选内容不包含受保护的文本,则返回非零值。如果您需要“可以复制”或“可以剪切”,请使用SCI_GETSELECTIONEMPTY(),如果存在任何非空的选择范围,则表示复制或剪切到剪贴板应该可以使用 ,则该值为零。

GTK并不真正支持SCI_CANPASTE并且总是返回,true 除非文档是只读的。

在X上,剪贴板是异步的,可能需要在目标和源应用程序之间发送多条消息。来自SCI_PASTE的数据不会立即到达文档中。

SCI_COPYALLOWLINE与SCI_COPY相同,除了如果选择为空则复制当前行。在Windows上,剪贴板上添加了一个额外的“ MSDEVLineSelect”标记,然后将其用于SCI_PASTE将整行粘贴到当前行之前。

SCI_COPYRANGE(位置开始,位置结束)
SCI_COPYTEXT(位置长度,const char * text)

SCI_COPYRANGE将一系列文本从文档SCI_COPYTEXT复制到系统剪贴板,然后将提供的文本复制到系统剪贴板。

SCI_SETPASTECONVERTENDINGS(布尔转换)
SCI_GETPASTECONVERTENDINGS→bool
如果设置了此属性,则在粘贴文本时,任何行尾都将转换为与SCI_SETEOLMODE设置的文档行尾模式相 匹配默认为true。

错误处理

SCI_SETSTATUS(int status)
SCI_GETSTATUS → int

SCI_SETSTATUS(int状态)
SCI_GETSTATUS→int
如果发生错误,Scintilla可能会设置一个内部错误号,可以使用进行检索 SCI_GETSTATUS要清除错误状态,请致电SCI_SETSTATUS(0)从1到999的状态值为错误,而状态SC_STATUS_WARN_START(1000)及以上是警告。当前定义的状态为:

SC_STATUS_OK 0 没有失败
SC_STATUS_FAILURE 1个 通用故障
SC_STATUS_BADALLOC 2 内存耗尽
SC_STATUS_WARN_REGEX 1001 正则表达式无效

撤消和重做

Scintilla具有多个级别的撤消和重做。它将继续收集可撤消的操作,直到内存用完。Scintilla保存更改文档的操作。闪烁不会保存插入符号和选择运动,视图滚动等。键入或删除的顺序被压缩到单个事务中,以便更轻松地以合理的详细程度撤消和重做。动作序列可以合并为一个单元撤消的事务。这些序列发生在SCI_BEGINUNDOACTIONSCI_ENDUNDOACTION消息之间可以嵌套这些事务,并且只撤消顶层序列作为单位。

SCI_UNDO
SCI_CANUNDO → bool
SCI_EMPTYUNDOBUFFER
SCI_REDO
SCI_CANREDO → bool
SCI_SETUNDOCOLLECTION(bool collectUndo)
SCI_GETUNDOCOLLECTION → bool
SCI_BEGINUNDOACTION
SCI_ENDUNDOACTION
SCI_ADDUNDOACTION(int token, int flags)

SCI_UNDO
SCI_CANUNDO→bool
SCI_UNDO撤消一个操作,或者,如果撤消缓冲区已达到一个 SCI_ENDUNDOACTION点,则所有操作都将返回到相应的 SCI_BEGINUNDOACTION

SCI_CANUNDO如果没有要撤消的内容,则返回0;如果有,则返回1。通常,您将使用此消息的结果来启用/禁用“编辑”菜单的“撤消”命令。

SCI_REDO
SCI_CANREDO→bool
SCI_REDO撤消上一次SCI_UNDO操作的效果

SCI_CANREDO如果没有要重做的操作,则返回0;如果没有要重做的撤消操作,则返回1。通常,您可以使用此消息的结果来启用/禁用“编辑”菜单“重做”命令。

SCI_EMPTYUNDOBUFFER
此命令告诉Scintilla忘记所有保存的撤消或重做历史记录。它还将保存点设置为撤消缓冲区的开始,因此该文档似乎没有被修改。这不会导致将SCN_SAVEPOINTREACHED通知发送到容器。

也可以看看: SCI_SETSAVEPOINT

SCI_SETUNDOCOLLECTION(bool collectUndo)
SCI_GETUNDOCOLLECTION→bool
您可以使用来控制Scintilla是否收集撤消信息 SCI_SETUNDOCOLLECTION传递true(1)以收集信息, 传递false(0)停止收集。如果停止收集,则还应该使用 SCI_EMPTYUNDOBUFFER以避免撤销缓冲区与缓冲区中的数据不同步的方法。

如果您使用Scintilla来存储程序生成的文本(日志视图)或在经常删除和重新生成文本的显示窗口中,则可能希望关闭保存撤消信息。

SCI_BEGINUNDOACTION
SCI_ENDUNDOACTION
将这两个消息发送到Scintilla,以标记一组操作的开始和结束,这些操作要全部撤消为一个操作,但必须生成多个操作。或者,您可以使用它们来标记您不想与之前或之后的操作合并的一组操作(如果撤消)。

SCI_ADDUNDOACTION(int token,int flags)
容器可以通过调用将其自己的操作添加到撤消堆栈中, SCI_ADDUNDOACTION并且 当需要撤消()或重做()操作时,SCN_MODIFIED 带有该SC_MOD_CONTAINER标志通知将发送到该容器 提供的令牌参数将在通知字段中返回SC_PERFORMED_UNDOSC_PERFORMED_REDOtoken

例如,如果容器想要允许“切换书签”命令的撤消和重做,则它可以在SCI_ADDUNDOACTION(line, 0)每次执行该命令时调用然后,当它收到撤消或重做的通知时,它将在标记字段给出的行上切换书签。如果有不同类型的命令或参数需要存储到撤消堆栈中,则容器应为文档维护其自己的堆栈,并使用该堆栈中的当前位置作为的参数SCI_ADDUNDOACTION(line)SCI_ADDUNDOACTION除非与SCI_BEGINUNDOACTION组合在一起,否则命令不会组合在一起成为单个撤消事务SCI_ENDUNDOACTION

UNDO_MAY_COALESCE如果可以将容器操作与任何插入和删除操作合并到单个复合操作中,则flags参数可以为(1),否则为 UNDO_NONE(0)。合并将可合并的容器操作视为透明,因此仍将仅将看起来像键入的插入或看起来像多次使用Backspace或Delete键的删除分组在一起。

选择和信息

闪烁保持选择范围在锚点和当前位置两点之间延伸。如果锚点和当前位置相同,则没有选定的文本。文档中的位置范围是0(第一个字符之前)到文档大小(最后一个字符之后)。如果您使用消息,则设置在CRLF对中间或2字节字符中间的位置并不会阻止您。但是,键盘命令不会将插入符号移动到此类位置。

SCI_GETTEXTLENGTH → position
SCI_GETLENGTH → position
SCI_GETLINECOUNT → line
SCI_LINESONSCREEN → line
SCI_GETMODIFY → bool
SCI_SETSEL(position anchor, position caret)
SCI_GOTOPOS(position caret)
SCI_GOTOLINE(line line)
SCI_SETCURRENTPOS(position caret)
SCI_GETCURRENTPOS → position
SCI_SETANCHOR(position anchor)
SCI_GETANCHOR → position
SCI_SETSELECTIONSTART(position anchor)
SCI_GETSELECTIONSTART → position
SCI_SETSELECTIONEND(position caret)
SCI_GETSELECTIONEND → position
SCI_SETEMPTYSELECTION(position caret)
SCI_SELECTALL
SCI_LINEFROMPOSITION(position pos) → line
SCI_POSITIONFROMLINE(line line) → position
SCI_GETLINEENDPOSITION(line line) → position
SCI_LINELENGTH(line line) → position
SCI_GETCOLUMN(position pos) → position
SCI_FINDCOLUMN(line line, position column) → position
SCI_POSITIONFROMPOINT(int x, int y) → position
SCI_POSITIONFROMPOINTCLOSE(int x, int y) → position
SCI_CHARPOSITIONFROMPOINT(int x, int y) → position
SCI_CHARPOSITIONFROMPOINTCLOSE(int x, int y) → position
SCI_POINTXFROMPOSITION(<unused>, position pos) → int
SCI_POINTYFROMPOSITION(<unused>, position pos) → int
SCI_HIDESELECTION(bool hide)
SCI_GETSELTEXT(<unused>, char *text) → position
SCI_GETCURLINE(position length, char *text) → position
SCI_SELECTIONISRECTANGLE → bool
SCI_SETSELECTIONMODE(int selectionMode)
SCI_GETSELECTIONMODE → int
SCI_GETMOVEEXTENDSSELECTION → bool
SCI_GETLINESELSTARTPOSITION(line line) → position
SCI_GETLINESELENDPOSITION(line line) → position
SCI_MOVECARETINSIDEVIEW
SCI_POSITIONBEFORE(position pos) → position
SCI_POSITIONAFTER(position pos) → position
SCI_TEXTWIDTH(int style, const char *text) → int
SCI_TEXTHEIGHT(line line) → int
SCI_CHOOSECARETX
SCI_MOVESELECTEDLINESUP
SCI_MOVESELECTEDLINESDOWN
SCI_SETMOUSESELECTIONRECTANGULARSWITCH(bool mouseSelectionRectangularSwitch)
SCI_GETMOUSESELECTIONRECTANGULARSWITCH → bool

SCI_GETTEXTLENGTH→位置
SCI_GETLENGTH→位置
这两个消息均返回以字节为单位的文档长度。

SCI_GETLINECOUNT→行
这将返回文档中的行数。空文档包含1行。仅包含行尾的文档有2行。

SCI_LINESONSCREEN→行
这将返回屏幕上可见的完整行数。线高恒定时,这是可用的垂直空间除以线间距。除非您将窗口大小调整为整数行,否则视图底部可能会出现部分线条。

SCI_GETMODIFY→bool
如果修改了文档,则返回非零;如果未修改,则返回0。文档的修改状态由相对于保存点的撤消位置确定。SCI_SETSAVEPOINT通常,当您将数据保存到文件时,保存点由设置

如果在修改文档时需要通知您,Scintilla会通过SCN_SAVEPOINTREACHED通知消息通知容器已进入或离开保存点SCN_SAVEPOINTLEFT

SCI_SETSEL(位置锚点,位置插入符号)
此消息设置锚点和当前位置。如果caret为负,则表示文档结尾。如果anchor为负,则表示删除所有选择(即,将锚定到与相同的位置caret)。执行此操作后,插入符号将滚动到视图中。

SCI_GOTOPOS(位置插入标记)
删除所有选择,将插入标记设置为,caret并滚动视图以使插入标记可见(如有必要)。等同于 SCI_SETSEL(caret, caret)锚点位置设置为与当前位置相同。

SCI_GOTOLINE(行行)
这将删除所有选择,并在行号的开始处设置脱字号,line 并滚动视图(如果需要)以使其可见。锚点位置设置为与当前位置相同。如果line在文档的行之外(第一行为0),则行集为第一行或最后一行。

SCI_SETCURRENTPOS(位置插入符)
这将设置当前位置,并在锚点和当前位置之间创建一个选择。插入符号不会滚动到视图中。

也可以看看: SCI_SCROLLCARET

SCI_GETCURRENTPOS→position
这将返回当前位置。

SCI_SETANCHOR(位置锚)
设置锚位置,并在锚位置和当前位置之间进行选择。插入符号不会滚动到视图中。

也可以看看: SCI_SCROLLCARET

SCI_GETANCHOR→位置
返回当前锚点位置。

SCI_SETSELECTIONSTART(位置锚)
SCI_SETSELECTIONEND(位置插入符)
这些设置基于锚位置小于当前位置的假设进行设置。它们不会使插入符号可见。下表显示了使用这些消息后的锚点位置和当前位置。

的新价值 插入符
SCI_SETSELECTIONSTART anchor Max(anchor, current)
SCI_SETSELECTIONEND Min(anchor, caret) caret

也可以看看: SCI_SCROLLCARET

SCI_GETSELECTIONSTART→位置
SCI_GETSELECTIONEND→位置
这些返回选择的开始和结束,而与当前位置和锚点无关SCI_GETSELECTIONSTART返回当前位置或锚点位置中的较小者。SCI_GETSELECTIONEND返回两个值中的较大者。

SCI_SETEMPTYSELECTION(位置插入符号)
这将删除所有选择并将插入标记设置为caret插入符号不会滚动到视图中。

SCI_SELECTALL
这将选择文档中的所有文本。当前位置不会滚动到视图中。

SCI_LINEFROMPOSITION(位置pos)→行
此消息返回包含pos文档中位置的行如果pos<= 0,则返回值为0。如果pos超出文档末尾,则返回值为最后一行

SCI_POSITIONFROMLINE(行行)→位置
返回与行首相对应的文档位置。如果 line为负,则返回选择起始行的位置。如果line大于文档中的行,则返回值为-1。如果line等于文档中的行数(即最后一行之后的1行),则返回值是文档的末尾。

SCI_GETLINEENDPOSITION(行行)→位置
这将返回行尾在任何行结束符之前的位置。如果line 是文档中的最后一行(没有任何行尾字符)或更大,则结果为文档的大小。如果line为负,则结果不确定。

SCI_LINELENGTH(行行)→位置
返回行的长度,包括任何行结束符。如果line 为负数或超出文档的最后一行,则结果为0。如果要使行长不包括任何行尾字符,请使用SCI_GETLINEENDPOSITION(line)- SCI_POSITIONFROMLINE(line)

SCI_GETSELTEXT(<unused>,char * text NUL终止)→位置
将当前选定的文本和一个终止的0字节复制到text 缓冲区。缓冲区大小应通过使用NULL指针作为text参数 来确定SCI_GETSELTEXT(0,0)这允许矩形和不连续的选择以及简单的选择。有关如何复制多个和矩形选择以及虚拟空间的信息,请参见多重选择

也可以看看: SCI_GETCURLINE, SCI_GETLINE, SCI_GETTEXT, SCI_GETSTYLEDTEXT, SCI_GETTEXTRANGE

SCI_GETCURLINE(位置长度,字符*文本,NUL终止)→position
这将检索包含插入符号的行的文本,并返回插入符号行内的位置。通过在char* text在缓冲区大到足以容纳你要检索的文本和终止0字符指点。设置length为缓冲区的长度,该长度必须至少为1以容纳终止0字符。如果text参数为0,则返回应分配的长度以存储整个当前行。

也可以看看: SCI_GETSELTEXT, SCI_GETLINE, SCI_GETTEXT, SCI_GETSTYLEDTEXT, SCI_GETTEXTRANGE

SCI_SELECTIONISRECTANGLE→bool
如果当前选择处于矩形模式,则返回1,否则返回0。

SCI_SETSELECTIONMODE(int selectionMode)
SCI_GETSELECTIONMODE→int
这两个函数设置并获取选择模式,可以是流(SC_SEL_STREAM= 0)或矩形(SC_SEL_RECTANGLE= 1)或行(SC_SEL_LINES= 2)或细矩形(SC_SEL_THIN= 3)。在这些模式下设置时,常规的插入符号移动将扩展或减少选择,直到通过具有相同值或的呼叫取消该模式SCI_CANCEL即使使用鼠标或进行常规扩展移动进行选择,get函数也将返回当前模式。 SC_SEL_THIN是键入矩形选择后的模式,并确保没有选择任何字符。

SCI_GETMOVEEXTENDSSELECTION→bool
如果常规插入符号移动将扩展或减少选择,则返回1,否则返回0。 SCI_SETSELECTIONMODE在打开和关闭之间切换此设置。

SCI_GETLINESELSTARTPOSITION(行)→位置
SCI_GETLINESELENDPOSITION(行)→位置
检索给定行上选择的开始和结束位置,INVALID_POSITION如果该行上没有选择,则 返回该位置。

SCI_MOVECARETINSIDEVIEW
如果插入符号不在视图的顶部或底部,则将其移动到当前位置可见的最近的一行。任何选择都将丢失。

SCI_POSITIONBEFORE(位置pos)→位置
SCI_POSITIONAFTER(位置pos)→位置
这些消息会考虑到当前代码页,返回文档中另一个位置之前和之后的位置。返回的最小位置为0,最大位置为文档中的最后一个位置。如果在多字节字符中使用某个位置进行调用,则将返回该字符开始/结束的位置。

SCI_TEXTWIDTH(int style,const char * text)→int
这返回在给定style绘制的字符串的像素宽度,该宽度可用于例如确定行数边距的宽度以显示给定数目的数字。

SCI_TEXTHEIGHT(线条)→int
返回特定线条的高度(以像素为单位)。当前所有行的高度都相同。

SCI_GETCOLUMN(position pos)→位置考虑到制表符的宽度,
该消息返回pos文档中某个位置的列号这将返回前一行最后一个选项卡的列号,以及最后pos一个选项卡和之间的字符数 pos如果该行上没有制表符,则返回值是直到该行位置为止的字符数。在这两种情况下,双字节字符都算作一个字符。这可能仅对等宽字体有用。

SCI_FINDCOLUMN(逐行位置列)→位置
该消息返回的位置column上的line 取片的宽度考虑进去。它将多字节字符视为单列。列号(如行)从0开始。

SCI_POSITIONFROMPOINT(int x,int y)→位置
SCI_POSITIONFROMPOINTCLOSE(int x,int y)→position
SCI_POSITIONFROMPOINT找到与某个点最接近的字符位置,并且SCI_POSITIONFROMPOINTCLOSE类似,但是如果该点在窗口之外或未接近任何字符则返回-1。

SCI_CHARPOSITIONFROMPOINT(int x,int y)→位置
SCI_CHARPOSITIONFROMPOINTCLOSE(int x,int y)→position
SCI_CHARPOSITIONFROMPOINT找到最接近该点的字符,并且SCI_CHARPOSITIONFROMPOINTCLOSE相似,但是如果该点在窗口之外或未接近任何字符则返回-1。这与以前的方法相似,但是查找字符而不是字符间位置。

SCI_POINTXFROMPOSITION(<未使用>,位置pos)→int
SCI_POINTYFROMPOSITION(<未使用>,位置pos)→int
这些消息返回文本在pos 文档中位置的x和y显示像素位置

SCI_HIDESELECTION(bool hide)
正常状态是通过绘制由SCI_SETSELFORE设置的选择来使选择可见SCI_SETSELBACK但是,如果您隐藏选择,它将被绘制为普通文本。

SCI_CHOOSECARETX
Scintilla会记住用户水平水平移动到的最后一个位置的x值,然后在垂直移动(例如使用向上和向下键)时使用此值。该消息将插入号的当前x位置设置为记忆值。

SCI_MOVESELECTEDLINESUP
将选定的行上移一行,在选择后将其移到上方。选择内容将自动扩展到选择内容第一行的开头和最后一行的结尾。如果未选择任何内容,则将选择光标当前所在的行。

SCI_MOVESELECTEDLINESDOWN
将选定的行向下移动一行,然后在选择之前将其移动到下面。选择内容将自动扩展到选择内容第一行的开头和最后一行的结尾。如果未选择任何内容,则将选择光标当前所在的行。

SCI_SETMOUSESELECTIONRECTANGULARSWITCH(bool mouseSelectionRectangularSwitch)
SCI_GETMOUSESELECTIONRECTANGULARSWITCH→bool
启用或禁用在使用鼠标进行选择时切换到矩形选择模式的功能。启用此选项后,可以通过按相应的修饰键将流模式下的鼠标选择切换为矩形模式。然后,即使再次释放修改键,它们仍将保持矩形模式。关闭此选项后,鼠标选择将始终保持选择开始的模式。默认情况下处于关闭状态。

按字符或UTF-16代码单位

大多数Scintilla API使用字节位置,但是某些应用程序希望使用基于计数(UTF-32)字符或(UTF-16)代码单元的位置,或者需要与以字符或代码单元形式编写的其他代码通信。仅使用字节位置,这可能需要检查许多字节以对文档中的字符或代码单位进行计数,但是在某些情况下,可以通过按字符或代码单位对行开头进行索引来加快速度。

SCI_POSITIONRELATIVE(position pos, position relative) → position
SCI_POSITIONRELATIVECODEUNITS(position pos, position relative) → position
SCI_COUNTCHARACTERS(position start, position end) → position
SCI_COUNTCODEUNITS(position start, position end) → position
SCI_GETLINECHARACTERINDEX → int
SCI_ALLOCATELINECHARACTERINDEX(int lineCharacterIndex)
SCI_RELEASELINECHARACTERINDEX(int lineCharacterIndex)
SCI_LINEFROMINDEXPOSITION(position pos, int lineCharacterIndex) → line
SCI_INDEXPOSITIONFROMLINE(line line, int lineCharacterIndex) → position

SCI_POSITIONRELATIVE(位置pos,相对位置)→位置
对自变量位置之前或之后的整个字符数进行计数,然后返回该位置。返回的最小位置为0,最大位置为文档中的最后一个位置。如果位置超过了文档末尾,则返回0。

SCI_COUNTCHARACTERS(位置开始,位置结束)→位置
返回两个位置之间的整个字符数。

SCI_POSITIONRELATIVECODEUNITS(位置pos,相对位置)→位置
SCI_COUNTCODEUNITS(位置开始,位置结束)→位置
这些是UTF-16版本,SCI_POSITIONRELATIVESCI_COUNTCHARACTERS 根据UTF-16代码单位工作。

SCI_GETLINECHARACTERINDEX→int
返回是否有任何活动的索引。如果对整个字符进行了索引或对UTF-16代码单元进行了索引SC_LINECHARACTERINDEX_NONE(0)SC_LINECHARACTERINDEX_UTF32(1)可能是一个或多个SC_LINECHARACTERINDEX_UTF16(2)当前仅UTF-8文档支持字符索引。

SCI_ALLOCATELINECHARACTERINDEX(int lineCharacterIndex)
SCI_RELEASELINECHARACTERINDEX(int lineCharacterIndex)
使用与相同的枚举分配或释放一个或多个索引SCI_GETLINECHARACTERINDEX应用程序的不同方面可能需要不同时期的索引,并应为这些时期分配索引。索引使用额外的内存,因此释放它们有助于最大程度地减少内存,但它们也需要花费一些时间来重新计算。Scintilla还可以分配索引来支持功能,例如可访问性或输入法编辑器。一次只为一个文档创建每种类型的一个索引。

SCI_LINEFROMINDEXPOSITION(位置pos,整数lineCharacterIndex)→行
SCI_INDEXPOSITIONFROMLINE(行,整数lineCharacterIndex)→位置
可以通过SCI_LINEFROMINDEXPOSITIONSC_LINECHARACTERINDEX_UTF32(1)之一进行 调用来找到特定字符或代码单元的文档行SC_LINECHARACTERINDEX_UTF16(2)反向操作从文档开始,SCI_INDEXPOSITIONFROMLINE以相同的lineCharacterIndex参数调用以字符或代码单位查找文档行的起始位置

多重选择和虚拟空间

SCI_SETMULTIPLESELECTION(bool multipleSelection)
SCI_GETMULTIPLESELECTION → bool
SCI_SETADDITIONALSELECTIONTYPING(bool additionalSelectionTyping)
SCI_GETADDITIONALSELECTIONTYPING → bool
SCI_SETMULTIPASTE(int multiPaste)
SCI_GETMULTIPASTE → int
SCI_SETVIRTUALSPACEOPTIONS(int virtualSpaceOptions)
SCI_GETVIRTUALSPACEOPTIONS → int
SCI_SETRECTANGULARSELECTIONMODIFIER(int modifier)
SCI_GETRECTANGULARSELECTIONMODIFIER → int

SCI_GETSELECTIONS → int
SCI_GETSELECTIONEMPTY → bool
SCI_CLEARSELECTIONS
SCI_SETSELECTION(position caret, position anchor)
SCI_ADDSELECTION(position caret, position anchor)
SCI_DROPSELECTIONN(int selection)
SCI_SETMAINSELECTION(int selection)
SCI_GETMAINSELECTION → int

SCI_SETSELECTIONNCARET(int selection, position caret)
SCI_GETSELECTIONNCARET(int selection) → position
SCI_SETSELECTIONNCARETVIRTUALSPACE(int selection, position space)
SCI_GETSELECTIONNCARETVIRTUALSPACE(int selection) → position
SCI_SETSELECTIONNANCHOR(int selection, position anchor)
SCI_GETSELECTIONNANCHOR(int selection) → position
SCI_SETSELECTIONNANCHORVIRTUALSPACE(int selection, position space)
SCI_GETSELECTIONNANCHORVIRTUALSPACE(int selection) → position
SCI_SETSELECTIONNSTART(int selection, position anchor)
SCI_GETSELECTIONNSTART(int selection) → position
SCI_GETSELECTIONNSTARTVIRTUALSPACE(int selection) → position
SCI_SETSELECTIONNEND(int selection, position caret)
SCI_GETSELECTIONNEND(int selection) → position
SCI_GETSELECTIONNENDVIRTUALSPACE(int selection) → position

SCI_SETRECTANGULARSELECTIONCARET(position caret)
SCI_GETRECTANGULARSELECTIONCARET → position
SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE(position space)
SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE → position
SCI_SETRECTANGULARSELECTIONANCHOR(position anchor)
SCI_GETRECTANGULARSELECTIONANCHOR → position
SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE(position space)
SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE → position

SCI_SETADDITIONALSELALPHA(alpha alpha)
SCI_GETADDITIONALSELALPHA → int
SCI_SETADDITIONALSELFORE(colour fore)
SCI_SETADDITIONALSELBACK(colour back)
SCI_SETADDITIONALCARETFORE(colour fore)
SCI_GETADDITIONALCARETFORE → colour
SCI_SETADDITIONALCARETSBLINK(bool additionalCaretsBlink)
SCI_GETADDITIONALCARETSBLINK → bool
SCI_SETADDITIONALCARETSVISIBLE(bool additionalCaretsVisible)
SCI_GETADDITIONALCARETSVISIBLE → bool

SCI_SWAPMAINANCHORCARET
SCI_ROTATESELECTION
SCI_MULTIPLESELECTADDNEXT
SCI_MULTIPLESELECTADDEACH

一次可能有多个选择处于活动状态。按住Ctrl键的同时用鼠标拖动,可以进行更多选择。最新选择是主要选择,它确定自动显示文档的哪一部分。除主选择之外的任何选择都称为附加选择。上一节中的呼叫对主选项进行操作。始终至少有一个选择。该选择可以简化为仅主要选择, SCI_CANCEL 通常将其映射到Esc键。

尽管会记住原始的矩形范围,但矩形选择仍将作为多个选择进行处理,因此对于矩形选择,后续操作可能会有所不同。例如,粘贴矩形选择将每个片段放置在垂直列中。

虚拟空间是每行末尾以外的空间。插入符号可以移动到虚拟空间中,但是在输入某些文本或使用某些其他文本插入命令之前,不会在文档中添加任何实际空间。

将不连续的选择复制到剪贴板时,每个选择都将按顺序添加到剪贴板文本中,且没有定界字符。对于矩形选择,文档的行尾添加在每行文本之后。矩形选择始终从顶行复制到底部,而不是按照选择的顺序复制。不复制虚拟空间。

SCI_SETMULTIPLESELECTION(bool multipleSelection)
SCI_GETMULTIPLESELECTION→bool
启用或禁用多重选择。禁用多项选择后,在用鼠标拖动的同时按住Ctrl键将无法选择多个范围。

SCI_SETADDITIONALSELECTIONTYPING(bool AdditionalSelectionTyping)
SCI_GETADDITIONALSELECTIONTYPING→bool
键入,换行,左/右/上/下光标,退格,删除,起始和结束都可以同时进行多个选择。还允许选择以及单词和行删除命令。

SCI_SETMULTIPASTE(int multiPaste)
SCI_GETMULTIPASTE→int
粘贴到多个选择中时,粘贴的文本可以仅通过SC_MULTIPASTE_ONCE=进入主选择,或者通过SC_MULTIPASTE_EACH= 1 进入每个选择SC_MULTIPASTE_ONCE是默认值。

SCI_SETVIRTUALSPACEOPTIONS(int virtualSpaceOptions)
SCI_GETVIRTUALSPACEOPTIONS→int
可以为矩形选择或在其他情况下或在这两种情况下启用或禁用虚拟空间。可以独立设置三个位标志SCVS_RECTANGULARSELECTION= 1, SCVS_USERACCESSIBLE= 2和 SCVS_NOWRAPLINESTART= 4。 SCVS_NONE= 0,默认值,禁用所有虚拟空间使用。

SCVS_NOWRAPLINESTART防止左箭头移动和选择内容绕到上一行。与虚拟空间结合使用时最常需要此设置,但它是独立设置,因此无需虚拟空间即可工作。

SCI_SETRECTANGULARSELECTIONMODIFIER(int修饰符)
SCI_GETRECTANGULARSELECTIONMODIFIER→int
在GTK和Qt上,可以设置用于指示在与鼠标拖动结合时应创建矩形选择的键。三个可能的值是SCMOD_CTRL= 2,SCMOD_ALT= 4(默认)或SCMOD_SUPER= 8。由于SCMOD_ALT窗口管理器可能已经在使用它,因此窗口管理器可能需要进行配置以允许此选择。 SCMOD_SUPER通常是系统相关的修饰键,例如Windows键盘上的Left Windows键或Mac上的Command键。

SCI_GETSELECTIONS→int
返回当前活动的选择数量。始终至少有一个选择。

SCI_GETSELECTIONEMPTY→bool
如果每个选定范围为空,则返回1,否则返回0。

SCI_CLEARSELECTIONS
将单个空选择设置为0作为唯一选择。

SCI_SETSELECTION(位置插入符号,位置锚点)
将单个选择从anchor设置caret为唯一选择。

SCI_ADDSELECTION(位置插入符号位置锚)
从添加一个新的选择anchor,以caret作为主要的选择保留了所有其他选择其他选择。由于始终至少有一个选择,因此要设置一个选择列表,应先添加第一个选择,SCI_SETSELECTION然后再添加第一个选择SCI_ADDSELECTION

SCI_DROPSELECTIONN(int selection)
如果有多个选择,请删除指示的选择。如果这是主要选择,则将前一个选择作为主要选择,如果是第一个,则最后一个选择成为主要选择。如果只有一个选择,或者没有选择selection,则没有效果。

SCI_SETMAINSELECTION(int选择)
SCI_GETMAINSELECTION→int
选择之一是主选择,用于确定自动显示哪些文本范围。主要选择可能会以不同的颜色或样式不同的插入符号显示。只能将已经存在的选择作为主体。

SCI_SETSELECTIONNCARET(INT选择,位置脱字符号)
SCI_GETSELECTIONNCARET(INT选择)→位置
SCI_SETSELECTIONNCARETVIRTUALSPACE(INT选择,位置空间)
SCI_GETSELECTIONNCARETVIRTUALSPACE(INT选择)→位置
SCI_SETSELECTIONNANCHOR(INT选择,位置锚)
SCI_GETSELECTIONNANCHOR(INT选择)→位置
SCI_SETSELECTIONNANCHORVIRTUALSPACE(INT选择,位置空间)
SCI_GETSELECTIONNANCHORVIRTUALSPACE(int selection)→位置
设置或查询每个现有选择的插入符和锚点的虚拟空间的位置和数量。

SCI_SETSELECTIONNSTART(INT选择,位置锚)
SCI_GETSELECTIONNSTART(INT选择)→位置
SCI_GETSELECTIONNSTARTVIRTUALSPACE(INT选择)→位置
SCI_SETSELECTIONNEND(INT选择,位置脱字符号)
SCI_GETSELECTIONNEND(INT选择)→位置
SCI_GETSELECTIONNENDVIRTUALSPACE(INT选择)→位置
设置或查询的开始和每个已经存在的选择的结束位置。在每个选择的开始和结束时查询虚拟空间。通常用于查询每个范围的文本。选择参数从零开始。

SCI_SETRECTANGULARSELECTIONCARET(位置脱字符号)
SCI_GETRECTANGULARSELECTIONCARET→位置
SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE(位置空间)
SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE→位置
SCI_SETRECTANGULARSELECTIONANCHOR(位置锚)
SCI_GETRECTANGULARSELECTIONANCHOR→位置
SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE(位置空间)
SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE→位置
设置或查询的位置和虚拟空间量为矩形的插入符号和锚选择。设置矩形选择后,将其分成多个选择,每行一个。

SCI_SETADDITIONALSELALPHA(阿尔法阿尔法)
SCI_GETADDITIONALSELALPHA→INT
SCI_SETADDITIONALSELFORE(颜色前)
SCI_SETADDITIONALSELBACK(颜色背面)
修改的附加选择的外观,使他们能够从具有其外观集与主选择来区分 SCI_SETSELALPHASCI_GETSELALPHASCI_SETSELFORE,和 SCI_SETSELBACKSCI_SETADDITIONALSELFORESCI_SETADDITIONALSELBACK调用,直到有没有影响SCI_SETSELFORESCI_SETSELBACK被称为设置为true useSelection *颜色值。随后对SCI_SETSELFORE和的调用 SCI_SETSELBACK将覆盖函数设置的值SCI_SETADDITIONALSEL*

SCI_SETADDITIONALCARETFORE(颜色前)
SCI_GETADDITIONALCARETFORE→颜色
SCI_SETADDITIONALCARETSBLINK(布尔additionalCaretsBlink)
SCI_GETADDITIONALCARETSBLINK→布尔
修改的额外插入记号的外观,使他们能够从具有其外观集与主插入符进行区分 SCI_SETCARETFORESCI_GETCARETFORESCI_SETCARETPERIOD,和 SCI_GETCARETPERIOD

SCI_SETADDITIONALCARETSVISIBLE(bool AdditionalCaretsVisible)
SCI_GETADDITIONALCARETSVISIBLE→bool
确定是否显示其他插入符(默认为true)。

SCI_SWAPMAINANCHORCARET
SCI_ROTATESELECTION
SCI_MULTIPLESELECTADDNEXT
SCI_MULTIPLESELECTADDEACH
可以将这些命令分配给按键,从而可以操作多个选择。 SCI_SWAPMAINANCHORCARET将插入符号移动到主要选择的另一端。 SCI_ROTATESELECTION使下一个选择成为主要选择。
SCI_MULTIPLESELECTADDNEXT将目标中下次出现的主要选择添加到主要选择中。如果当前选择为空,则选择尖号周围的单词。使用电流searchFlags ,因此应用程序可以选择区分大小写和单词搜索的选项。
SCI_MULTIPLESELECTADDEACH与相似, SCI_MULTIPLESELECTADDNEXT但增加了多次,而不仅仅是一次。

滚动和自动滚动

SCI_SETFIRSTVISIBLELINE(line displayLine)
SCI_GETFIRSTVISIBLELINE → line
SCI_SETXOFFSET(int xOffset)
SCI_GETXOFFSET → int
SCI_LINESCROLL(position columns, line lines)
SCI_SCROLLCARET
SCI_SCROLLRANGE(position secondary, position primary)
SCI_SETXCARETPOLICY(int caretPolicy, int caretSlop)
SCI_SETYCARETPOLICY(int caretPolicy, int caretSlop)
SCI_SETVISIBLEPOLICY(int visiblePolicy, int visibleSlop)
SCI_SETHSCROLLBAR(bool visible)
SCI_GETHSCROLLBAR → bool
SCI_SETVSCROLLBAR(bool visible)
SCI_GETVSCROLLBAR → bool
SCI_SETSCROLLWIDTH(int pixelWidth)
SCI_GETSCROLLWIDTH → int
SCI_SETSCROLLWIDTHTRACKING(bool tracking)
SCI_GETSCROLLWIDTHTRACKING → bool
SCI_SETENDATLASTLINE(bool endAtLastLine)
SCI_GETENDATLASTLINE → bool

SCI_SETFIRSTVISIBLELINE(line displayLine)
SCI_GETFIRSTVISIBLELINE→line
这些消息检索并设置Scintilla视图中第一条可见线的行号。文档中的第一行编号为0。该值是可见行,而不是文档行。

SCI_SETXOFFSET(int xOffset)
SCI_GETXOFFSET→int
xOffset是文本视图开始处的水平滚动位置,以像素为单位。值为0是正常位置,第一个文本列在视图左侧可见。

SCI_LINESCROLL(位置列,行线)
这将尝试按您指定的列和线数滚动显示。正数行值会增加屏幕顶部的行数(即,将文本向上移动到用户所关注的位置),负数行值则相反。

列度量是默认样式中空格的宽度。正值会增加视图左边缘的列(即,它们会将文本向左移动到与用户相关的程度)。负值则相反。

也可以看看: SCI_SETXOFFSET

SCI_SCROLLCARET
如果当前位置(如果没有选择,则是插入符号)不可见,则根据当前的插入符号策略滚动视图使其可见。

SCI_SCROLLRANGE(第二位置,第一位置)
将参数位置及其之间的范围滚动到视图中,从而优先于第一位置然后是第二位置。该行为类似于SCI_SCROLLCARET 使用主要位置而不是插入符号的行为。然后努力确保次要位置和之间的范围也是可见的。这可以用于使搜索匹配可见。

SCI_SETXCARETPOLICY(int caretPolicy,int caretSlop)
SCI_SETYCARETPOLICY(int caretPolicy,int caretSlop)
这些设置插入符号策略。的值caretPolicy是的组合 CARET_SLOPCARET_STRICTCARET_JUMPSCARET_EVEN

CARET_SLOP 如果设置,我们可以定义一个斜率值:caretSlop该值定义了插入符号...不需要的不想要的区域(UZ)。该区域被定义为垂直边距附近的像素数量,以及水平边距附近的线数量。通过使插入符号远离边缘,可以在其上下文中看到它。这使得可以完全看到插入记号所在的标识符,并且可以看到当前行及其后的一些行,这些行通常取决于该行。
CARET_STRICT 如果设置,则CARET_SLOP严格执行... 设置的策略如果caretSlop未设置,则插入标记位于显示屏中央,如果设置,则不能进入UZ caretSlop
CARET_JUMPS 如果设置了该选项,则显示将更加有力地移动,因此插入符号可以在相同方向上移动更长的时间,然后再次应用该策略。“ 3UZ”符号用于表示UZ大小的三倍,即距边距的距离。
CARET_EVEN 如果未设置,则不具有对称UZ,而是将左侧和底部UZ分别向上扩展到右侧和顶部UZ。这样,我们倾向于显示有用的信息:大多数代码所在的行的开头,以及插入符号后的行,例如函数的主体。

倾斜 严格 甚至 插入符号可以移至边缘 达到极限(超出可见性
或进入UZ)时,显示...
0 0 0 0 移动到将插入符号放在顶部/右侧
0 0 0 1个 移动一个位置
0 0 1个 0 移动到将插入符号放在顶部/右侧
0 0 1个 1个 以插入符号为中心
0 1个 -- 0 插入符号始终位于显示的顶部/右侧 --
0 1个 -- 1个 不,插入符号始终居中 --
1个 0 0 0 移动以将插入符号从不对称UZ中移出
1个 0 0 1个 搬到插入符号从UZ
1个 0 1个 0 移至将插入符号置于顶部或右侧边缘的3UZ
1个 0 1个 1个 搬到插入符号在边缘的3UZ
1个 1个 -- 0 插入符号始终位于上/右边缘的UZ --
1个 1个 0 1个 否,请避开UZ 移动一个位置
1个 1个 1个 0 否,请避开UZ 搬到插入符号在边缘的3UZ

SCI_SETVISIBLEPOLICY(int visiblePolicy,int visibleSlop)
这确定在SCI_ENSUREVISIBLEENFORCEPOLICY调用时如何确定垂直位置它需要VISIBLE_SLOPVISIBLE_STRICT标记策略参数。在操作上与相似SCI_SETYCARETPOLICY(int caretPolicy, int caretSlop)

SCI_SETHSCROLLBAR(布尔型可见)
SCI_GETHSCROLLBAR→bool
仅在假定的宽度需要水平滚动条时,才显示水平滚动条。如果您不想看到它,请致电 SCI_SETHSCROLLBAR(0)使用SCI_SETHSCROLLBAR(1)再次启用它。 SCI_GETHSCROLLBAR返回当前状态。默认状态是在需要时显示它。

另请参阅:SCI_SETSCROLLWIDTH

SCI_SETVSCROLLBAR(布尔可见)
SCI_GETVSCROLLBAR→bool
默认情况下,始终在需要时显示垂直滚动条。您可以选择使用隐藏或显示它,SCI_SETVSCROLLBAR并使用获取当前状态 SCI_GETVSCROLLBAR

也可以看看: SCI_LINESCROLL

SCI_SETSCROLLWIDTH(int pixelWidth)
SCI_GETSCROLLWIDTH→int
为了提高性能,Scintilla不会测量文档的显示宽度来确定水平滚动条的属性。而是使用假定的宽度。这些消息设置并获取Scintilla假定的文档宽度(以像素为单位)。默认值为2000。为确保可以滚动当前可见线的宽度,请使用 SCI_SETSCROLLWIDTHTRACKING

SCI_SETSCROLLWIDTHTRACKING(布尔跟踪)
SCI_GETSCROLLWIDTHTRACKING→bool
如果启用了滚动宽度跟踪,则将调整滚动宽度以确保可以完全滚动当前显示的所有行。此模式从不将滚动宽度调整得更窄。

SCI_SETENDATLASTLINE(bool endAtLastLine)
SCI_GETENDATLASTLINE→bool
SCI_SETENDATLASTLINE设置滚动范围,以便最大滚动位置在视图底部具有最后一行(默认)。将此设置为false允许在最后一行下方滚动一页。

空格

SCI_SETVIEWWS(int viewWS)
SCI_GETVIEWWS → int
SCI_SETWHITESPACEFORE(bool useSetting, colour fore)
SCI_SETWHITESPACEBACK(bool useSetting, colour back)
SCI_SETWHITESPACESIZE(int size)
SCI_GETWHITESPACESIZE → int
SCI_SETTABDRAWMODE(int tabDrawMode)
SCI_GETTABDRAWMODE → int
SCI_SETEXTRAASCENT(int extraAscent)
SCI_GETEXTRAASCENT → int
SCI_SETEXTRADESCENT(int extraDescent)
SCI_GETEXTRADESCENT → int

SCI_SETVIEWWS(int viewWS)
SCI_GETVIEWWS→int
可以使空白可见,这对于空白很重要的语言(例如Python)可能很有用。空格字符显示为小的中心点,制表符显示为指向右侧的浅箭头。还有一些方法可以控制行尾字符的显示这两个消息设置并获得空白显示模式。viewWS参数可以是以下之一:

SCWS_INVISIBLE 0 正常显示模式,空白显示为空的背景色。
SCWS_VISIBLEALWAYS 1个 空格字符绘制为点和箭头,
SCWS_VISIBLEAFTERINDENT 2 缩进使用的空白通常会显示,但第一个可见字符后会显示为点和箭头。
SCWS_VISIBLEONLYININDENT 3 用于缩进的空白显示为点和箭头。

使用任何其他viewWS的效果是不确定的。

SCI_SETWHITESPACEFORE(bool useSetting,彩色
SCI_SETWHITESPACEBACK(bool useSetting,彩色
默认情况下,可见空白的颜色由使用的词法分析器确定。可以全局设置所有可见空白的前景色和/或背景色,使用SCI_SETWHITESPACEFORE覆盖词法分析器的颜色SCI_SETWHITESPACEBACK

SCI_SETWHITESPACESIZE(int大小)
SCI_GETWHITESPACESIZE→int
SCI_SETWHITESPACESIZE设置用于标记空格字符的点的大小。SCI_GETWHITESPACESIZE消息检索当前大小。值0是有效的,并使点不可见。

SCI_SETTABDRAWMODE(int tabDrawMode)
SCI_GETTABDRAWMODE→int
这两个消息获取并设置当可见空白时如何绘制制表符。tabDrawMode参数可以是以下之一:

SCTD_LONGARROW 0 箭头延伸到制表位之前的默认模式。
SCTD_STRIKEOUT 1个 一直延伸到制表位的水平线。

使用任何其他tabDrawMode的效果是不确定的。

SCI_SETEXTRAASCENT(int extraAscent)
SCI_GETEXTRAASCENT→int
SCI_SETEXTRADESCENT(int extraDescent)
SCI_GETEXTRADESCENT→int
文本以“基准”上的每个字符为基础绘制。从任何样式延伸到基线以上(其“上升”)的最大值,再加上任何样式延伸到基线以下(其“下降”)的最大值,找到一条线的高度。可以在最大上升(SCI_SETEXTRAASCENT)和最大下降(SCI_SETEXTRADESCENT)处添加空格,以在行之间留出更多空间。这样做可以使文本更易于阅读或容纳下划线或突出显示。

光标

SCI_SETCURSOR(int cursorType)
SCI_GETCURSOR→整数

SCI_SETCURSOR(int cursorType)
SCI_GETCURSOR→int
通常以上下文相关的方式选择光标,因此在空白处的游标与在文本上方的游标会有所不同。执行慢动作时,您可能希望更改为等待光标。用设置光标类型SCI_SETCURSORcursorType 参数可以是:

SC_CURSORNORMAL -1 显示普通光标。
SC_CURSORWAIT  4 当鼠标悬停在Scintilla窗口上或归Scintilla窗口所有时,将显示等待光标。

游标值1到7已定义了游标,但仅SC_CURSORWAIT是有用的可控制的。其他值cursorType引起指针显示。SCI_GETCURSOR消息将返回您设置的最后一个游标类型,SC_CURSORNORMAL如果尚未设置游标类型,则返回 (-1)。

鼠标捕捉

SCI_SETMOUSEDOWNCAPTURES(布尔捕获)
SCI_GETMOUSEDOWNCAPTURES→bool
SCI_SETMOUSEWHEELCAPTURES(布尔捕获)
SCI_GETMOUSEWHEELCAPTURES→bool

SCI_SETMOUSEDOWNCAPTURES(布尔捕获)
SCI_GETMOUSEDOWNCAPTURES→bool
在Scintilla中按下鼠标时,将捕获它,因此将来的鼠标移动事件将发送到Scintilla。可以通过关闭此行为 SCI_SETMOUSEDOWNCAPTURES(0)

SCI_SETMOUSEWHEELCAPTURES(布尔捕获)
SCI_GETMOUSEWHEELCAPTURES→bool
在Windows上WM_MOUSEWHEEL,即使鼠标指针不在 Scintilla编辑器窗口附近,Scintilla也会捕获所有具有焦点的消息。可以更改此行为,SCI_SETMOUSEWHEELCAPTURES(0)以便Scintilla将WM_MOUSEWHEEL消息传递到其父窗口。如果鼠标指针在编辑器窗口上方,Scintilla仍然会对鼠标滚轮做出反应。

行尾

Scintilla可以处理主要的行尾约定,并且根据设置和当前的词法分析器,还支持其他Unicode行尾。

Scintilla可以解释任何Macintosh(\ r),Unix(\ n)和Windows(\ r \ n)行尾。当用户按下Enter键时,这些行结束字符串之一将插入缓冲区。在Windows中,默认值为\ r \ n,在Unix中,默认值为\ n,但这可以通过SCI_SETEOLMODE消息进行更改您还可以将整个文档转换为这些行尾之一SCI_CONVERTEOLS最后,您可以选择以显示行尾SCI_SETVIEWEOL

对于UTF-8编码,打开Unicode行尾并且当前的词法分析器也支持Unicode行尾时,可以选择解释另外三个Unicode行尾,即Next Line(NEL=U+0085),Line Separator(LS=U+2028)和Paragraph Separator(PS=U+2029)。

SCI_SETEOLMODE(int eolMode)
SCI_GETEOLMODE→int
SCI_CONVERTEOLS(int eolMode)
SCI_SETVIEWEOL(布尔可见)
SCI_GETVIEWEOL→bool
SCI_GETLINEENDTYPESSUPPORTED→int
SCI_SETLINEENDTYPESALLOWED(int
lineEndBitSEND→
SINT

SCI_SETEOLMODE(int eolMode)
SCI_GETEOLMODE→int
SCI_SETEOLMODE设置当用户按下Enter键时添加到文档中的字符。您可以设置eolModeSC_EOL_CRLF(0), SC_EOL_CR(1)或SC_EOL_LF(2)之一。SCI_GETEOLMODE 消息检索当前状态。

SCI_CONVERTEOLS(int eolMode)
此消息将文档中所有行尾字符更改为match eolMode有效值为:SC_EOL_CRLF(0),SC_EOL_CR (1)或SC_EOL_LF(2)。

SCI_SETVIEWEOL(布尔型可见)
SCI_GETVIEWEOL→bool
通常,行尾字符是隐藏的,但是SCI_SETVIEWEOL允许您通过设置visible true(或 false显示(或隐藏)它们行的字符的端部的可见呈现类似于 (CR)(LF)(CR)(LF)SCI_GETVIEWEOL 返回当前状态。

SCI_GETLINEENDTYPESSUPPORTED→int
SCI_GETLINEENDTYPESSUPPORTED报告当前词法分析器支持的不同类型的行尾。尽管当前只有一个选择SC_LINE_END_TYPE_DEFAULT(0)或SC_LINE_END_TYPE_UNICODE(1),但还是有一点设置与Unicode行尾有关的其他消息也使用这些值。

SCI_SETLINEENDTYPESALLOWED(int lineEndBitSet)
SCI_GETLINEENDTYPESALLOWED→int
默认情况下,仅解释ASCII行尾。可能要求使用Unicode行尾, SCI_SETLINEENDTYPESALLOWED(SC_LINE_END_TYPE_UNICODE) 但这将无效,除非词法分析器也允许您使用Unicode行尾。 SCI_GETLINEENDTYPESALLOWED返回当前状态。

SCI_GETLINEENDTYPESACTIVE→int
SCI_GETLINEENDTYPESACTIVE报告Scintilla当前解释的行尾集。是的SCI_GETLINEENDTYPESSUPPORTED & SCI_GETLINEENDTYPESALLOWED

支持选择,导航和搜索单词。

单词是来自特定字符集的连续字符序列。有4个类别定义单词:单词,空格,标点符号和行尾,每个类别在单词功能中都有作用。双击将选择该点处的单词,该单词可以是单词,标点符号或空白字节的序列。不能通过双击选择行尾,但它们会充当单词分隔符。

单词是根据字符定义的,每个类别中的字符集都可以在一定程度上进行自定义。NUL字符(0)始终是一个空格,因为用于设置类别的API使用NUL终止的字符串。对于单字节编码,可以将类别分配给任何字符(1到0xFF)。对于多字节编码,可以将类别分配给从1到0x7F的字符,并且静态行为从0x80开始。对于UTF-8,来自0x80的字符将使用基于其Unicode常规类别的类别。对于亚洲编码,代码页932、936、949、950和1361将0x80以后的字符视为单词字符。

编程语言中的标识符通常是带有大写字母(aCamelCaseIdentifier)或下划线(an_under_bar_ident)的单词序列,用于标记单词边界。SCI_WORDPART*命令用于字部位之间移动: SCI_WORDPARTLEFTSCI_WORDPARTLEFTEXTENDSCI_WORDPARTRIGHT,和 SCI_WORDPARTRIGHTEXTEND

SCI_WORDENDPOSITION(位置pos,仅布尔型WordCharacters)→位置
SCI_WORDSTARTPOSITION(位置pos,仅布尔型WordCharacters)→位置
SCI_ISRANGEWORD(位置开始,位置终止)→bool
SCI_SETWORDCHARS(<未使用>,const char *字符)
SCI_GETWORDCHARS(<未使用> )→INT
SCI_SETWHITESPACECHARS(<未使用>,常量字符*字符)
SCI_GETWHITESPACECHARS(<未使用>,字符*字符)→INT
SCI_SETPUNCTUATIONCHARS(<未使用>,常量字符*字符)
SCI_GETPUNCTUATIONCHARS(<未使用>,字符*字符)→INT
SCI_SETCHARSDEFAULT
SCI_SETCHARACTERCATEGORYOPTIMIZATION(int countCharacters)
SCI_GETCHARACTERCATEGORYOPTIMIZATION→整数

SCI_WORDENDPOSITION(位置pos,仅布尔型WordCharacters)→位置
SCI_WORDSTARTPOSITION(位置pos,仅bool OnlyWordCharacters)→位置
这些消息使用与Scintilla内部使用的单词相同的定义返回单词的开头和结尾。您可以使用设置自己的字符列表,以算作单词 SCI_SETWORDCHARS该位置设置起点或搜索,在搜索终点时是向前的,而在搜索起点时是反向的。

SCI_ISRANGEWORD(位置开始,位置结束)→bool
范围是开始还是结束一个单词或一组单词?此消息检查开始是在单词开始过渡处,还是结束在单词结束过渡处。它不会检查范围内是否有空格。

SCI_ISRANGEWORD(位置开始,位置结束)→bool

设置onlyWordCharacterstrue(1)可停止在搜索方向上的第一个非单词字符处搜索。如果onlyWordCharactersfalse(0),则搜索方向上的第一个字符会将搜索类型设置为单词或非单词,并且搜索将在第一个不匹配的字符处停止。搜索也会在文档的开头或结尾处终止。

如果“ w”代表单词字符,则“。” 代表非单词字符,“ |” 代表位置,truefalse为状态 onlyWordCharacters

初始状态 结束,真实 结束,假 开始,真实 开始,错误
..ww .. | ..ww .. ..ww .. | ..ww .. ..ww .... | ww .. ..ww .. | ..ww .. ..ww | ..ww ..
.... ww | ww .... .... wwww | .... .... wwww | .... .... | wwww .... .... | wwww ....
..ww | ..ww .. ..ww | ..ww .. ..ww .... | ww .. .. | ww..ww .. .. | ww..ww ..
..ww .... | ww .. ..ww .... ww | .. ..ww .... ww | .. ..ww .... | ww .. ..ww | ..ww ..

SCI_SETWORDCHARS(<unused>,const char * characters)
此消息定义哪些字符是单词类别的成员。在处理此功能之前,将字符类别设置为默认值。例如,如果您在字符集中不允许使用“ _”,请使用:
SCI_SETWORDCHARS(0, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");

SCI_GETWORDCHARS(<未使用>,char *字符)→int
这将用单词中包含的所有字符填充characters参数。characters参数必须足够大以容纳所有字符。如果characters参数为0,则返回应分配的长度来存储整个集合。

对于多字节编码,此API不会为0x80及更高版本返回有意义的值。

SCI_SETWHITESPACECHARS(<unused>,const char * characters)
SCI_GETWHITESPACECHARS(<unused>,char * characters)→int
类似于SCI_SETWORDCHARS,该消息使用户可以定义Scintilla将哪些字符视为空白。设置空白字符可以使用户微调Scintilla的行为,例如将光标移动到单词的开头或结尾。例如,通过将标点符号char定义为空格,当用户按下ctrl + left或ctrl + right时,它们将被跳过。此后应调用此函数,SCI_SETWORDCHARS因为它将空白字符重置为默认设置。 SCI_GETWHITESPACECHARS行为与相似SCI_GETWORDCHARS

SCI_SETPUNCTUATIONCHARS(<未使用>,const char *字符)
SCI_GETPUNCTUATIONCHARS(<未使用>,char *字符)→int
SCI_SETWORDCHARS相似SCI_SETWHITESPACECHARS,该消息使用户可以定义Scintilla将哪些字符视为标点符号。 SCI_GETPUNCTUATIONCHARS行为与相似SCI_GETWORDCHARS

SCI_SETCHARSDEFAULT
使用默认的单词和空格字符集。这会将空格设置为空格,制表符和其他代码小于0x20的字符,并将字字符设置为字母数字和'_'。

SCI_SETCHARACTERCATEGORYOPTIMIZATION(int countCharacters)
SCI_GETCHARACTERCATEGORYOPTIMIZATION→int
优化字符类别功能的速度,例如确定字符是空格还是数字,但会浪费内存。通常用于Unicode文档。countCharacters参数确定从0开始将多少个字符添加到查找表,每个字符使用一个字节。覆盖可能在文档中使用的字符集是合理的,因此0x100表示??简单的罗马文本,0x1000表示大多数简单的字母,0x10000表示大多数东亚语言,0x110000表示所有可能的字符。

Word键盘命令为:

造型

样式消息允许您将样式分配给文本。如果一个标准的词法分析器可以满足您的样式需求,或者您可以编写自己的样式法,那么词法分析器可能是对文档进行样式设置的最简单方法。如果选择使用容器进行样式设置,则可以使用SCI_SETLEXER命令来选择 SCLEX_CONTAINER,在这种情况下,每次需要样式显示文本时都会向容器发送通知作为另一种选择,您可以使用空闲时间来设置文档样式。即使使用词法分析器,也可以使用样式命令来标记编译器检测到的错误。可以使用以下命令。SCN_STYLENEEDED

SCI_GETENDSTYLED → position
SCI_STARTSTYLING(position start, int unused)
SCI_SETSTYLING(position length, int style)
SCI_SETSTYLINGEX(position length, const char *styles)
SCI_SETIDLESTYLING(int idleStyling)
SCI_GETIDLESTYLING → int
SCI_SETLINESTATE(line line, int state)
SCI_GETLINESTATE(line line) → int
SCI_GETMAXLINESTATE → int

SCI_GETENDSTYLED→位置
Scintilla保留了可能正确设置样式的最后一个字符的记录。设置样式后面的字符时,此按钮将向前移动;如果更改其前面的文档的文本,则该按钮将向后移动。在绘制文本之前,检查此位置以查看是否需要任何样式,如果需要,则将SCN_STYLENEEDED通知消息发送到容器。容器可以发送信息SCI_GETENDSTYLED以开始需要样式的地方。Scintilla总是会要求对整条线进行样式设置。

SCI_STARTSTYLING(位置开始,未使用int)
这通过设置样式位置start为开始为样式做准备在较早的版本中使用了未使用的参数,但现在将其忽略。之后 SCI_STARTSTYLINGSCI_SETSTYLING为每个词法实体发送多个消息以样式化或SCI_SETSTYLINGEX以块形式发送给style。

SCI_SETSTYLING(位置长度,int样式)
此消息设置length从样式位置开始字符样式,然后将样式位置增加length,以准备下一次调用。 SCI_STARTSTYLING应该在第一次调用之前调用。

SCI_SETSTYLINGEX(位置长度,const char * styles)
作为SCI_SETSTYLING对每个字节应用相同样式的的替代,您可以使用此消息,该样式length从样式位置指定每个字节的样式,然后将样式位置增加length,准备好下一个电话。 SCI_STARTSTYLING应该在第一次调用之前调用。

SCI_SETIDLESTYLING(int idleStyling)
SCI_GETIDLESTYLING→int
默认情况下为SC_IDLESTYLING_NONE(0),对所有当前可见的文本执行语法样式设置,然后再显示它。在很大的文件上,这可能会使向下滚动变慢。使用SC_IDLESTYLING_TOVISIBLE(1),在显示之前执行少量的样式设置,然后作为空闲时间任务在后台逐步执行进一步的样式设置。这可能会导致文本最初显示为无色,然后一段时间后变为彩色。当前可见部分之后的文本可以在背景中使用SC_IDLESTYLING_AFTERVISIBLE(2)设置样式要在背景中的可见文本之前和之后设置样式,请使用SC_IDLESTYLING_ALL(3)。

由于换行还需要执行样式设置,并且还需要使用空闲时间,因此当文档显示为换行时,此设置无效。

SCI_SETLINESTATE(行状态,int状态)
SCI_GETLINESTATE(行状态)→int
除了为每个字符存储的8位词法状态外,每行还存储一个整数。可以将其用于较长的解析状态,例如当前的脚本语言在ASP页中。使用SCI_SETLINESTATE设置整数值,SCI_GETLINESTATE来获取值。更改该值将产生SC_MOD_CHANGELINESTATE通知。

SCI_GETMAXLINESTATE→int
返回具有任何行状态的最后一行。

风格定义

尽管上述样式设置消息更改了与文本关联的样式编号,但是这些消息定义了如何直观地解释这些样式编号。可以设置256种词法分析器样式,编号为0到STYLE_MAX(255)。还有一些预定义的编号样式,从32开始STYLE_。定义了以下*常量。

STYLE_DEFAULT 32 此样式定义SCI_STYLECLEARALL使用消息时所有样式接收的属性
STYLE_LINENUMBER 33 此样式设置用于在行号边距中显示行号的文本的属性。为此样式设置的背景颜色还会为所有未设置任何折叠掩码位的边距设置背景颜色。也就是说,任何余量为 mask & SC_MASK_FOLDERS0的信息SCI_SETMARGINMASKN
STYLE_BRACELIGHT 34 此样式设置在用SCI_BRACEHIGHLIGHT消息突出显示大括号和用突出显示相应缩进时使用的属性SCI_SETHIGHLIGHTGUIDE
STYLE_BRACEBAD 35 此样式设置在用SCI_BRACEBADLIGHT 消息标记不匹配的花括号时使用的显示属性
STYLE_CONTROLCHAR 36 此样式设置绘制控制字符时使用的字体。仅使用字体,大小,粗体,斜体和字符集属性,而不使用颜色属性。另请参阅:SCI_SETCONTROLCHARSYMBOL
STYLE_INDENTGUIDE 37 此样式设置绘制缩进指南时使用的前景色和背景色。
STYLE_CALLTIP 38 通话提示通常使用定义的字体属性STYLE_DEFAULT使用SCI_CALLTIPUSESTYLE Causes呼叫提示来改用此样式。仅使用字体名称,字体大小,前景色和背景色以及字符集属性。
STYLE_FOLDDISPLAYTEXT 39 这是用于绘制附加到折叠文本的文本标签的样式。
STYLE_LASTPREDEFINED 39 为了使客户端代码更容易发现预定义样式的范围,将其设置为最后一个预定义样式的样式号。
STYLE_MAX 255 这不是样式,而是可以设置的最大样式数。可以使用STYLE_LASTPREDEFINED之间的样式STYLE_MAX

对于每种样式,您可以设置字体名称,大小以及粗体,斜体和下划线,前景和背景颜色以及字符集的使用。您也可以选择隐藏给定样式的文本,将所有字符显示为大写或小写,并从行中的最后一个字符到行尾填充(对于嵌入式语言)。还有一个实验属性可以使文本变为只读。

如何使用样式完全取决于您。如果要使用语法着色,则可以将样式0用于空白,将样式1用于数字,将样式2用于关键字,将样式3用于字符串,将样式4用于预处理器,将样式5用于运算符,等等。

SCI_STYLERESETDEFAULT
SCI_STYLECLEARALL
SCI_STYLESETFONT(int style, const char *fontName)
SCI_STYLEGETFONT(int style, char *fontName) → int
SCI_STYLESETSIZE(int style, int sizePoints)
SCI_STYLEGETSIZE(int style) → int
SCI_STYLESETSIZEFRACTIONAL(int style, int sizeHundredthPoints)
SCI_STYLEGETSIZEFRACTIONAL(int style) → int
SCI_STYLESETBOLD(int style, bool bold)
SCI_STYLEGETBOLD(int style) → bool
SCI_STYLESETWEIGHT(int style, int weight)
SCI_STYLEGETWEIGHT(int style) → int
SCI_STYLESETITALIC(int style, bool italic)
SCI_STYLEGETITALIC(int style) → bool
SCI_STYLESETUNDERLINE(int style, bool underline)
SCI_STYLEGETUNDERLINE(int style) → bool
SCI_STYLESETFORE(int style, colour fore)
SCI_STYLEGETFORE(int style) → colour
SCI_STYLESETBACK(int style, colour back)
SCI_STYLEGETBACK(int style) → colour
SCI_STYLESETEOLFILLED(int style, bool eolFilled)
SCI_STYLEGETEOLFILLED(int style) → bool
SCI_STYLESETCHARACTERSET(int style, int characterSet)
SCI_STYLEGETCHARACTERSET(int style) → int
SCI_STYLESETCASE(int style, int caseVisible)
SCI_STYLEGETCASE(int style) → int
SCI_STYLESETVISIBLE(int style, bool visible)
SCI_STYLEGETVISIBLE(int style) → bool
SCI_STYLESETCHANGEABLE(int style, bool changeable)
SCI_STYLEGETCHANGEABLE(int style) → bool
SCI_STYLESETHOTSPOT(int style, bool hotspot)
SCI_STYLEGETHOTSPOT(int style) → bool

SCI_STYLERESETDEFAULT
该消息重置STYLE_DEFAULT为初始化Scintilla时的状态。

SCI_STYLECLEARALL
该消息将所有样式设置为具有与相同的属性STYLE_DEFAULT如果要为语法着色设置Scintilla,则您设置的词汇样式可能会非常相似。设置样式的一种方法是:
1.设置STYLE_DEFAULT所有样式的共同特征。
2.用于SCI_STYLECLEARALL将其复制到所有样式。
3.设置样式属性,使您的词法样式与众不同。

SCI_STYLESETFONT(int样式,const char * fontName)
SCI_STYLEGETFONT(int样式,char * fontName NUL终止)→int
SCI_STYLESETSIZE(int样式,int sizePoints)
SCI_STYLEGETSIZE(int样式)→int
SCI_STYLESETSIZESGETSUNDSINTSZEFRACTIONAL(int
SINT,式)→INT
SCI_STYLESETBOLD(INT风格,布尔粗体)
SCI_STYLEGETBOLD(INT风格)→布尔
SCI_STYLESETWEIGHT(INT风格,INT重量)
SCI_STYLEGETWEIGHT(INT风格)→INT
SCI_STYLESETITALIC(INT风格,布尔斜体)
SCI_STYLEGETITALIC(INT风格)→bool的
这些消息(加号SCI_STYLESETCHARACTERSET)设置用于将您请求的字体与可用字体匹配的字体属性。

fontName是一个零终止的字符串保持一个字体的名称。在Windows下,仅使用名称的前32个字符,名称被解码为UTF-8,并且名称不区分大小写。对于内部缓存,Scintilla会按名称跟踪字体,并且确实在乎字体名称的大小写,因此请保持一致。在GTK上,Pango用于显示文本,并且名称直接发送给Pango,而无需进行转换。在Qt上,名称被解码为UTF-8。在可可粉上,名称被解码为MacRoman。

通过将大小乘以100(),可以将大小设置为的点总数,也可以将SCI_STYLESETSIZE 分数的大小设置为分数的百分之一例如,使用设置9.4点的文本大小SCI_STYLESETSIZEFRACTIONALSC_FONT_SIZE_MULTIPLIERSCI_STYLESETSIZEFRACTIONAL(<style>, 940)

字体的粗体或粗体可以使用SCI_STYLESETBOLD设置SCI_STYLESETWEIGHT权重是介于1和999之间的数字,其中1表示非常轻,而999表示非常重。尽管可以使用任何值,但是字体通常通常仅支持2到4个权重,而三个权重足够常见以使用符号名: SC_WEIGHT_NORMAL(400), SC_WEIGHT_SEMIBOLD(600)和 SC_WEIGHT_BOLD(700)。SCI_STYLESETBOLD消息采用布尔型参数,选择0 SC_WEIGHT_NORMAL 和1 SC_WEIGHT_BOLD

SCI_STYLESETUNDERLINE(int样式,布尔下划线)
SCI_STYLEGETUNDERLINE(int样式)→bool
您可以设置要加下划线的样式。下划线以前景色绘制。具有包括下划线属性的样式的所有字符都带有下划线,即使它们是空格。

SCI_STYLESETFORE(int样式,前景色
SCI_STYLEGETFORE(int样式)→颜色
SCI_STYLESETBACK(int样式,后
SCI_STYLEGETBACK(int样式)→color
文本以前景色绘制。每个字符单元格中未被字符占用的空间以背景色绘制。

SCI_STYLESETEOLFILLED(int样式,bool eolFilled)
SCI_STYLEGETEOLFILLED(int样式)→bool
如果行中的最后一个字符具有设置了此属性的样式,则该行的剩余部分(直到窗口右边缘)将填充背景色集最后一个字符。当文档包含另一种语言的嵌入式部分(例如带有嵌入式JavaScript的HTML页面)时,此功能很有用。通过设置eolFilledtrue 和一致的背景色(从对HTML样式设置背景颜色不同),以所有的JavaScript风格则JavaScript的部分将来自HTML很容易区分。

SCI_STYLESETCHARACTERSET(int样式,int字符集)
SCI_STYLEGETCHARACTERSET(int样式)→int
您可以设置样式以使用与默认字符集不同的字符集。这些字符集可能有用的地方是注释和文字字符串。例如, SCI_STYLESETCHARACTERSET(SCE_C_STRING, SC_CHARSET_RUSSIAN)将确保俄语中的字符串将在C和C ++中正确显示(这SCE_C_STRING是C和C ++词法分析器用于显示文字字符串的样式号;其值为6)。此功能在Windows和GTK上的工作方式有所不同。
默认字符集为SC_CHARSET_DEFAULT

SC_CHARSET_ANSISC_CHARSET_DEFAULT指定欧洲Windows代码页1252,除非已设置代码页。

字符集 视窗 GTK 可可
SC_CHARSET_ANSI ? ? ?(8859-1)
SC_CHARSET_ARABIC ? ?
SC_CHARSET_BALTIC ? ?
SC_CHARSET_CHINESEBIG5 ? ?
SC_CHARSET_DEFAULT ? ?(8859-1) ?(8859-1)
SC_CHARSET_EASTEUROPE ? ? ?
SC_CHARSET_GB2312 ? ? ?
SC_CHARSET_GREEK ? ?
SC_CHARSET_HANGUL ? ? ?
SC_CHARSET_HEBREW ? ?
SC_CHARSET_JOHAB ? ?
SC_CHARSET_MAC ? ?
SC_CHARSET_OEM ? ?
SC_CHARSET_RUSSIAN ?(cp1251) ?(koi8-r) ?(cp1251)
SC_CHARSET_SHIFTJIS ? ? ?
SC_CHARSET_SYMBOL ? ?
SC_CHARSET_THAI ? ?
SC_CHARSET_TURKISH ? ?
SC_CHARSET_VIETNAMESE ? ?
SC_CHARSET_OEM866 ?(cp866)
SC_CHARSET_CYRILLIC ?(cp1251) ?(cp1251)
SC_CHARSET_8859_15 ? ?

SCI_STYLESETCASE(int样式,int caseVisible)
SCI_STYLEGETCASE(int样式)→int int
的值caseVisible确定如何显示文本。您可以设置大写(SC_CASE_UPPER,1)或小写(SC_CASE_LOWER,2)或驼峰式(SC_CASE_CAMEL,3)或正常显示(SC_CASE_MIXED,0)。这不会更改存储的文本,只会更改其显示方式。

SCI_STYLESETVISIBLE(int样式,布尔型可见)
SCI_STYLEGETVISIBLE(int样式)→bool
文本通常可见。但是,您可以通过将样式visible设置为0 来完全隐藏它。 这可以用于隐藏HTML或XML中的嵌入式格式说明或超文本关键字。用户操作可能无法删除不可见的文本,但是应用程序可以通过调用SCI_DELETERANGE删除不可见的文本

SCI_STYLESETCHANGEABLE(int样式,布尔值可更改)
SCI_STYLEGETCHANGEABLE(int样式)→bool
这是一个实验性且未完全实现的样式属性。默认设置已 changeable设置,true但设置后将false设为只读文本。用户无法在不可更改的文本内移动插入符号,并且用户无法删除不可更改的文本。应用程序可以通过调用SCI_DELETERANGE删除不可更改的文本

SCI_STYLESETHOTSPOT(int样式,布尔热点)
SCI_STYLEGETHOTSPOT(int样式)→bool
此样式用于标记可以检测鼠标单击的文本范围。光标更改为移交热点,并且前景和背景颜色可能会更改,并且出现下划线表示这些区域对单击敏感。这可用于允许超链接到其他文档。

插入符号,选择和热点样式

通过更改前景色和/或背景色来显示选择。如果未设置其中之一,则该属性不会更改。默认设置是通过将背景更改为浅灰色,并使前景与未选择时相同,来显示选择。如果没有选择,则当前插入点由文本插入符号标记。这是一条垂直线,通常会不断闪烁以吸引用户的注意。

SCI_SETSELFORE(bool useSetting, colour fore)
SCI_SETSELBACK(bool useSetting, colour back)
SCI_SETSELALPHA(alpha alpha)
SCI_GETSELALPHA → int
SCI_SETSELEOLFILLED(bool filled)
SCI_GETSELEOLFILLED → bool
SCI_SETCARETFORE(colour fore)
SCI_GETCARETFORE → colour
SCI_SETCARETLINEVISIBLE(bool show)
SCI_GETCARETLINEVISIBLE → bool
SCI_SETCARETLINEBACK(colour back)
SCI_GETCARETLINEBACK → colour
SCI_SETCARETLINEBACKALPHA(alpha alpha)
SCI_GETCARETLINEBACKALPHA → int
SCI_SETCARETLINEFRAME(int width)
SCI_GETCARETLINEFRAME → int
SCI_SETCARETLINEVISIBLEALWAYS(bool alwaysVisible)
SCI_GETCARETLINEVISIBLEALWAYS → bool
SCI_SETCARETPERIOD(int periodMilliseconds)
SCI_GETCARETPERIOD → int
SCI_SETCARETSTYLE(int caretStyle)
SCI_GETCARETSTYLE → int
SCI_SETCARETWIDTH(int pixelWidth)
SCI_GETCARETWIDTH → int
SCI_SETHOTSPOTACTIVEFORE(bool useSetting, colour fore)
SCI_GETHOTSPOTACTIVEFORE → colour
SCI_SETHOTSPOTACTIVEBACK(bool useSetting, colour back)
SCI_GETHOTSPOTACTIVEBACK → colour
SCI_SETHOTSPOTACTIVEUNDERLINE(bool underline)
SCI_GETHOTSPOTACTIVEUNDERLINE → bool
SCI_SETHOTSPOTSINGLELINE(bool singleLine)
SCI_GETHOTSPOTSINGLELINE → bool
SCI_SETCARETSTICKY(int useCaretStickyBehaviour)
SCI_GETCARETSTICKY → int
SCI_TOGGLECARETSTICKY

SCI_SETSELFORE(bool useSetting,彩色
SCI_SETSELBACK(bool useSetting,彩色
您可以选择用这两条消息覆盖默认的选择颜色。如果你设置你所提供的颜色用于useSelection*Colourtrue如果将其设置为false,则使用默认样式的着色,并且 foreback 参数无效。

SCI_SETSELALPHA(alpha alpha)
SCI_GETSELALPHA→int
通过设置Alpha值,可以以选择背景颜色半透明地绘制选择。

SCI_SETSELEOLFILLED(布尔型)
SCI_GETSELEOLFILLED→bool
通过设置此属性,可以将选择绘制到右侧边框。

SCI_SETCARETFORE(color fore
SCI_GETCARETFORE→color
插入符号的颜色可以用设置SCI_SETCARETFORE和检索 SCI_GETCARETFORE

SCI_SETCARETLINEVISIBLE(布尔显示)
SCI_GETCARETLINEVISIBLE→bool
SCI_SETCARETLINEBACK(彩色后)
SCI_GETCARETLINEBACK→颜色
SCI_SETCARETLINEBACKALPHA(阿尔法 alpha)
SCI_GETCARETLINEBACKALPHA→int
SCI_SETCARETLINEFRAME 可以使包含以下内容的消息→int 随心所欲选择

换行。为此,请使用设置背景颜色 SCI_SETCARETLINEBACK,然后使用SCI_SETCARETLINEVISIBLE(true)启用效果。您可以使用取消效果SCI_SETCARETLINEVISIBLE(false)他们俩SCI_GETCARET*函数返回状态和颜色。当一行具有会改变背景颜色的标记时,这种形式的背景颜色具有最高优先级。插入符号线也可以半透明地绘制,从而可以显示其他背景颜色。这是通过调用SCI_SETCARETLINEBACKALPHA来设置alpha(半透明)值来完成的。当Alpha值不是SC_ALPHA_NOALPHA时,将在所有其他特征之后绘制插入符号线,因此将影响所有其他特征的颜色。另外,SCI_SETCARETLINEFRAME也可以用来显示加框的插入符号线,而不用填充整个背景。设置width!= 0启用此选项,将width = 0禁用。

SCI_SETCARETLINEVISIBLEALWAYS( 始终显示布尔值)
SCI_GETCARETLINEVISIBLEALWAYS→bool
选择此选项,即使在窗口未聚焦时也使插入标记线始终可见。默认行为SCI_SETCARETLINEVISIBLEALWAYS(false)插入符号仅在窗口处于焦点时可见。

SCI_SETCARETPERIOD(int periodMilliseconds)
SCI_GETCARETPERIOD→int
可以设置插入符号闪烁的速率,该速率SCI_SETCARETPERIOD确定更改状态之前插入符号可见或不可见的时间(以毫秒为单位)。将周期设置为0将停止插入符号闪烁。默认值为500毫秒。 SCI_GETCARETPERIOD返回当前设置。

SCI_SETCARETSTYLE(int caretStyle)
SCI_GETCARETSTYLE→int
可以将插入符的样式设置SCI_SETCARETSTYLE为行插入符(CARETSTYLE_LINE = 1)或块插入符(CARETSTYLE_BLOCK = 2)(对于插入模式(低4位,CARETSTYLE_INS_MASK),与a组合)改写模式(位4)使用尖头插入符(CARETSTYLE_OVERSTRIKE_BAR = 0)或块插入符(CARETSTYLE_OVERSTRIKE_BLOCK = 16),或者根本不绘制(CARETSTYLE_INVISIBLE = 0)。插入模式的默认值是行插入符号(CARETSTYLE_LINE = 1),改写模式的默认值是钢筋插入符号(CARETSTYLE_OVERSTRIKE_BAR = 0)。您可以使用确定当前的插入符样式设置SCI_GETCARETSTYLE

当范围的插入符结束处在末端并选择了块插入符样式时,将在选择内容内而不是之后绘制该块。可以使用选项(CARETSTYLE_BLOCK_AFTER = 256)进行切换。

尽管光标将某些字体(如Thai Fonts)(可能还有其他字体)放在这些字符上时,有时也会显得有些奇怪,但方块插入符可以成功地绘制大多数组合字符序列和多字节字符序列,这可能会导致仅绘制光标字符序列的一部分。这在Windows平台上最为明显。

SCI_SETCARETWIDTH(int pixelWidth)
SCI_GETCARETWIDTH→int
可以将行插入符号的宽度设置SCI_SETCARETWIDTH为0到20像素之间的值。默认宽度为1像素。您可以使用读取当前宽度 SCI_GETCARETWIDTH宽度0会使插入符号不可见,类似于将插入符号样式设置为CARETSTYLE_INVISIBLE(尽管不可互换)。仅当将光标样式设置为行插入符号模式时,此设置才会影响光标的宽度,而不会影响块插入符号的宽度。

SCI_SETHOTSPOTACTIVEFORE(布尔useSetting,颜色脱颖而出)
SCI_GETHOTSPOTACTIVEFORE→颜色
SCI_SETHOTSPOTACTIVEBACK(布尔useSetting, 颜色回)
SCI_GETHOTSPOTACTIVEBACK→颜色
SCI_SETHOTSPOTACTIVEUNDERLINE(布尔下划线)
SCI_GETHOTSPOTACTIVEUNDERLINE→布尔
SCI_SETHOTSPOTSINGLELINE(布尔单线)
SCI_GETHOTSPOTSINGLELINE→BOOL
当光标悬停在文本的风格与热点属性集,则可以修改默认颜色,并使用这些设置绘制下划线。单行模式可阻止热点自动换行。

SCI_SETCARETSTICKY(int useCaretStickyBehaviour)
SCI_GETCARETSTICKY→int
SCI_TOGGLECARETSTICKY
这些消息用于设置,获取或切换插入符的设置。

设置为SC_CARETSTICKY_OFF(0)时,粘滞标记关闭;当移动到不同的行时,所有文本更改(以及所有插入符号位置更改)都将记住插入符号的新水平位置。这是默认值。

设置为SC_CARETSTICKY_ON(1)时,粘滞标记打开,并且唯一使编辑器记住水平插入符号位置的事情是使用鼠标或键盘(左/右箭头键,Home / End键等)移动插入符号。 。

设置为SC_CARETSTICKY_WHITESPACE(2)时,除一种特殊情况外,插入符号的行为类似于模式0(关闭)。插入空格或制表符时。(包括粘贴空格/制表符 -撤消,重做等均不表现出此行为。)

SCI_TOGGLECARETSTICKY从切换SC_CARETSTICKY_ONSC_CARETSTICKY_WHITESPACESC_CARETSTICKY_OFF和从SC_CARETSTICKY_OFFSC_CARETSTICKY_ON

角色表示

某些字符(例如控制字符和无效字节)没有视觉字形或使用难以区分的字形。

Scintilla会使用倒置在圆角矩形中的助记符来显示控制字符(代码少于32个字符,或在某些编码中为128至159之间的字符)。这些助记符来自信令的早期,尽管仍使用一些助记符(例如,LF =换行,BS =退格,CR =回车)。

对于低的“ C0”值:“ NUL”,“ SOH”,“ STX”,“ ETX”,“ EOT”,“ ENQ”,“ ACK”,“ BEL”,“ BS”,“ HT”,“ LF” “,” VT“,” FF“,” CR“,” SO“,” SI“,” DLE“,” DC1“,” DC2“,” DC3“,” DC4“,” NAK“,” SYN“, “ ETB”,“ CAN”,“ EM”,“ SUB”,“ ESC”,“ FS”,“ GS”,“ RS”,“ US”。

对于较高的“ C1”值:“ PAD”,“ HOP”,“ BPH”,“ NBH”,“ IND”,“ NEL”,“ SSA”,“ ESA”,“ HTS”,“ HTJ”,“ VTS” “,” PLD“,” PLU“,” RI“,” SS2“,” SS3“,” DCS“,” PU1“,” PU2“,” STS“,” CCH“,” MW“,” SPA“, “ EPA”,“ SOS”,“ SGCI”,“ SCI”,“ CSI”,“ ST”,“ OSC”,“ PM”,“ APC”。

无效字节以类似的方式显示,带有“ x”,后跟十六进制的值,例如“ xFE”。

SCI_SETREPRESENTATION(const char *encodedCharacter, const char *representation)
SCI_GETREPRESENTATION(const char *encodedCharacter, char *representation) → int
SCI_CLEARREPRESENTATION(const char *encodedCharacter)
SCI_SETCONTROLCHARSYMBOL(int symbol)
SCI_GETCONTROLCHARSYMBOL → int

SCI_SETREPRESENTATION(const char * encodedCharacter,const char *表示形式)
SCI_GETREPRESENTATION(const char * encodedCharacter,char *表示形式NUL终止)→int
SCI_CLEARREPRESENTATION(const char * encodedCharacter)
任何字符,包括通常以助记符形式显示的字符串倒置为圆角矩形。

例如,欧姆符号ΩU + 2126看起来与希腊Omega字符ΩU + 03C9非常相似,因此,对于UTF-8编码,可以将欧姆符号区分为“ U + 2126Ω”,可以这样进行调用: SCI_SETREPRESENTATION("\xe2\x84\xa6", "U+2126 \xe2\x84\xa6")

encodeCharacter参数是当前编码中一个字符的字节的NUL终止字符串。这不能用于设置多字符字符串的表示形式。

NUL(0)字符是一种特殊情况,因为encodeCharacter参数是NUL终止的,因此NUL字符被指定为空字符串。

SCI_SETCONTROLCHARSYMBOL(int符号)
SCI_GETCONTROLCHARSYMBOL→int
助记符可以用具有32至255范围内ASCII码的指定符号替换。如果您将符号值设置为小于32,则所有控制字符都将显示为助记符。您设置的符号以字符样式集的字体呈现。您可以通过SCI_GETCONTROLCHARSYMBOL消息读回当前符号默认符号值为0。

保证金

文本显示的左侧可能有多个边距,加上文本两侧的空白。最初分配了5个空白,从0到SC_MAX_MARGIN(4),但是可以通过调用来更改 SCI_SETMARGINS可以将每个页边距设置为仅显示符号,行号或文本 SCI_SETMARGINTYPEN文本边距也可能显示符号。可以在每个页边空白中显示的标记设置为SCI_SETMARGINMASKN任何与可见边距无关的标记都将显示为文本中背景颜色的变化。可以为每个边距设置以像素为单位的宽度。宽度为零的边距将被完全忽略。您可以选择单击边距时的鼠标是向容器发送SCN_MARGINCLICK还是SCN_MARGINRIGHTCLICK通知,还是选择一行文本。

使用超出有效范围的边距数字无效。默认情况下,页边距0设置为显示行号,但是宽度为0,因此将其隐藏。边距1设置为显示非折叠符号,并且宽度为16像素,因此可见。边距2设置为显示折叠符号,但是宽度为0,因此将其隐藏。当然,您可以将边距设置为任意值。

带样式的文本边距,用于显示修订和非常规信息:

带样式的文本边距,用于显示修订和非常规信息

SCI_SETMARGINS(int margins)
SCI_GETMARGINS → int
SCI_SETMARGINTYPEN(int margin, int marginType)
SCI_GETMARGINTYPEN(int margin) → int
SCI_SETMARGINWIDTHN(int margin, int pixelWidth)
SCI_GETMARGINWIDTHN(int margin) → int
SCI_SETMARGINMASKN(int margin, int mask)
SCI_GETMARGINMASKN(int margin) → int
SCI_SETMARGINSENSITIVEN(int margin, bool sensitive)
SCI_GETMARGINSENSITIVEN(int margin) → bool
SCI_SETMARGINCURSORN(int margin, int cursor)
SCI_GETMARGINCURSORN(int margin) → int
SCI_SETMARGINBACKN(int margin, colour back)
SCI_GETMARGINBACKN(int margin) → colour
SCI_SETMARGINLEFT(<unused>, int pixelWidth)
SCI_GETMARGINLEFT → int
SCI_SETMARGINRIGHT(<unused>, int pixelWidth)
SCI_GETMARGINRIGHT → int
SCI_SETFOLDMARGINCOLOUR(bool useSetting, colour back)
SCI_SETFOLDMARGINHICOLOUR(bool useSetting, colour fore)
SCI_MARGINSETTEXT(line line, const char *text)
SCI_MARGINGETTEXT(line line, char *text) → int
SCI_MARGINSETSTYLE(line line, int style)
SCI_MARGINGETSTYLE(line line) → int
SCI_MARGINSETSTYLES(line line, const char *styles)
SCI_MARGINGETSTYLES(line line, char *styles) → int
SCI_MARGINTEXTCLEARALL
SCI_MARGINSETSTYLEOFFSET(int style)
SCI_MARGINGETSTYLEOFFSET → int
SCI_SETMARGINOPTIONS(int marginOptions)
SCI_GETMARGINOPTIONS → int

SCI_SETMARGINS(int边距)
SCI_GETMARGINS→int
分配边距数或找到当前分配的边距数。

SCI_SETMARGINTYPEN(int边距,int marginType)
SCI_GETMARGINTYPEN(int边距)→int
这两个例程设置并获取边距的类型。margin参数应为0、1、2、3或4。您可以使用预定义的常量SC_MARGIN_SYMBOL(0)和 SC_MARGIN_NUMBER(1)来设置边距作为行号或符号边距。具有应用程序定义的文本的边距可以使用SC_MARGIN_TEXT(4)或 SC_MARGIN_RTEXT(5)来使文本右对齐。按照约定,边距0用于行号,后两个用于符号。您也可以将常量SC_MARGIN_BACK(2),SC_MARGIN_FORE(3)和SC_MARGIN_COLOUR(6)用于符号边距,这些符号边距将其背景颜色设置为与STYLE_DEFAULT背景和前景色或指定颜色匹配。

SCI_SETMARGINWIDTHN(int margin,int pixelWidth)
SCI_GETMARGINWIDTHN(int margin)→int
这些例程设置并获取以像素为单位的空白宽度。宽度为零的边距是不可见的。默认情况下,Scintilla为宽度为16像素的符号设置边距1,因此,如果不确定是否合适,这是合理的猜测。行号页边距宽度应考虑文档中的行数和行号样式。您可以使用类似的方法SCI_TEXTWIDTH(STYLE_LINENUMBER, "_99999")来获得合适的宽度。

SCI_SETMARGINMASKN(内部空白边距)
SCI_GETMARGINMASKN(内部空白边距)→int
掩码是32位值。每一位对应于可以为符号启用的页边空白中显示的32个逻辑符号之一。有一个有用的常量 SC_MASK_FOLDERS(0xFE000000或-33554432),它是用于表示折叠的7个逻辑符号的掩码。您可以为32个逻辑符号中的每一个分配广泛的符号和颜色,有关更多信息,请参见标记如果为(mask & SC_MASK_FOLDERS)==0,则空白背景颜色由样式33(STYLE_LINENUMBER)控制。

使用将逻辑标记添加到行中SCI_MARKERADD如果某行的关联标记未出现在宽度不为零的任何边距的蒙版中,则该标记会更改该线的背景色。例如,假设您决定使用逻辑标记10来标记语法错误的行,并且您想通过更改背景色来显示这样的行。该标记的掩码左移1十次(1 << 10),即0x400。如果确保没有任何符号边距在其蒙版中包含0x400,则带有标记的任何行都会更改背景颜色。

要设置非折叠边距1,请使用SCI_SETMARGINMASKN(1, ~SC_MASK_FOLDERS) Scintilla的默认设置。要设置折叠边距2,请使用SCI_SETMARGINMASKN(2, SC_MASK_FOLDERS)~SC_MASK_FOLDERS是十六进制的0x1FFFFFF或十进制的33554431。当然,您可能需要在空白处全部显示32个符号,在这种情况下请使用 SCI_SETMARGINMASKN(margin, -1)

SCI_SETMARGINSENSITIVEN(整数裕度,布尔敏感度)
SCI_GETMARGINSENSITIVEN(整数裕度)→bool
可以将五个裕度中的每一个设置为对鼠标单击敏感或不敏感。单击敏感边距会向容器发送SCN_MARGINCLICK通知不敏感的边距充当选择边距,使选择线的范围变得容易。默认情况下,所有边距都不敏感。SCN_MARGINRIGHTCLICK

SCI_SETMARGINCURSORN(int边距,int游标)
SCI_GETMARGINCURSORN(int边距)→int
通常在所有边距上显示反向箭头光标。可以使用将其更改为普通箭头, SCI_SETMARGINCURSORN(margin, SC_CURSORARROW)或者使用将其恢复为反向箭头 SCI_SETMARGINCURSORN(margin, SC_CURSORREVERSEARROW)

SCI_SETMARGINBACKN(int 彩色边距
SCI_GETMARGINBACKN(int彩色边距)→color
type的空白SC_MARGIN_COLOUR 可以使用设置其颜色SCI_SETMARGINBACKN

SCI_SETMARGINLEFT(<未使用>,int pixelWidth)
SCI_GETMARGINLEFT→int
SCI_SETMARGINRIGHT(<未使用,int pixelWidth)
SCI_GETMARGINRIGHT→int
这些消息设置并获取文本两侧空白边距的宽度(以像素为单位)。默认值为每一侧一个像素。

SCI_SETFOLDMARGINCOLOUR(布尔useSetting,彩色背)
SCI_SETFOLDMARGINHICOLOUR(布尔useSetting,彩色前)
。这些消息允许改变折缘和折缘突出的颜色。在Windows上,折叠边距颜色默认为:: GetSysColor(COLOR_3DFACE),折叠边距突出显示颜色为:: GetSysColor(COLOR_3DHIGHLIGHT)。

SCI_MARGINSETTEXT(线条,const char *文本)
SCI_MARGINGETTEXT(线条,char * text)→int
SCI_MARGINSETSTYLE(线条,int样式)
SCI_MARGINGETSTYLE(线条)→int
SCI_MARGINSETSTYLES(线条,const char *样式)
SCI_MARGINETSTYLE(线条) ,char * styles)→int
SCI_MARGINTEXTCLEARALL
将使用SC_MARGIN_TEXT或SC_MARGIN_RTEXT类型创建文本边距。可以为每行设置一个不同的字符串SCI_MARGINSETTEXT一行上的整个文本页边距可以用特定的样式显示, SCI_MARGINSETSTYLE或者每个字符可以单独设置样式 SCI_MARGINSETSTYLES,使用一个字节数组,每个字节设置相应文本字节的样式,类似于SCI_SETSTYLINGEX设置文本边距将导致 SC_MOD_CHANGEMARGIN 发送通知。

文本边距中只有一些样式属性有效:字体,size / sizeFractional,粗体/粗体,斜体,前,后和characterSet。

SCI_MARGINSETSTYLEOFFSET(int样式)
SCI_MARGINGETSTYLEOFFSET→int
可以通过设置样式偏移量将边距样式与标准文本样式完全分开。例如, SCI_MARGINSETSTYLEOFFSET(256)将允许边距样式的编号从256到511,以便它们不与词法分析器设置的样式重叠。在查找样式之前,SCI_MARGINSETSTYLE设置的每个样式编号SCI_MARGINSETSTYLES都添加了偏移量。

始终先调用SCI_ALLOCATEEXTENDEDSTYLESSCI_MARGINSETSTYLEOFFSET然后将结果用作的参数SCI_MARGINSETSTYLEOFFSET

SCI_SETMARGINOPTIONS(int marginOptions)
SCI_GETMARGINOPTIONS→int
通过启用适当的位标志来定义边距选项。目前,只有一个标志可用SC_MARGINOPTION_SUBLINESELECT= 1,该标志 控制在单击折线前面的边距时如何选择它们。如果SC_MARGINOPTION_SUBLINESELECT设置,则仅选择换行的子行,否则选择整个换行。SC_MARGINOPTION_NONE默认情况下,页边距选项设置为 = 0。

注解

注释是可编辑文本的每一行下方的只读文本行。注释可以包含多行,并用'\ n'分隔。批注可用于显示代码的汇编版本以进行调试,也可以内联显示诊断消息,或在合并工具中排列不同版本的文本。

注释被视为方法SCI_VISIBLEFROMDOCLINE方法的显示行 SCI_DOCLINEFROMVISIBLE

用于在线诊断的注释:

用于在线诊断的注释

SCI_ANNOTATIONSETTEXT(line line, const char *text)
SCI_ANNOTATIONGETTEXT(line line, char *text) → int
SCI_ANNOTATIONSETSTYLE(line line, int style)
SCI_ANNOTATIONGETSTYLE(line line) → int
SCI_ANNOTATIONSETSTYLES(line line, const char *styles)
SCI_ANNOTATIONGETSTYLES(line line, char *styles) → int
SCI_ANNOTATIONGETLINES(line line) → int
SCI_ANNOTATIONCLEARALL
SCI_ANNOTATIONSETVISIBLE(int visible)
SCI_ANNOTATIONGETVISIBLE → int
SCI_ANNOTATIONSETSTYLEOFFSET(int style)
SCI_ANNOTATIONGETSTYLEOFFSET → int

SCI_ANNOTATIONSETTEXT(行线,为const char *文本)
SCI_ANNOTATIONGETTEXT(行线,字符*文本)→INT
SCI_ANNOTATIONSETSTYLE(逐行INT风格)
SCI_ANNOTATIONGETSTYLE(逐行)→INT
SCI_ANNOTATIONSETSTYLES(行线,为const char *样式)
SCI_ANNOTATIONGETSTYLES(逐行,char * styles)→int
SCI_ANNOTATIONGETLINES(行)→int
SCI_ANNOTATIONCLEARALL
可以为每行设置不同的字符串SCI_ANNOTATIONSETTEXT要清除注释,请SCI_ANNOTATIONSETTEXT使用NULL指针进行调用一行上的整个文本注释都可以用特定样式显示, SCI_ANNOTATIONSETSTYLE或者每个字符可以分别用样式设置 SCI_ANNOTATIONSETSTYLES它使用字节数组,每个字节设置相应文本字节的样式,类似于SCI_SETSTYLINGEX必须先设置文本,因为它指定注释要多长时间,以便读取多少个样式字节。设置注释将导致 SC_MOD_CHANGEANNOTATION 发送通知。

注释行的行数可以使用检索SCI_ANNOTATIONGETLINES可以清除所有行的注释,SCI_ANNOTATIONCLEARALL 这等同于清除每行(设置为0),然后删除用于此功能的其他内存。

注释中只有一些样式属性有效:字体,大小/大小分数,粗体/粗细,斜体,前,后和characterSet。

SCI_ANNOTATIONSETVISIBLE(int可见)
SCI_ANNOTATIONGETVISIBLE→int
可以在视图中显示注释,并且在可见时可以选择显示样式。这两个消息设置并获得注释显示模式。visible 参数可以是以下之一:

ANNOTATION_HIDDEN 0 不显示注释。
ANNOTATION_STANDARD 1个 注释是左对齐的,没有装饰。
ANNOTATION_BOXED 2 注释会缩进以与文本匹配,并被一个框包围。
ANNOTATION_INDENTED 3 注释会缩进以匹配文本。

SCI_ANNOTATIONSETSTYLEOFFSET(int样式)
SCI_ANNOTATIONGETSTYLEOFFSET→int
通过设置样式偏移量,注释样式可以与标准文本样式完全分开。例如, SCI_ANNOTATIONSETSTYLEOFFSET(512)允许注释样式的编号从512到767,以便它们不与词法分析器设置的样式重叠(如果边距偏移为256,则不覆盖边距)。在查找样式之前,SCI_ANNOTATIONSETSTYLE设置的每个样式编号SCI_ANNOTATIONSETSTYLES都添加了偏移量。

始终先调用SCI_ALLOCATEEXTENDEDSTYLESSCI_ANNOTATIONSETSTYLEOFFSET然后将结果用作的参数SCI_ANNOTATIONSETSTYLEOFFSET

行尾注释

行尾注释是每行可编辑文本结尾处的只读文本行。行尾注释可用于显示代码的汇编版本,以进行调试或内联显示诊断消息,或在合并工具中排列不同版本的文本。

行尾注释,用于显示汇编版本的代码以进行调试

行尾注释,用于显示汇编版本的代码以进行调试

SCI_EOLANNOTATIONSETTEXT(line line, const char *text)
SCI_EOLANNOTATIONGETTEXT(line line, char *text) → int
SCI_EOLANNOTATIONSETSTYLE(line line, int style)
SCI_EOLANNOTATIONGETSTYLE(line line) → int
SCI_EOLANNOTATIONCLEARALL
SCI_EOLANNOTATIONSETVISIBLE(int visible)
SCI_EOLANNOTATIONGETVISIBLE → int
SCI_EOLANNOTATIONSETSTYLEOFFSET(int style)
SCI_EOLANNOTATIONGETSTYLEOFFSET → int

SCI_EOLANNOTATIONSETTEXT(line line,const char * text)
SCI_EOLANNOTATIONGETTEXT(line line,char * text)→int
SCI_EOLANNOTATIONSETSTYLE(line line,int style)
SCI_EOLANNOTATIONGETSTYLE(line line)→int
SCI_EOLANNOTATIONCLEARALL int
每行都可以设置为不同的字符串SCI_EOLANNOTATIONSETTEXT要清除行尾注释,请SCI_EOLANNOTATIONSETTEXT使用NULL指针进行调用一行上的整个文本EOLANNOTATION可以用特定的样式显示, SCI_EOLANNOTATIONSETSTYLE或者每个字符可以用与相似的对应文本字节单独样式化SCI_SETSTYLINGEX必须首先设置文本,因为它指定了行尾注记要读多少个样式字节。设置行尾注释将导致 SC_MOD_CHANGEEOLANNOTATION 通知发送。

可以清除所有行中的行尾注释,SCI_EOLANNOTATIONCLEARALL 这等效于清除每行(设置为0),然后删除用于此功能的其他内存。

行尾注释中只有一些样式属性有效:字体,size / sizeFractional,粗体/粗细,斜体,前,后和characterSet。

SCI_EOLANNOTATIONSETVISIBLE(int可见)
SCI_EOLANNOTATIONGETVISIBLE→int行
尾注释可以在视图中可见,可见时可以选择显示样式。这两个消息设置并获得注释显示模式。visible 参数可以是以下之一:

EOLANNOTATION_HIDDEN 0 行尾注释不显示。
EOLANNOTATION_STANDARD 1个 行尾注释以没有装饰的左对齐方式绘制。
EOLANNOTATION_BOXED 2 行尾注释会缩进以与文本匹配,并被一个框包围。

SCI_EOLANNOTATIONSETSTYLEOFFSET(int样式)
SCI_EOLANNOTATIONGETSTYLEOFFSET→int行
尾注释样式可以通过设置样式偏移量与标准文本样式完全分开。例如, SCI_EOLANNOTATIONSETSTYLEOFFSET(512)将允许行尾注释样式的编号从512到767,以便它们不与词法分析器(或边距(如果边距偏移为256))设置的样式重叠。在查找样式之前,SCI_EOLANNOTATIONSETSTYLE设置的每个样式编号SCI_EOLANNOTATIONSETSTYLES都添加了偏移量。

始终先调用SCI_ALLOCATEEXTENDEDSTYLESSCI_EOLANNOTATIONSETSTYLEOFFSET然后将结果用作的参数SCI_EOLANNOTATIONSETSTYLEOFFSET

其他设定

SCI_SETBUFFEREDDRAW(bool buffered)
SCI_GETBUFFEREDDRAW → bool
SCI_SETPHASESDRAW(int phases)
SCI_GETPHASESDRAW → int
SCI_SETTECHNOLOGY(int technology)
SCI_GETTECHNOLOGY → int
SCI_SETFONTQUALITY(int fontQuality)
SCI_GETFONTQUALITY → int
SCI_SETCODEPAGE(int codePage)
SCI_GETCODEPAGE → int
SCI_SETIMEINTERACTION(int imeInteraction)
SCI_GETIMEINTERACTION → int
SCI_SETBIDIRECTIONAL(int bidirectional)
SCI_GETBIDIRECTIONAL → int
SCI_GRABFOCUS
SCI_SETFOCUS(bool focus)
SCI_GETFOCUS → bool

要将消息转发(WM_XXXX, WPARAM, LPARAM)到Scintilla,您可以使用 SendMessage(hScintilla, WM_XXXX, WPARAM, LPARAM)where hScintilla作为编辑器创建的Scintilla窗口的句柄。

在Windows上,顶层窗口应将任何WM_SETTINGCHANGEWM_SYSCOLORCHANGEWM_DPICHANGED消息转发给Scintilla,因为这使Scintilla可以响应对鼠标设置,显示器分辨率,颜色方案和类似系统属性的更改。

SCI_SETBUFFEREDDRAW(布尔缓冲)
SCI_GETBUFFEREDDRAW→bool
这些消息打开或关闭缓冲图形并报告缓冲图形状态。缓冲图形将每条线绘制到位图中,而不是直接绘制到屏幕上,然后将位图复制到屏幕上。尽管会花费更长的时间,但这可以避免闪烁。默认设置是将图形缓存在Win32和GTK上,而不缓存在Cocoa和Qt上。可可不支持缓冲图形。

当前平台执行窗口缓冲,因此最好关闭此选项。对于Win32和GTK,客户端代码应在初始化时关闭缓冲。在某些较旧的平台和异常模式下,缓冲可能仍然有用。

SCI_SETPHASESDRAW(int阶段)
SCI_GETPHASESDRAW→int
可以按几种顺序绘制文本区域,从而在速度和允许文本的所有像素(即使它们与其他元素重叠)之间进行折衷。

在单阶段绘图(SC_PHASES_ONE)中,将绘制一种样式的每个字符行及其背景。如果某个字符悬在运行结束时,例如“ V _”中的“ V ”与“ _”采用不同的样式,则这可能导致“ V的右侧被透支“ _”的背景将其截断。

不建议使用单相工程图,不应由应用程序使用。

两阶段绘图(SC_PHASES_TWO)通过首先绘制线条的所有背景,然后以透明模式绘制文本来解决此问题。线条是分别绘制的,没有线条会与另一线条重叠,因此会切掉与另一线条重叠的任何像素,例如字符的极端上升和下降。除非启用了缓冲绘图或平台已自然缓冲,否则两相绘图可能比单相闪烁更多。默认将绘图分为两阶段。

多相绘制(SC_PHASES_MULTIPLE)会多次绘制整个区域,每个要素绘制一次,从而以层或相的形式构建外观。在所有文本之前绘制所有线条的彩色背景,然后在此组合背景上以透明模式绘制所有文本,而不会将文本剪切到行边界。这允许极端的上升者和下降者溢出到相邻的行中。该模式与缓冲的图形不兼容,并且就像SC_PHASES_TWO 打开了缓冲的图形一样起作用多相绘制要比两相绘制慢。将布局缓存设置为 SCI_SETLAYOUTCACHE(SC_CACHE_PAGE) 或更高可以确保多阶段绘制不会明显变慢。

SCI_SETTECHNOLOGY(int技术)
SCI_GETTECHNOLOGY→int
技术属性允许在不同的绘图API和选项之间进行选择。在大多数平台上,唯一的选择是SC_TECHNOLOGY_DEFAULT(0)。在Windows Vista或更高版本上,可以选择SC_TECHNOLOGY_DIRECTWRITE(1), SC_TECHNOLOGY_DIRECTWRITERETAIN(2)或 SC_TECHNOLOGY_DIRECTWRITEDC(3)以使用Direct2D和DirectWrite API获得更高质量的抗锯齿图形。 SC_TECHNOLOGY_DIRECTWRITERETAINSC_TECHNOLOGY_DIRECTWRITE要求在显示后保留框架不同, 这可以防止某些卡和驱动程序上的绘制失败。 SC_TECHNOLOGY_DIRECTWRITEDCSC_TECHNOLOGY_DIRECTWRITE使用DirectWrite绘制到GDI DC 有所不同 由于Direct2D缓冲绘图,因此可以使用来关闭Scintilla的缓冲 SCI_SETBUFFEREDDRAW(0)

SCI_SETFONTQUALITY(int fontQuality)
SCI_GETFONTQUALITY→int
管理字体质量(抗锯齿方法)。目前,可以使用下列值在Windows上: SC_EFF_QUALITY_DEFAULT(向下兼容) SC_EFF_QUALITY_NON_ANTIALIASEDSC_EFF_QUALITY_ANTIALIASEDSC_EFF_QUALITY_LCD_OPTIMIZED

如果有必要将更多选项压缩到该属性中,则仅将有限数量的由SC_EFF_QUALITY_MASK(0xf)定义的位用于质量。

SCI_SETCODEPAGE(int codePage)
SCI_GETCODEPAGE→int
Scintilla支持UTF-8,日文,中文和韩文DBCS以及诸如Latin-1的单字节编码。SC_CP_UTF8默认为UTF-8()。使用此消息并将其 codePage设置为代码页号,以将Scintilla设置为使用代码页信息来确保将多个字节字符视为一个字符而不是多个字符。这也阻止插入符号在多字节字符的字节之间移动。不要使用此消息在不同的单字节字符集之间进行选择-使用 SCI_STYLESETCHARACTERSETcodePage设置为零进行调用 以禁用多字节支持。

代码页SC_CP_UTF8(65001)将Scintilla设置为Unicode模式,并将文档视为以UTF-8表示的字符序列。文本在被OS绘制之前已转换为平台的常规Unicode编码,因此可以显示希伯来语,阿拉伯语,西里尔字母和汉字。可以使用在一个水平空间中垂直堆叠的两个字符的语言(例如泰语)通常会起作用,但存在一些问题,即分别绘制字符会导致视觉故障。不支持双向文本。

可以将代码页设置为65001(UTF-8),932(日语Shift-JIS),936(简体中文GBK),949(韩文统一韩文代码),950(繁体中文Big5)或1361(韩文Johab)。

SCI_SETIMEINTERACTION(int imeInteraction)
SCI_GETIMEINTERACTION→int
以中文,日文或韩文输入文本时,可能会显示输入法编辑器(IME)。IME可能是出现在Scintilla上方的一个额外窗口,或者可能由Scintilla本身显示为文本。在某些平台上,可以在两种技术之间进行选择。窗口输入法SC_IME_WINDOWED(0)的外观和行为可能与其他应用程序中的输入法更相似。内联IME SC_IME_INLINE(1)可以与一些Scintilla功能一起使用,例如矩形和多重选择。

可以使用选择窗口行为,使用选择SCI_SETIMEINTERACTION(SC_IME_WINDOWED) 内联行为SCI_SETIMEINTERACTION(SC_IME_INLINE)在某些情况下,Scintilla可能会忽略此调用。例如,某些语言可能仅支持内联行为。

内联IME模式处于活动状态时,在最终确定字符之前先尝试添加它们,然后 为每个字符发送SCN_CHARADDED 通知(characterSource设置为SC_CHARACTERSOURCE_TENTATIVE_INPUT)。

这些双向功能是实验性的,并不完整。

SCI_SETBIDIRECTIONAL(int双向)
SCI_GETBIDIRECTIONAL→int
某些语言(例如阿拉伯语和希伯来语)是从右向左书写的,而不是像英语那样从左向右书写的。使用多种语言的文档可能同时包含两个方向,这被称为“双向”。默认的文本方向可能是从右到左或从左到右。Scintilla仅在某些平台上正确显示双向文本。当前,在使用DirectWrite的Win32上和使用Cocoa的macOS上都对双向文本提供了实验性支持。仅UTF-8文档将显示双向行为,并且仅在SC_BIDIRECTIONAL_L2R模式下显示。某些功能(例如虚拟空间)可能不适用于双向文本,或者可能仅在某些情况下有效。

双向文本会产生额外的处理和存储成本。由于某些应用程序可能不想支付费用,因此必须通过调用SCI_SETBIDIRECTIONAL(SC_BIDIRECTIONAL_L2R)(1)显式启用双向支持 ,该方法选择从左到右作为默认方向,或选择 SCI_SETBIDIRECTIONAL(SC_BIDIRECTIONAL_R2L)(2)作为默认从右到左的方向。在Win32中,这应该设置该技术后进行SC_TECHNOLOGY_DIRECTWRITESC_TECHNOLOGY_DIRECTWRITERETAINSC_TECHNOLOGY_DIRECTWRITEDC

如果呼叫成功,SCI_GETBIDIRECTIONAL将返回相同的值,否则 SC_BIDIRECTIONAL_DISABLED返回(0)。

SCI_GRABFOCUS
SCI_SETFOCUS(布尔焦点)
SCI_GETFOCUS→bool
可以告诉Scintilla抓住焦点SCI_GRABFOCUS在GTK上,焦点处理比Windows更为复杂,这在GTK上更为需要。

内部焦点标志可以用 SCI_SETFOCUS那些具有复杂焦点要求的客户(例如,拥有自己的窗口来获得真正的焦点,但需要指出Scintilla具有逻辑焦点)的客户使用此功能。

括号突出显示

SCI_BRACEHIGHLIGHT(position posA, position posB)
SCI_BRACEBADLIGHT(position pos)
SCI_BRACEHIGHLIGHTINDICATOR(bool useSetting, int indicator)
SCI_BRACEBADLIGHTINDICATOR(bool useSetting, int indicator)
SCI_BRACEMATCH(position pos, int maxReStyle) → position
SCI_BRACEMATCHNEXT(position pos, position startPos) → position

SCI_BRACEHIGHLIGHT(position posA,position posB)
“括号突出显示样式”中最多可以突出显示两个字符,定义为样式编号STYLE_BRACELIGHT(34)。如果启用了缩进指南,则还可能希望突出显示与花括号相对应的缩进。您可以使用查找列,SCI_GETCOLUMN并使用突出显示缩进SCI_SETHIGHLIGHTGUIDE

SCI_BRACEBADLIGHT(position pos)
如果没有匹配的花括号,则可以使用花括号badlighting样式样式STYLE_BRACEBAD(35)来显示不匹配的花括号。使用位置INVALID_POSITION(-1)会删除高光。

SCI_BRACEHIGHLIGHTINDICATOR(bool useSetting,int indicator)
使用指定的指示器突出显示匹配的花括号,而不更改其样式。

SCI_BRACEBADLIGHTINDICATOR(bool useSetting,int indicator)
使用指定的指示器突出显示不匹配的花括号,而不更改其样式。

SCI_BRACEMATCH(position pos,int maxReStyle)→position
SCI_BRACEMATCH消息找到给定的对应匹配括号 pos,即一个括号的位置。处理的大括号字符为“((”,“)”,“ [”,“]”,“ {”,“}”,“ <”和“>”)。搜索从打开括号向前,从关闭括号向后。如果该位置的字符不是大括号字符,或者找不到匹配的大括号,则返回值为-1。否则,返回值是匹配括号的位置。

仅当匹配括号的样式与起始括号相同或匹配括号超出样式的结尾时,才会发生匹配。嵌套括号正确处理。maxReStyle参数当前必须为0-将来可能会用于限制大括号搜索的长度。

SCI_BRACEMATCHNEXT(position pos,position startPos)→position
类似于SCI_BRACEMATCH,但是匹配从显式的起始位置开始,startPos 而不是隐式的下一个位置pos ± 1

制表符和缩进指南

程序员通常使用缩进(行首的空白)来阐明程序结构,并且在某些语言(例如Python)中,缩进可能是语言语法的一部分。制表符通常用在编辑器中,以插入制表符或用空格填充文本,直到下一个制表符为止。

当Scintilla布置文本的一部分时,制表符之后的文本通常将显示在左侧TABWIDTH列的下一个倍数处。但是,也可以为每行以像素为单位显式设置制表位。

可以将Scintilla设置为以特殊方式在行的开头处在空格中处理制表符和退格键:插入制表符会将行缩进到下一个缩进位置,而不仅仅是在当前字符位置插入制表符并使退格符不缩进行而不是删除字符。Scintilla还可以显示缩进参考线(垂直线)以帮助您生成代码。

SCI_SETTABWIDTH(int tabWidth)
SCI_GETTABWIDTH → int
SCI_SETTABMINIMUMWIDTH(int pixels)
SCI_GETTABMINIMUMWIDTH → int
SCI_CLEARTABSTOPS(line line)
SCI_ADDTABSTOP(line line, int x)
SCI_GETNEXTTABSTOP(line line, int x) → int
SCI_SETUSETABS(bool useTabs)
SCI_GETUSETABS → bool
SCI_SETINDENT(int indentSize)
SCI_GETINDENT → int
SCI_SETTABINDENTS(bool tabIndents)
SCI_GETTABINDENTS → bool
SCI_SETBACKSPACEUNINDENTS(bool bsUnIndents)
SCI_GETBACKSPACEUNINDENTS → bool
SCI_SETLINEINDENTATION(line line, int indentation)
SCI_GETLINEINDENTATION(line line) → int
SCI_GETLINEINDENTPOSITION(line line) → position
SCI_SETINDENTATIONGUIDES(int indentView)
SCI_GETINDENTATIONGUIDES → int
SCI_SETHIGHLIGHTGUIDE(position column)
SCI_GETHIGHLIGHTGUIDE → position

SCI_SETTABMINIMUMWIDTH(int像素)
SCI_GETTABMINIMUMWIDTH→int
SCI_SETTABMINIMUMWIDTH设置标签的最小大小(以像素为单位),以确保可以看到该标签。默认值为2。这对于具有小数宽度的比例字体特别有用,在这种字体中,制表符之前的字符可能在制表符停止之前以像素的一小部分结束,如果没有此设置,则制表符只能是像素宽度的一小部分。在显示文档的缩小版本的情况下,将此值设置为0可能会使缩小版本的布局更像常规尺寸的版本。

SCI_SETTABWIDTH(int tabWidth)
SCI_GETTABWIDTH→int
SCI_SETTABWIDTH将制表符的大小设置为中空格字符大小的倍数STYLE_DEFAULT默认制表符宽度为8个字符。制表符大小没有限制,但是小于1的值或较大的值可能会产生不良影响。

SCI_CLEARTABSTOPS(行)
SCI_ADDTABSTOP(行,int x)
SCI_GETNEXTTABSTOP(行,int x)→int
SCI_CLEARTABSTOPS清除行上的显式制表位。SCI_ADDTABSTOP 在距左侧指定距离处添加一个显式制表位(以像素为单位),并 SCI_GETNEXTTABSTOP获取在给定x位置之后设置的下一个显式制表位位置;如果没有,则设置为零。更改制表位会产生SC_MOD_CHANGETABSTOPS通知。

SCI_SETUSETABS(bool useTabs)
SCI_GETUSETABS→bool
SCI_SETUSETABS确定是缩进应该由制表符和空格的混合还是纯粹基于空格来创建。设置useTabsfalse (0)以创建所有制表符和缩进空间。默认值为true您可以使用 SCI_GETCOLUMN考虑选项卡宽度的位置来获取列。

SCI_SETINDENT(int indentSize)
SCI_GETINDENT→int
SCI_SETINDENT设置缩进大小(以中的空格宽度为单位)STYLE_DEFAULT如果将宽度设置为0,则缩进大小与制表符大小相同。缩进大小没有限制,但是小于0的值或较大的值可能会产生不良影响。

SCI_SETTABINDENTS(bool tabIndents)
SCI_GETTABINDENTS→bool
SCI_SETBACKSPACEUNINDENTS(bool bsUnIndents)
SCI_GETBACKSPACEUNINDENTS→bool

在缩进空格内,可以使Tab和Backspace键缩进和缩进,而不必使用SCI_SETTABINDENTSSCI_SETBACKSPACEUNINDENTS功能插入标签字符或删除字符

SCI_SETLINEINDENTATION(行,int缩进)
SCI_GETLINEINDENTATION(行,line)→int
可以发现行上的缩进量,并使用SCI_GETLINEINDENTATION和进行设置 SCI_SETLINEINDENTATION缩进在字符列中进行测量,该字符列对应于空格字符的宽度。

SCI_GETLINEINDENTPOSITION(行线)→位置
返回行缩进结束时的位置。

SCI_SETINDENTATIONGUIDES(int indentView)
SCI_GETINDENTATIONGUIDES→int
压痕指南是垂直的虚线,出现在每个压痕大小列的压痕空白内。它们使您可以轻松查看哪些结构排列,尤其是当它们跨越多个页面时。样式STYLE_INDENTGUIDE(37)用于指定压痕指南的前景色和背景色。

有4个缩进指南视图。SC_IV_NONE关闭该功能,但其他3个状态确定这些辅助线在空白行上显示的距离。

SC_IV_NONE 没有显示压痕指南。
SC_IV_REAL 缩进指南显示在实际的缩进空格内。
SC_IV_LOOKFORWARD 显示的缩进指南超出了实际的缩进范围,直至下一个非空行的级别。如果前一个非空行是折叠页眉,则缩进指南将显示比该行多一级的缩进。此设置对Python有用。
SC_IV_LOOKBOTH 显示的缩进指南超出了实际的缩进范围,直至下一个非空行或上一个非空行的水平,以较大者为准。此设置适用于大多数语言。

SCI_SETHIGHLIGHTGUIDE(位置列)
SCI_GETHIGHLIGHTGUIDE→位置
出现括号突出显示时,可以使用括号突出显示样式突出显示对应于括号的缩进指南STYLE_BRACELIGHT(34)。设置column为0取消此突出显示。

标记物

有32个标记,编号从0到MARKER_MAX(31),您可以将它们的任意组合分配给文档中的每一行。标记出现在文本左侧选择边距中。如果选择边距设置为零宽度,则会更改整行的背景色。Scintilla在折叠边距中使用标记号25到31,并具有SC_MARKNUM_* 形式的符号名SC_MARKNUM_FOLDEROPEN

标记号0到24没有预定义功能;您可以使用它们标记语法错误或当前执行点,断点或任何需要标记的内容。如果您不需要折叠,则可以将全部32个用于所需的任何目的。

每个标记号都有一个与之关联的符号。您还可以为每个标记编号设置前景色和背景色,因此您可以多次使用相同的符号,同时将不同的颜色用于不同的用途。Scintilla具有一组可以分配的符号(SC_MARK_*),也可以使用字符。默认情况下,所有32个标记均设置为 SC_MARK_CIRCLE具有黑色前景和白色背景。

标记按其编号顺序绘制,因此编号较高的标记会出现在编号较低的标记的顶部。标记通过跟踪行首移动的位置来尝试随文本移动。删除一行后,其标记将通过OR 操作与下一行的标记合并

SCI_MARKERDEFINE(int markerNumber, int markerSymbol)
SCI_MARKERDEFINEPIXMAP(int markerNumber, const char *pixmap)
SCI_RGBAIMAGESETWIDTH(int width)
SCI_RGBAIMAGESETHEIGHT(int height)
SCI_RGBAIMAGESETSCALE(int scalePercent)
SCI_MARKERDEFINERGBAIMAGE(int markerNumber, const char *pixels)
SCI_MARKERSYMBOLDEFINED(int markerNumber) → int
SCI_MARKERSETFORE(int markerNumber, colour fore)
SCI_MARKERSETBACK(int markerNumber, colour back)
SCI_MARKERSETBACKSELECTED(int markerNumber, colour back)
SCI_MARKERENABLEHIGHLIGHT(bool enabled)
SCI_MARKERSETALPHA(int markerNumber, alpha alpha)
SCI_MARKERADD(line line, int markerNumber) → int
SCI_MARKERADDSET(line line, int markerSet)
SCI_MARKERDELETE(line line, int markerNumber)
SCI_MARKERDELETEALL(int markerNumber)
SCI_MARKERGET(line line) → int
SCI_MARKERNEXT(line lineStart, int markerMask) → line
SCI_MARKERPREVIOUS(line lineStart, int markerMask) → line
SCI_MARKERLINEFROMHANDLE(int markerHandle) → line
SCI_MARKERDELETEHANDLE(int markerHandle)
SCI_MARKERHANDLEFROMLINE(line line, int which) → int
SCI_MARKERNUMBERFROMLINE(line line, int which) → int

SCI_MARKERDEFINE(int markerNumber,int markerSymbol)
此消息将范围为0到31的标记号与标记符号之一或ASCII字符相关联。目前可用的通用标志符号是:
SC_MARK_CIRCLESC_MARK_ROUNDRECTSC_MARK_ARROWSC_MARK_SMALLRECTSC_MARK_SHORTARROWSC_MARK_EMPTYSC_MARK_ARROWDOWNSC_MARK_MINUSSC_MARK_PLUSSC_MARK_ARROWSSC_MARK_DOTDOTDOTSC_MARK_BACKGROUNDSC_MARK_LEFTRECTSC_MARK_FULLRECTSC_MARK_BOOKMARKSC_MARK_VERTICALBOOKMARK,和 SC_MARK_UNDERLINE

SC_MARK_BACKGROUND标记仅更改的行的背景色。SC_MARK_FULLRECT符号反映了这一点,仅更改了边距背景颜色。 SC_MARK_UNDERLINE在文本上画下划线。SC_MARK_EMPTY符号是不可见的,允许客户端代码跟踪线的移动。如果更改了折叠样式并希望一个或多个SC_FOLDERNUM_*标记没有关联的符号,则也可以使用它

应用程序可以使用标记符号SC_MARK_AVAILABLE来指示插件可以分配该标记号。

还有一些标记符号,设计用于扁平树样式的折叠边距。
SC_MARK_BOXMINUSSC_MARK_BOXMINUSCONNECTEDSC_MARK_BOXPLUSSC_MARK_BOXPLUSCONNECTEDSC_MARK_CIRCLEMINUSSC_MARK_CIRCLEMINUSCONNECTEDSC_MARK_CIRCLEPLUSSC_MARK_CIRCLEPLUSCONNECTEDSC_MARK_LCORNERSC_MARK_LCORNERCURVESC_MARK_TCORNERSC_MARK_TCORNERCURVE,和 SC_MARK_VLINE

通过将字符的ASCII值添加到SC_MARK_CHARACTER(10000),可以将字符用作标记 例如,要将“ A”(ASCII代码65)用作标记编号1,请使用:
SCI_MARKERDEFINE(1, SC_MARK_CHARACTER+65)

标记编号SC_MARKNUM_FOLDERSC_MARKNUM_FOLDEROPEN用来表示存在折叠并且打开或关闭。尽管(SC_MARK_PLUSSC_MARK_MINUS)对或(SC_MARK_ARROWSC_MARK_ARROWDOWN)对是不错的选择但可以为此目的分配任何符号除了这两点,都需要扁平树风格比较分配: SC_MARKNUM_FOLDERENDSC_MARKNUM_FOLDERMIDTAILSC_MARKNUM_FOLDEROPENMIDSC_MARKNUM_FOLDERSUB,和 SC_MARKNUM_FOLDERTAIL用于折叠的位由指定 SC_MASK_FOLDERS,通常用作SCI_SETMARGINMASKN定义用于折叠的边距时的参数

下表显示了SC_MARK_应将哪种*符号分配给哪个 SC_MARKNUM_*标记号以获得四种折叠样式:箭头(类似于Macintosh),加/减号将折线显示为'+',打开的折线显示为'-',圆环树,箱形树。

SC_MARKNUM_* 箭头 正负 圆树 箱树
FOLDEROPEN ARROWDOWN MINUS CIRCLEMINUS BOXMINUS
FOLDER ARROW PLUS CIRCLEPLUS BOXPLUS
FOLDERSUB EMPTY EMPTY VLINE VLINE
FOLDERTAIL EMPTY EMPTY LCORNERCURVE LCORNER
FOLDEREND EMPTY EMPTY CIRCLEPLUSCONNECTED BOXPLUSCONNECTED
FOLDEROPENMID EMPTY EMPTY CIRCLEMINUSCONNECTED BOXMINUSCONNECTED
FOLDERMIDTAIL EMPTY EMPTY TCORNERCURVE TCORNER

标记样本

SCI_MARKERDEFINEPIXMAP(int markerNumber,const char * pixmap)
可以使用此消息将标记设置为像素图。XPM格式用于像素图。像素图使用SC_MARK_PIXMAP标记符号。

SCI_RGBAIMAGESETWIDTH(int宽度)
SCI_RGBAIMAGESETHEIGHT(int高度)
SCI_RGBAIMAGESETSCALE(int scalePercent)
SCI_MARKERDEFINERGBAIMAGE(int markerNumber,const char * pixels)
可以使用此消息将标记设置为半透明像素图。RGBA格式用于像素图。宽度和高度必须事先通过SCI_RGBAIMAGESETWIDTHSCI_RGBAIMAGESETHEIGHT消息进行设置

可以使用设置以百分比为单位的比例因子SCI_RGBAIMAGESETSCALE在具有视网膜显示的OS X上非常有用,其中每个显示单位为2像素:使用200的倍数,以便使用屏幕像素显示每个图像像素。默认比例100将在视网膜显示屏上拉伸每个图像像素以覆盖4个屏幕像素。

像素图使用SC_MARK_RGBAIMAGE标记符号。

SCI_MARKERSYMBOLDEFINED(int markerNumber)→int
返回为markerNumber定义的符号,该标记使用SCI_MARKERDEFINESC_MARK_PIXMAP定义为SCI_MARKERDEFINEPIXMAPSC_MARK_RGBAIMAGE定义为SCI_MARKERDEFINERGBAIMAGE

SCI_MARKERSETFORE(int标记号,彩色前)
SCI_MARKERSETBACK(int标记号,彩色前)
这两个消息设置标记号的前景色和背景色。
SCI_MARKERSETBACKSELECTED(int markerNumber,color back)
选择标记的折叠块时,此消息设置标记编号的突出显示背景颜色。默认颜色为#FF0000。

SCI_MARKERENABLEHIGHLIGHT(启用bool)
该消息允许选中时启用/禁用突出显示折叠块。(即包含插入符号的块)

SCI_MARKERSETALPHA(int markerNumber, alpha alpha)
在内容区域中绘制标记时,由于它们没有边距或它们属于SC_MARK_BACKGROUNDSC_MARK_UNDERLINE类型,可以通过设置alpha值来半透明地绘制它们。

SCI_MARKERADD(行,int markerNumber)→int
此消息将标记号添加markerNumber到一行。如果失败(错误的行号,内存不足),则消息返回-1,或者返回标识已添加标记的标记句柄号。您可以使用此返回的句柄和SCI_MARKERLINEFROMHANDLE来查找移动或合并线后标记的位置,并SCI_MARKERDELETEHANDLE可以根据标记的句柄删除标记。该消息不检查markerNumber的值,也不检查该行是否已经包含该标记。

SCI_MARKERADDSET(line line,int markerSet)
该消息可以通过一次调用将一个或多个标记添加到行中,以与SCI_MARKERGET (由掩码使用)的相同“一位标记一个位” 32位整数格式指定的方式相同 基于标记的搜索功能 SCI_MARKERNEXTSCI_MARKERPREVIOUS)。与一样 SCI_MARKERADD,不会检查目标行上是否已存在任何标记。

SCI_MARKERDELETE(line line,int markerNumber)
这将在给定的行号中搜索给定的标记号,如果存在,则将其删除。如果您在同一行中多次添加同一标记,则每次使用该标记都会删除一个副本。如果您传递的标记号为-1,则所有标记将从行中删除。

SCI_MARKERDELETEALL(int markerNumber)
这将从所有行中删除给定数字的标记。如果markerNumber为-1,它将删除所有行中的所有标记。

SCI_MARKERGET(行线)→int
这将返回一个32位整数,该整数指示该行上存在哪些标记。如果存在标记0,则设置位0;对于标记1,则设置位1,依此类推。

SCI_MARKERNEXT(行lineStart,int markerMask)→行
SCI_MARKERPREVIOUS(行lineStart,int markerMask)→line
这些消息有效地搜索了包含给定标记集的行。搜索从行号开始,lineStart并继续前进到文件末尾(SCI_MARKERNEXT)或向后前进到文件开头(SCI_MARKERPREVIOUS)。markerMask对于您要查找的每个标记,参数应设置为一位。将位0设置为找到标记0,将位1设置为标记1,依此类推。该消息返回第一行的行号,markerMask如果没有找到标记,则包含 或-1中的一个标记。

SCI_MARKERLINEFROMHANDLE(INT markerHandle)→线
markerHandle参数是用于通过返回标记的标识符SCI_MARKERADD此函数使用此句柄在文档中搜索标记,并返回包含该标记的行号;如果找不到,则返回-1。

SCI_MARKERDELETEHANDLE(int markerHandle)
markerHandle参数是所返回标记的标识符SCI_MARKERADD此功能使用此句柄在文档中搜索标记,并在找到标记时将其删除。

SCI_MARKERHANDLEFROMLINE(行线,int哪)→int
SCI_MARKERNUMBERFROMLINE(行线,int哪)→int
这些消息返回给定的第N个标记句柄或标记号line句柄由返回SCI_MARKERADD如果which大于或等于一行上的标记数,则返回-1;否则,返回-1。

指标

指示器用于在样式顶部显示其他信息。例如,通过在文本下方或文本周围的框下划线,可以将它们用于显示语法错误,过时的名称和错误的缩进。

当鼠标悬停在指示器上或插入符号插入指示器时,指示器可能具有不同的“悬停”颜色和样式。例如,这可以用于指示可以单击URL。

指示器可以显示为简单的下划线,弯曲的下划线,小的“ T”形线,对角阴影线,删除线或文本周围的矩形。当用于跟踪应用程序的内容片段时,它们也可能不可见INDIC_HIDDEN

这些SCI_INDIC*消息使您可以获取并设置指示器的视觉外观。它们都使用indicator0到INDICATOR_MAX(35)范围内参数来将指标设置为样式。为了防止干扰,将指示器集划分为词法分析器的使用范围(0..7),容器使用的范围(8 = INDICATOR_CONTAINER.. 31 = INDICATOR_IME-1)和IME指示器的范围(32 = INDICATOR_IME.. 35 = INDICATOR_IME_MAX)。

INDICATOR_*用于瓜分指标值以前INDIC_CONTAINERINDIC_IMEINDIC_IME_MAX,和INDIC_MAX ,但这些被混淆指标样式,以便新的名称应使用。

指标以类似于游程长度编码的格式存储,这在速度和稀疏信息存储方面均十分有效。

指标可能会为每个范围存储不同的值,但通常所有值的绘制都相同。所述SCI_INDICSETFLAGS API可被用于显示不同的值不同的颜色。

最初,Scintilla对指标使用了不同的技术,但是该技术已被删除 ,API不执行任何操作虽然两种技术都得到支持,但术语“现代指标”用于较新的实现。

SCI_INDICSETSTYLE(int indicator, int indicatorStyle)
SCI_INDICGETSTYLE(int indicator) → int
SCI_INDICSETFORE(int indicator, colour fore)
SCI_INDICGETFORE(int indicator) → colour
SCI_INDICSETALPHA(int indicator, alpha alpha)
SCI_INDICGETALPHA(int indicator) → int
SCI_INDICSETOUTLINEALPHA(int indicator, alpha alpha)
SCI_INDICGETOUTLINEALPHA(int indicator) → int
SCI_INDICSETUNDER(int indicator, bool under)
SCI_INDICGETUNDER(int indicator) → bool
SCI_INDICSETHOVERSTYLE(int indicator, int indicatorStyle)
SCI_INDICGETHOVERSTYLE(int indicator) → int
SCI_INDICSETHOVERFORE(int indicator, colour fore)
SCI_INDICGETHOVERFORE(int indicator) → colour
SCI_INDICSETFLAGS(int indicator, int flags)
SCI_INDICGETFLAGS(int indicator) → int

SCI_SETINDICATORCURRENT(int indicator)
SCI_GETINDICATORCURRENT → int
SCI_SETINDICATORVALUE(int value)
SCI_GETINDICATORVALUE → int
SCI_INDICATORFILLRANGE(position start, position lengthFill)
SCI_INDICATORCLEARRANGE(position start, position lengthClear)
SCI_INDICATORALLONFOR(position pos) → int
SCI_INDICATORVALUEAT(int indicator, position pos) → int
SCI_INDICATORSTART(int indicator, position pos) → position
SCI_INDICATOREND(int indicator, position pos) → position
SCI_FINDINDICATORSHOW(position start, position end)
SCI_FINDINDICATORFLASH(position start, position end)
SCI_FINDINDICATORHIDE

SCI_INDICSETSTYLE(int indicator,int indicatorStyle)
SCI_INDICGETSTYLE(int indicator)→int
这两个消息设置并获取特定指示器的样式。当前可用的指标样式为:
指标样本

符号 视觉效果
INDIC_PLAIN 0 用单条直线加下划线。
INDIC_SQUIGGLE 1个 弯曲的下划线。需要3个像素的下降空间。
INDIC_TT 2 一排小T形。
INDIC_DIAGONAL 3 对角线孵化。
INDIC_STRIKE 4 罢工。
INDIC_HIDDEN 5 没有视觉效果的指示器。
INDIC_BOX 6 文字周围的矩形。
INDIC_ROUNDBOX 7 使用半透明绘图在文本周围带有圆角的矩形,其内部通常比边框更透明。您可以使用 SCI_INDICSETALPHASCI_INDICSETOUTLINEALPHA 来控制Alpha透明度值。填充颜??色的默认alpha值是30,轮廓颜色的默认alpha值是50。
INDIC_STRAIGHTBOX 8 使用半透明绘图的文本周围的矩形,其内部通常比边框更透明。您可以使用 SCI_INDICSETALPHASCI_INDICSETOUTLINEALPHA 来控制Alpha透明度值。填充颜??色的默认alpha值是30,轮廓颜色的默认alpha值是50。该指示符不会为行的顶部像素着色,因此连续行上的指示符在视觉上是不同的并且是断开的。
INDIC_FULLBOX 16 使用半透明绘图围绕文本的矩形,类似于INDIC_STRAIGHTBOX 但覆盖整个字符区域。
INDIC_DASH 9 下划线。
INDIC_DOTS 10 点划线。
INDIC_SQUIGGLELOW 11 类似于INDIC_SQUIGGLE但仅使用2个垂直像素,因此适合小字体。
INDIC_DOTBOX 12 使用半透明绘图在文本周围的虚线矩形。半透明使用Alpha设置在Alpha和轮廓Alpha设置与左上角像素之间切换。 SCI_INDICSETALPHASCI_INDICSETOUTLINEALPHA 控制Alpha透明度值。对于Alpha,默认值为30;对于轮廓Alpha,默认值为50。为了避免过多的内存分配,虚线框的最大宽度为4000像素。
INDIC_GRADIENT 20 顶部的颜色和alpha到底部的完全透明之间的垂直渐变。
INDIC_GRADIENTCENTRE 21 具有指定颜色和中间alpha的垂直渐变,顶部和底部完全透明。
INDIC_SQUIGGLEPIXMAP 13 该版本INDIC_SQUIGGLE使用像素图绘制,而不是使用一系列线段来提高性能。测得比INDIC_SQUIGGLEGTK 快3至6倍INDIC_SQUIGGLE在HiDPI模式下,外观不如在OS X上好。
INDIC_COMPOSITIONTHICK 14 该行的底部有一个2像素厚的下划??线,以尽量避免接触字符库。每一侧都插入1个像素,因此这种覆盖范围的样式的不同指示符显得孤立。这类似于亚洲语言输入合成中用于目标的外观。
INDIC_COMPOSITIONTHIN 15 1像素厚的下划??线位于行的底部之前。每一侧都插入1个像素,因此这种覆盖范围的样式的不同指示符显得孤立。这类似于在亚洲语言输入合成中用于非目标范围的外观。
INDIC_TEXTFORE 17 将文本的颜色更改为指示器的前颜色。
INDIC_POINT 18 在指标范围的起点下方绘制一个三角形。
INDIC_POINTCHARACTER 19 在指标范围的第一个字符的中心下方绘制一个三角形。

默认指示符样式等效于:
SCI_INDICSETSTYLE(0, INDIC_SQUIGGLE);
SCI_INDICSETSTYLE(1, INDIC_TT);
SCI_INDICSETSTYLE(2, INDIC_PLAIN);

SCI_INDICSETFORE(int指示符,前景色
SCI_INDICGETFORE(int指示符)→color
这两个消息设置并获取用于绘制指示符的颜色。默认指示器颜色等效于:(
SCI_INDICSETFORE(0, 0x007f00);深绿色)
SCI_INDICSETFORE(1, 0xff0000);(浅蓝色)
SCI_INDICSETFORE(2, 0x0000ff);(浅红色)

SCI_INDICSETALPHA(int指示符,alpha字母)
SCI_INDICGETALPHA(int指示符)→int
这两个消息设置并获取用于绘制INDIC_ROUNDBOX和INDIC_STRAIGHTBOX矩形填充颜色的alpha透明度。alpha值的范围可以从0(完全透明)到255(不透明)。

SCI_INDICSETOUTLINEALPHA(int指示符,alpha字母)
SCI_INDICGETOUTLINEALPHA(int指示符)→int
这两个消息设置并获得用于绘制INDIC_ROUNDBOX和INDIC_STRAIGHTBOX矩形轮廓颜色的alpha透明度。alpha值的范围可以从0(完全透明)到255(不透明)。

SCI_INDICSETUNDER(int指示符,布尔值位于下方)
SCI_INDICGETUNDER(int指示符)→bool
这两个消息设置并获取指示符是在文本下方还是上方绘制(默认)。在不推荐使用的单相绘图 模式下,无法在文本下绘图

SCI_INDICSETHOVERSTYLE(int指示器,int indicatorStyle)
SCI_INDICGETHOVERSTYLE(int指示器)→int
SCI_INDICSETHOVERFORE(int指示器,颜色前)
SCI_INDICGETHOVERFORE(int指示器)→color
这些消息设置并获得鼠标悬停在其上时用于绘制指示器的颜色和样式或样式插入符号移入其中。当鼠标悬停样式绘制指示器时,鼠标光标也会更改。缺省设置是使悬停外观与常规外观相同,并且调用 SCI_INDICSETFORESCI_INDICSETSTYLE也会重置悬停属性。

SCI_INDICSETFLAGS(int指示符,int标志)
SCI_INDICGETFLAGS(int指示符)→int
这些消息设置并获取与指示符关联的标志。当前定义了一个标志SC_INDICFLAG_VALUEFORE:设置此标志时,指示符使用的颜色不是来自指示符的开头设置,而是来自文件中该点处的指示符值。这允许单个指示器显示多种颜色。值为RGB整数颜色SC_INDICVALUEBIT在调用SCI_SETINDICATORVALUE已与(0x1000000)配合使用从值中查找颜色,并用SC_INDICVALUEMASK(0xFFFFFF)

SCI_SETINDICATORCURRENT(int指示器)
SCI_GETINDICATORCURRENT→int
这两个消息设置并获取将受到调用 SCI_INDICATORFILLRANGE(位置开始,位置lengthFill)SCI_INDICATORCLEARRANGE(位置开始,位置lengthClear)的影响的指示器

SCI_SETINDICATORVALUE(int值)
SCI_GETINDICATORVALUE→int
这两个消息设置并获取将通过调用SCI_INDICATORFILLRANGE设置的值

SCI_INDICATORFILLRANGE(位置开始,位置lengthFill)
SCI_INDICATORCLEARRANGE(位置开始,位置lengthClear)
这两个消息填充或清除了当前指标的范围。 SCI_INDICATORFILLRANGE用当前值填充。

SCI_INDICATORALLONFOR(position pos)→int
检索一个位图值,该值表示某个位置哪些指示符非零。结果中仅表示前32个指标,因此不包含IME指标。

SCI_INDICATORVALUEAT(int指标,位置pos)→int
检索某个位置上特定指标的值。

SCI_INDICATORSTART(int指示器,位置pos)→位置
SCI_INDICATOREND(int指示器,位置pos)→位置
从范围内的位置开始,使用一个值查找范围的开始或结束。可用于遍历文档以发现所有指标位置。

OS X查找指示器

在OS X上,搜索匹配项以动画的金色圆角矩形突出显示。指示器显示,然后短暂增长25%,并缩小到原始大小以引起用户的注意。尽管此功能当前仅在OS X上实现,但将来可能会在其他平台上实现。

SCI_FINDINDICATORSHOW(位置开始,位置结束)
SCI_FINDINDICATORFLASH(位置开始,位置结束)
这两个消息显示并为查找指示器添加动画。的指示保持可见,SCI_FINDINDICATORSHOW显示半秒钟后消失 SCI_FINDINDICATORFLASHSCI_FINDINDICATORSHOW行为与OS X TextEdit和Safari应用程序类似,最适合编辑搜索目标通常是单词的文档。 SCI_FINDINDICATORFLASH与Xcode相似,适用于编辑源代码,其中匹配项通常位于运算符旁边,否则该运算符将隐藏在指标的填充之下。

SCI_FINDINDICATORHIDE
该消息隐藏查找指示符。

早期版本的Scintilla允许 在样式编号和指示符之间划分样式字节,并提供用于设置和查询此样式的API。

自动补全

自动补全显示一个列表框,其中显示了基于用户键入的可能的标识符。用户通过按下制表符或作为定义的填充字符集成员的另一个字符来选择当前选择的项目SCI_AUTOCSETFILLUPS自动补全由您的应用程序触发。例如,在C语言中,如果您检测到用户刚刚打字fred.,则可以查找fred,并且如果它具有已知的成员列表,则可以在自动完成列表中提供它们。或者,您可以监视用户的键入,并在他们的键入将选择范围缩小到一个合理的列表之后,提供可能项目的列表。作为另一种选择,您可以定义一个密钥代码来激活列表。

当用户从列表中进行选择时,将向容器发送一条SCN_AUTOCSELECTION 通知消息从通知返回时,Scintilla将插入所选文本,并且除非自动完成列表已被取消(例如通过容器send),否则 将向容器发送SCN_AUTOCCOMPLETED 通知消息SCI_AUTOCCANCEL

要使用自动完成功能,必须监视添加到文档中的每个字符。有关SciTEBase::CharAdded()自动补全的示例,请参见 SciTEBase.cxx。

SCI_AUTOCSHOW(position lengthEntered, const char *itemList)
SCI_AUTOCCANCEL
SCI_AUTOCACTIVE → bool
SCI_AUTOCPOSSTART → position
SCI_AUTOCCOMPLETE
SCI_AUTOCSTOPS(<unused>, const char *characterSet)
SCI_AUTOCSETSEPARATOR(int separatorCharacter)
SCI_AUTOCGETSEPARATOR → int
SCI_AUTOCSELECT(<unused>, const char *select)
SCI_AUTOCGETCURRENT → int
SCI_AUTOCGETCURRENTTEXT(<unused>, char *text) → int
SCI_AUTOCSETCANCELATSTART(bool cancel)
SCI_AUTOCGETCANCELATSTART → bool
SCI_AUTOCSETFILLUPS(<unused>, const char *characterSet)
SCI_AUTOCSETCHOOSESINGLE(bool chooseSingle)
SCI_AUTOCGETCHOOSESINGLE → bool
SCI_AUTOCSETIGNORECASE(bool ignoreCase)
SCI_AUTOCGETIGNORECASE → bool
SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR(int behaviour)
SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR → int
SCI_AUTOCSETMULTI(int multi)
SCI_AUTOCGETMULTI → int
SCI_AUTOCSETORDER(int order)
SCI_AUTOCGETORDER → int
SCI_AUTOCSETAUTOHIDE(bool autoHide)
SCI_AUTOCGETAUTOHIDE → bool
SCI_AUTOCSETDROPRESTOFWORD(bool dropRestOfWord)
SCI_AUTOCGETDROPRESTOFWORD → bool
SCI_REGISTERIMAGE(int type, const char *xpmData)
SCI_REGISTERRGBAIMAGE(int type, const char *pixels)
SCI_CLEARREGISTEREDIMAGES
SCI_AUTOCSETTYPESEPARATOR(int separatorCharacter)
SCI_AUTOCGETTYPESEPARATOR → int
SCI_AUTOCSETMAXHEIGHT(int rowCount)
SCI_AUTOCGETMAXHEIGHT → int
SCI_AUTOCSETMAXWIDTH(int characterCount)
SCI_AUTOCGETMAXWIDTH → int

SCI_AUTOCSHOW(位置长度输入,常量字符* itemList)
此消息导致显示列表。lengthEntered是已经输入的单词的字符数,并且itemList是由分隔符分隔的单词列表。初始分隔符是一个空格,但是可以使用SCI_AUTOCSETSEPARATOR设置或获取SCI_AUTOCGETSEPARATOR

在默认设置下,单词列表应按排序顺序排列。如果使用设置为忽略大小写模式SCI_AUTOCSETIGNORECASE,则在将字符串转换为大写字母之后进行匹配。这样的结果是该列表应按字母后面的标点符号'[','\',']','^','_和'`进行排序。可以使用SCI_AUTOCSETORDER指定列表顺序的替代处理

SCI_AUTOCCANCEL
该消息取消所有显示的自动完成列表。在自动补全模式下,当用户键入不属于自动补全的字符时,该列表应消失,例如在输入标识符时输入'。','('或'['。一组将取消自动补全的字符可以用指定SCI_AUTOCSTOPS

SCI_AUTOCACTIVE→bool
如果存在活动的自动完成列表,则此消息返回非零;否则,返回零。

SCI_AUTOCPOSSTART→位置开始显示列表
时,它返回当前位置的值SCI_AUTOCSHOW

SCI_AUTOCCOMPLETE
此消息触发自动完成。与Tab键具有相同的效果。

SCI_AUTOCSTOPS(<未使用>,常量字符* CHARACTERSET)
characterSet参数是包含将自动取消自动完成列表的字符列表的字符串。启动编辑器时,此列表为空。

SCI_AUTOCSETSEPARATOR(int spacerCharacter)
SCI_AUTOCGETSEPARATOR→int
这两个消息设置并获取用于分隔SCI_AUTOCSHOW列表中单词的分隔符 默认为空格字符。

SCI_AUTOCSELECT(<未使用>,const char * select)
SCI_AUTOCGETCURRENT→int
此消息选择自动完成列表中的一个项目。它在单词列表中搜索第一个匹配的单词select默认情况下,比较区分大小写,但是您可以使用进行更改SCI_AUTOCSETIGNORECASE匹配是select字符串长度的逐个字符也就是说,如果select是“ Fred”,则如果这是列表中以“ Fred”开头的第一项,则它将与“ Frederick”匹配。如果找到一个项目,则将其选中。如果未找到该项目,则当自动隐藏为true时,自动完成列表将关闭(请参阅参考资料SCI_AUTOCSETAUTOHIDE)。
可以使用检索当前选择索引SCI_AUTOCGETCURRENT

SCI_AUTOCGETCURRENTTEXT(<未使用>,char * text NUL终止)→int
此消息检索自动完成列表中的当前选定文本。通常,使用 SCN_AUTOCSELECTION通知代替。

该值将被复制到text缓冲区,并返回长度(不包括终止符0)。如果未找到,则将空字符串复制到缓冲区并返回0。

如果value参数为0,则返回应分配用于存储值的长度;否则,返回0。同样,不包括终止符0。

SCI_AUTOCSETCANCELATSTART(取消布尔)
SCI_AUTOCGETCANCELATSTART→bool
如果插入符号移动到显示列表时所在的位置,则默认行为是取消列表。通过使用false参数调用此消息,直到插入符号在单词完成之前移动至少一个字符后,列表才会被取消。

SCI_AUTOCSETFILLUPS(<unused>,const char * characterSet)
如果在自动完成列表处于活动状态的情况下键入填充字符,则列表中当前选择的项目将添加到文档中,然后添加填充字符。常见的填充字符为'(','['和'。',但其他填充字符也可能取决于语言。默认情况下,未设置任何填充字符。

SCI_AUTOCSETCHOOSESINGLE(布尔选择单)
SCI_AUTOCGETCHOOSESINGLE→bool
如果您使用SCI_AUTOCSETCHOOSESINGLE(1)并且列表中只有一项,则会自动添加该列表,并且不会显示任何列表。默认设置是即使只有一个项目也要显示列表。

SCI_AUTOCSETIGNORECASE(bool ignoreCase)
SCI_AUTOCGETIGNORECASE→bool
默认情况下,字符与列表成员的匹配区分大小写。这些消息使您可以设置并区分大小写。

SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR(int行为)
SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR→int
将自动完成设置为忽略大小写(SCI_AUTOCSETIGNORECASE)时,默认情况下,它将选择以区分大小写的方式匹配输入字符的第一个列表成员。这对应于行为属性SC_CASEINSENSITIVEBEHAVIOUR_RESPECTCASE(0)。如果要让自动补全完全忽略大小写,请选择SC_CASEINSENSITIVEBEHAVIOUR_IGNORECASE(1)。

SCI_AUTOCSETMULTI(int multi)
SCI_AUTOCGETMULTI→int
在存在多个选择的情况下自动完成时,自动完成的文本可以仅通过SC_MULTIAUTOC_ONCE(0)进入主选择, 或者通过SC_MULTIAUTOC_EACH(1)进入每个选择默认值为SC_MULTIAUTOC_ONCE

SCI_AUTOCSETORDER(整数顺序)
SCI_AUTOCGETORDER→整数
默认设置SC_ORDER_PRESORTED(0)要求以字母顺序排列列表。

列表排序可以由Scintilla完成,而不是使用SC_ORDER_PERFORMSORT(1)进行。这将需要更多时间。

希望优先处理某些值并按优先级顺序而不是字母顺序显示列表的应用程序可以使用SC_ORDER_CUSTOM(2)。这需要在SCI_AUTOCSHOW中进行额外的处理才能创建排序索引。

设置顺序应在调用SCI_AUTOCSHOW之前完成

SCI_AUTOCSETAUTOHIDE(布尔自动隐藏)
SCI_AUTOCGETAUTOHIDE→bool
默认情况下,如果没有可行的匹配项,则该列表将被取消(用户键入的字符不再与列表项匹配)。如果要继续显示原始列表,请设置autoHidefalse这也会产生影响SCI_AUTOCSELECT

SCI_AUTOCSETDROPRESTOFWORD(bool dropRestOfWord)
SCI_AUTOCGETDROPRESTOFWORD→bool
选择一个项目时,如果dropRestOfWord置位插入符号,则首先删除插入符号后面的所有单词字符 true默认值为false

SCI_REGISTERIMAGE(int类型,const char * xpmData)
SCI_REGISTERRGBAIMAGE(int类型,const char * pixels)
SCI_CLEARlocatedIMAGES
SCI_AUTOCSETTYPESEPARATOR(int
spacerCharacter SCI_AUTOCGETTYPESEPARATOR→int
自动完成列表项可能会显示图像和文本。首先将每个图像注册为整数类型。然后,此整数将包含在列表的文本中,并以“?”分隔 从文本。例如,“ fclose?2 fopen”在字符串“ fclose”之前显示图像2,而在“ fopen”之前不显示图像。图像采用XPM格式SCI_REGISTERIMAGE)或 RGBA格式SCI_REGISTERRGBAIMAGE)。SCI_REGISTERRGBAIMAGESCI_RGBAIMAGESETWIDTHSCI_RGBAIMAGESETHEIGHT消息。可以用SCI_CLEARREGISTEREDIMAGES清除“?” 套准图像分隔符已更改为SCI_AUTOCSETTYPESEPARATOR

SCI_AUTOCSETMAXHEIGHT(int rowCount)
SCI_AUTOCGETMAXHEIGHT→int
获取或设置自动完成列表中可见的最大行数。如果列表中有更多行,则显示垂直滚动条。默认值为5。

SCI_AUTOCSETMAXWIDTH(int characterCount)
SCI_AUTOCGETMAXWIDTH→int
获取或设置自动完成列表的最大宽度,该宽度表示为最长条目中完全可见的字符数。如果为零(默认值),则计算列表的宽度以适合具有最多字符的项目。省略号表示无法在可用宽度内完全显示的任何项目。

用户清单

用户列表使用与自动完成列表相同的内部机制,并且列出的所有用于自动完成的调用均在其上起作用。您不能在自动完成列表处于活动状态的同时显示用户列表。它们在以下方面有所不同:

SCI_USERLISTSHOW(int listType, const char *itemList)

o该SCI_AUTOCSETCHOOSESINGLE消息无效。
o当用户进行选择时,您会收到一条SCN_USERLISTSELECTION 通知消息,而不是SCN_AUTOCSELECTION

注意:如果您设置了填充字符或停止字符,这些字符在用户列表中仍将处于活动状态,并可能由于用户在编辑器中键入而导致选择项目或取消用户列表。

SCI_USERLISTSHOW(INT listType,常量字符* itemList中)
listType参数被返回到容器作为wParam 所述的场SCNotification 结构。它必须大于0,因为这是Scintilla判断自动完成列表和用户列表之间的区别的方式。如果您有不同类型的列表,例如缓冲区列表和宏列表,则可以listType用来判断哪个返回了选择。

通话提示

调用提示是显示函数自变量的小窗口,并在用户键入函数名称后显示。它们通常使用定义的字体字体名称,大小和字符集来显示字符 STYLE_DEFAULT您可以选择使用STYLE_CALLTIP定义人脸名称,大小,前景和背景颜色以及字符集 SCI_CALLTIPUSESTYLE这也启用了对制表符的支持。呼叫提示与自动完成列表之间存在一些交互,因为显示呼叫提示会取消任何活动的自动完成列表,反之亦然。

通话提示可以突出显示其中的部分文字。您可以通过计数逗号(或您的语言使用的任何分隔符)的数量来突出显示函数的当前参数。请参阅SciTEBase::CharAdded()SciTEBase.cxx的呼叫提示用法示例。

可以在呼叫提示上单击鼠标,这会导致将 SCN_CALLTIPCLICK 通知发送到容器。向上和向下的小箭头分别显示在呼叫提示中,包括字符“ \ 001”或“ \ 002”。这对于显示一个功能名称的重载变体以及用户可以单击箭头以循环浏览重载非常有用。

或者,当您将鼠标指针悬停在单词上一会儿时,会显示呼叫提示,以响应SCN_DWELLSTART 通知,并在响应时被取消SCN_DWELLEND此方法可在调试器中使用以提供变量的值,或在编辑过程中使用以提供有关指针下的单词的信息。

SCI_CALLTIPSHOW(position pos, const char *definition)
SCI_CALLTIPCANCEL
SCI_CALLTIPACTIVE → bool
SCI_CALLTIPPOSSTART → position
SCI_CALLTIPSETPOSSTART(position posStart)
SCI_CALLTIPSETHLT(position highlightStart, position highlightEnd)
SCI_CALLTIPSETBACK(colour back)
SCI_CALLTIPSETFORE(colour fore)
SCI_CALLTIPSETFOREHLT(colour fore)
SCI_CALLTIPUSESTYLE(int tabSize)
SCI_CALLTIPSETPOSITION(bool above)

SCI_CALLTIPSHOW(position pos,const char * definition)
此消息通过显示呼叫提示窗口来启动该过程。如果呼叫提示已处于活动状态,则无效。
pos是在文档中对齐呼叫提示的位置。除非您在呼叫提示文本中包括向上和/或向下箭头,否则呼叫提示文本将对齐到该字符下方的第一行,在这种情况下,呼叫提示文本将与最右箭头的右边缘对齐。假设您将以类似“ \ 001 1 of 3 \ 002”的文本开头。
definition是通话提示文字。它可以包含多行,用'\ n'(换行,ASCII码10)字符分隔。不要包括“ \ r”(回车,ASCII码13),因为这很可能会打印为一个空框。如果使用设置制表符大小,则支持'\ t'(制表符,ASCII代码9) SCI_CALLTIPUSESTYLE
此处会记住插入符号的位置,因此,如果随后的删除操作将插入符号移动到该位置之前,则呼叫提示可以自动取消。

SCI_CALLTIPCANCEL
该消息取消所有显示的呼叫提示。如果您使用任何与编辑函数的参数列表不兼容的键盘命令,Scintilla也会为您取消呼叫提示。如果您删除超过触发提示时插入符号所在的位置,则通话提示将被取消。

SCI_CALLTIPACTIVE→bool
如果呼叫提示处于活动状态,则返回1,如果未激活则返回0。

SCI_CALLTIPPOSSTART→位置
SCI_CALLTIPSETPOSSTART(position posStart)
SCI_CALLTIPSHOW 开始显示笔尖时,此消息返回或设置当前位置的值

SCI_CALLTIPSETHLT(position HighlightStart,position HighlightEnd)
设置呼叫提示文本的区域,使其以突出显示的样式显示。 highlightStart是突出显示的第一个字符的字符串的从零开始highlightEnd的索引,也是突出显示后的第一个字符的索引。 highlightEnd必须大于highlightStart; highlightEnd-highlightStart是要突出显示的字符数。如果需要,突出显示可以延伸到行尾。

未突出显示的文本以中间灰色绘制。所选文本以深蓝色绘制。背景是白色的。这些可以被改变 SCI_CALLTIPSETBACKSCI_CALLTIPSETFORESCI_CALLTIPSETFOREHLT

SCI_CALLTIPSETBACK(彩色背景)
可以使用此消息设置呼叫提示的背景颜色。默认颜色是白色。将深色设置为背景不是一个好主意,因为普通calltip文本的默认颜色为中间灰色,而突出显示的文本的默认颜色为深蓝色。这也会设置的背景色STYLE_CALLTIP

SCI_CALLTIPSETFORE(color fore
可以使用此消息设置呼叫提示文本的颜色;默认颜色为中间灰色。这也会设置的前景色STYLE_CALLTIP

SCI_CALLTIPSETFOREHLT(color fore
可以使用此消息设置突出显示的呼叫提示文本的颜色。默认颜色是深蓝色。

SCI_CALLTIPUSESTYLE(int tabSize)
此消息将用于呼叫提示的样式从更改为STYLE_DEFAULTSTYLE_CALLTIP并以屏幕像素为单位设置标签大小。如果tabsize小于1,则不对制表符进行特殊处理。一旦使用了此呼叫,呼叫提示的前景色和背景色也将从样式中获取。

SCI_CALLTIPSETPOSITION(上方的布尔值)
默认情况下,calltip显示在文本下方,设置为true (1)上方将显示在文本上方。

键盘指令

为了允许容器应用程序使用键盘执行用户可用的任何操作,所有键盘操作都是消息。它们不带任何参数。当用SCI_ASSIGNCMDKEY消息重新定义键绑定时,也使用这些命令

SCI_LINEDOWN SCI_LINEDOWNEXTEND SCI_LINEDOWNRECTEXTEND SCI_LINESCROLLDOWN
SCI_LINEUP SCI_LINEUPEXTEND SCI_LINEUPRECTEXTEND SCI_LINESCROLLUP
SCI_PARADOWN SCI_PARADOWNEXTEND SCI_PARAUP SCI_PARAUPEXTEND
SCI_CHARLEFT SCI_CHARLEFTEXTEND SCI_CHARLEFTRECTEXTEND
SCI_CHARRIGHT SCI_CHARRIGHTEXTEND SCI_CHARRIGHTRECTEXTEND
SCI_WORDLEFT SCI_WORDLEFTEXTEND SCI_WORDRIGHT SCI_WORDRIGHTEXTEND
SCI_WORDLEFTEND SCI_WORDLEFTENDEXTEND SCI_WORDRIGHTEND SCI_WORDRIGHTENDEXTEND
SCI_WORDPARTLEFT SCI_WORDPARTLEFTEXTEND SCI_WORDPARTRIGHT SCI_WORDPARTRIGHTEXTEND
SCI_HOME SCI_HOMEEXTEND SCI_HOMERECTEXTEND
SCI_HOMEDISPLAY SCI_HOMEDISPLAYEXTEND SCI_HOMEWRAP SCI_HOMEWRAPEXTEND
SCI_VCHOME SCI_VCHOMEEXTEND SCI_VCHOMERECTEXTEND
SCI_VCHOMEWRAP SCI_VCHOMEWRAPEXTEND SCI_VCHOMEDISPLAY SCI_VCHOMEDISPLAYEXTEND
SCI_LINEEND SCI_LINEENDEXTEND SCI_LINEENDRECTEXTEND
SCI_LINEENDDISPLAY SCI_LINEENDDISPLAYEXTEND SCI_LINEENDWRAP SCI_LINEENDWRAPEXTEND
SCI_DOCUMENTSTART SCI_DOCUMENTSTARTEXTEND SCI_DOCUMENTEND SCI_DOCUMENTENDEXTEND
SCI_PAGEUP SCI_PAGEUPEXTEND SCI_PAGEUPRECTEXTEND
SCI_PAGEDOWN SCI_PAGEDOWNEXTEND SCI_PAGEDOWNRECTEXTEND
SCI_STUTTEREDPAGEUP SCI_STUTTEREDPAGEUPEXTEND
SCI_STUTTEREDPAGEDOWN SCI_STUTTEREDPAGEDOWNEXTEND
SCI_DELETEBACK SCI_DELETEBACKNOTLINE
SCI_DELWORDLEFT SCI_DELWORDRIGHT SCI_DELWORDRIGHTEND
SCI_DELLINELEFT SCI_DELLINERIGHT SCI_LINEDELETE SCI_LINECUT
SCI_LINECOPY SCI_LINETRANSPOSE SCI_LINEREVERSE SCI_LINEDUPLICATE
SCI_LOWERCASE SCI_UPPERCASE SCI_CANCEL SCI_EDITTOGGLEOVERTYPE
SCI_NEWLINE SCI_FORMFEED SCI_TAB SCI_BACKTAB
SCI_SELECTIONDUPLICATE SCI_VERTICALCENTRECARET
SCI_MOVESELECTEDLINESUP SCI_MOVESELECTEDLINESDOWN
SCI_SCROLLTOSTART SCI_SCROLLTOEND

这些SCI_*EXTEND消息扩展了选择范围。

SCI_*RECTEXTEND消息扩展矩形选择(和常规选择转换为矩形波,如果有的话)。

这些SCI_WORDPART*命令用于在以大写(aCamelCaseIdentifier)或下划线(an_under_bar_ident)标记的单词段之间移动。

SCI_WORD[LEFT|RIGHT]END*命令类似于SCI_WORD[LEFT|RIGHT]*但字结束,而不是开始单词之间移动。

SCI_HOME*命令将移动插入符行的开始,而 SCI_VCHOME*命令移动插入符号到第一非空白字符行的,除非它已经处在那里(即刚好压痕之后); 在这种情况下,它充当SCI_HOME *。

SCI_[HOME|LINEEND]DISPLAY*命令在换行模式下使用,以允许移动到显示行的开头或结尾,而普通 SCI_[HOME|LINEEND]命令则移动到文档行的开头或结尾。

这些SCI_[[VC]HOME|LINEEND]WRAP*命令就像它们的名字一样, SCI_[[VC]HOME|LINEEND]*只是它们在启用自动换行时的行为有所不同:它们先行到显示行的开始/结尾,例如SCI_[HOME|LINEEND]DISPLAY*,但是如果光标已经在该点,它将继续到开始或结束文档行中的,适用于SCI_[[VC]HOME|LINEEND]*

这些SCI_SCROLLTO[START|END]命令将文档滚动到开始或结束而不更改选择。这些命令与OS X平台约定相匹配,用于homeend的行为 通过将homeend绑定到这些命令,可以使Scintilla匹配OS X应用程序

SCI_CANCEL命令取消自动完成和calltip显示,并放弃所有其他选择。

按键绑定

默认情况下,该文件的Scintilla源文件中定义的命令与键的默认绑定是KeyMap.cxx常量KeyMap::MapDefault[]该表将键定义映射到SCI_*不带参数的消息(多数是上面讨论键盘命令,但是可以映射任何不带参数的Scintilla命令)。您可以更改映射以适合自己的需求。

SCI_ASSIGNCMDKEY(int keyDefinition, int sciCommand)
SCI_CLEARCMDKEY(int keyDefinition)
SCI_CLEARALLCMDKEYS
SCI_NULL

keyDefinition
键定义包含低16位的键代码和高16位的键修饰符。结合keyCodekeyMod设置:

keyDefinition = keyCode + (keyMod << 16)

键控代码是可见光或控制字符或从一个键SCK_* 的枚举,它包含:
SCK_ADDSCK_BACKSCK_DELETESCK_DIVIDESCK_DOWNSCK_ENDSCK_ESCAPESCK_HOMESCK_INSERTSCK_LEFTSCK_MENUSCK_NEXT(下页), SCK_PRIOR页上), ,SCK_RETURNSCK_RIGHTSCK_RWINSCK_SUBTRACTSCK_TABSCK_UPSCK_WIN

所述改性剂是零个或多个的组合SCMOD_ALTSCMOD_CTRLSCMOD_SHIFTSCMOD_META,和SCMOD_SUPER在OS X上,将Command键映射到SCMOD_CTRL,将Control键映射SCMOD_METASCMOD_SUPER仅在通常是Windows键的GTK上可用。如果要构建表,则可能要使用SCMOD_NORM,其值为0,表示没有修饰符。

在Win32上,按下Alt键的数字小键盘可用于按数字输入字符。如果分配了功能键,则在非数字锁模式下可能会产生意外结果,因此可以忽略可能存在问题的键。例如,设置 SCMOD_ALTSCK_UP仅对主光标键上的向上键有效,而不对数字小键盘有效。

SCI_ASSIGNCMDKEY(int keyDefinition,int sciCommand)
这会将给定的键定义分配给由标识的Scintilla命令 sciCommandsciCommand可以是任何SCI_*不带参数的命令。

SCI_CLEARCMDKEY(int keyDefinition
这使给定的键定义通过将操作分配SCI_NULL 给它而什么也不做

SCI_CLEARALLCMDKEYS
此命令通过设置一个空的映射表来删除所有键盘命令映射。

SCI_NULL
SCI_NULL什么也不做,是分配给执行任何操作键的值。SCI_NULL确保键不会传播到父窗口,因为这可能会导致焦点移动。如果要标准平台行为,请改用常数0。

弹出式编辑菜单

SCI_USEPOPUP(int popUpMode)

SCI_USEPOPUP(int popUpMode)
单击鼠标上的错误按钮将弹出一个简短的默认编辑菜单。可以用关闭SCI_USEPOPUP(SC_POPUP_NEVER)如果将其关闭,则WM_CONTEXTMENUScintilla将不会处理上下文菜单命令(在Windows中为),因此Scintilla窗口的父级将有机会处理该消息。

符号 含义
SC_POPUP_NEVER 0 从不显示默认的编辑菜单。
SC_POPUP_ALL 1个 如果单击闪烁,则显示默认编辑菜单。
SC_POPUP_TEXT 2 仅在单击文本区域时显示默认编辑菜单。

宏录制

启动和停止宏录制模式。在宏录制模式下,操作会通过SCN_MACRORECORD 通知通知给容器然后由容器来记录这些动作以供将来重播。

SCI_STARTRECORD
SCI_STOPRECORD

SCI_STARTRECORD
SCI_STOPRECORD
这两条消息打开和关闭宏录制。

列印

SCI_FORMATRANGE可以用于将文本绘制到可以包括打印机显示表面的显示表面上。打印的输出在屏幕上显示文本样式,但是隐藏了除行号边距以外的所有边距。删除所有特殊标记效果,并且隐藏选择和插入符号。

不同的平台使用不同的显示表面ID类型进行打印。在Windows HDC上是GT,在GTK 3.x上s cairo_t *,并且在Cocoa CGContextRef上使用。

SCI_FORMATRANGE(bool draw, Sci_RangeToFormat *fr) → position
SCI_SETPRINTMAGNIFICATION(int magnification)
SCI_GETPRINTMAGNIFICATION → int
SCI_SETPRINTCOLOURMODE(int mode)
SCI_GETPRINTCOLOURMODE → int
SCI_SETPRINTWRAPMODE(int wrapMode)
SCI_GETPRINTWRAPMODE → int

SCI_FORMATRANGE(布尔绘制,Sci_RangeToFormat * fr)→位置
此调用将一系列文本呈现到设备上下文中。如果使用它进行打印,则可能需要排列页面的页眉和页脚。Scintilla不会为您这样做。参见SciTEWin::Print()SciTEWinDlg.cxx的示例。每次使用此消息都会将一定范围的文本呈现为一个矩形区域,并返回文档中要打印的下一个字符的位置。

draw控制是否完成任何输出。如果要进行分页,请将其设置为false(例如,如果将其与MFC一起使用,则在OnBeginPrinting()输出每页之前都需要进行分页

struct Sci_Rectangle {int left; 顶部 正确的 底部 };

struct Sci_RangeToFormat {
    Sci_SurfaceID hdc; //我们打印到的Surface ID
    Sci_SurfaceID hdcTarget; //我们用于测量的Surface ID(可能与hdc相同)
    Sci_Rectangle rc; //要打印的矩形
    Sci_Rectangle rcPage; //实际可打印的页面大小
    Sci_CharacterRange chrg; //要打印的字符范围
};

在Windows上,hdc并且hdcTarget都应该设置为输出设备(通常为打印机)的设备上下文句柄。如果您打印到图元文件,这些将与Windows图元文件不同(与扩展图元文件不同),它们不会实现用于返回信息的完整API。在这种情况下,设置hdcTarget为屏幕DC。
rcPage是矩形{0, 0, maxX, maxY},其中maxX+1maxY+1是x和y中可物理打印的像素数。
rc是用于呈现文本的矩形(当然,它将适合rcPage定义的矩形)。
chrg.cpMinchrg.cpMax定义要输出的字符的开始位置和最大位置。绘制此字符范围内的所有行。

在Cocoa上,调用视图的drawRect方法时,用于打印的表面ID(draw=1)应该是当前上下文((CGContextRef) [[NSGraphicsContext currentContext] graphicsPort]的图形端口Surface ID并没有真正用于测量(draw=0),但可以将其设置为位图上下文(使用创建CGBitmapContextCreate),以避免运行时警告。

在GTK上,可以使用打印上下文从中找到要使用的表面ID gtk_print_context_get_cairo_context(context)

chrg.cpMinchrg.cpMax定义要输出的字符的开始位置和最大位置。绘制此字符范围内的所有行。

打印时,最繁琐的部分始终是确定页边距,以允许纸张的不可打印区域并打印页眉和页脚。如果您在SciTE中查看打印代码,则会发现大部分代码已被使用。如果去除所有页边距,不可打印区域,页眉和页脚代码,则导致Scintilla呈现文本的循环非常简单。

SCI_SETPRINTMAGNIFICATION(int放大)
SCI_GETPRINTMAGNIFICATION→int
SCI_GETPRINTMAGNIFICATION可让您以与屏幕字体不同的大小进行打印。magnification是要添加到每种屏幕字体大小的点数。值-3或-4给出较小的打印量。您可以使用获取此值 SCI_GETPRINTMAGNIFICATION

SCI_SETPRINTCOLOURMODE(int模式)
SCI_GETPRINTCOLOURMODE→int
这两个消息设置并获取用于在可能使用白纸的打印机上呈现彩色文本的方法。如果使用深色或黑色屏幕背景,则考虑色彩处理尤为重要。在黑色上进行白色打印会比其他方法快得多地消耗碳粉和墨水。您可以将模式设置为以下之一:

符号 目的
SC_PRINT_NORMAL 0 使用当前屏幕颜色进行打印,但行号页边距除外,该行号在白色背景上打印。这是默认值。
SC_PRINT_INVERTLIGHT 1个 如果使用深色屏幕背景,这可以通过反转所有颜色的光值并在白色背景上打印来节省墨水。
SC_PRINT_BLACKONWHITE 2 在白色背景上将所有文本打印为黑色。
SC_PRINT_COLOURONWHITE 3 一切都以自己的颜色打印在白色背景上。
SC_PRINT_COLOURONWHITEDEFAULTBG 4 一切都以其自己的前景色打印,但所有样式(包括STYLE_LINENUMBER)(包括STYLE_LINENUMBER)都将在白色背景上打印。
SC_PRINT_SCREENCOLOURS 5 使用前景和背景的当前屏幕颜色进行打印。这是唯一不将行号边距的背景色设置为白色的模式。

SCI_SETPRINTWRAPMODE(int wrapMode)
SCI_GETPRINTWRAPMODE→int
这两个函数获取并设置打印机包装模式。wrapMode可以设置为SC_WRAP_NONE(0)或SC_WRAP_WORD(1)。默认值为 SC_WRAP_WORD,它将包装打印输出,以便所有字符都适合打印矩形。如果设置了SC_WRAP_NONE,则每一行文本都会生成一行输出,如果该行太长而无法放入打印区域,则该行将被截断。
SC_WRAP_WORD尝试仅在由空格或样式更改指示的单词之间换行,尽管如果单词长于一行,则会在行结束之前进行换行。
SC_WRAP_CHAR不支持打印。

直接访问

SCI_GETDIRECTFUNCTION → pointer
SCI_GETDIRECTPOINTER → pointer
SCI_GETCHARACTERPOINTER → pointer
SCI_GETRANGEPOINTER(position start, position lengthRange) → pointer
SCI_GETGAPPOSITION → position

在Windows上,用于在容器和Scintilla之间进行通信的消息传递方案是由操作系统SendMessage功能介导的,并且在密集调用时可能导致性能下降为了避免这种开销,Scintilla提供了一些消息,使您可以直接调用Scintilla消息函数。在C / C ++中执行此操作的代码的形式为:

#include“ Scintilla.h”
SciFnDirect pSciMsg =(SciFnDirect)SendMessage(hSciWnd,SCI_GETDIRECTFUNCTION,0,0);
sptr_t pSciWndData =(sptr_t)SendMessage(hSciWnd,SCI_GETDIRECTPOINTER,0,0);

//现在可以直接调用Scintilla的包装器
sptr_t CallScintilla(unsigned int iMessage,uptr_t wParam,sptr_t lParam){
    返回pSciMsg(pSciWndData,iMessage,wParam,lParam);
}

SciFnDirectsptr_tuptr_t在中声明 Scintilla.hhSciWnd是创建Scintilla窗口时返回的窗口句柄。

虽然速度更快,但是如果直接从Scintilla窗口的本机线程执行其他线程执行此直接调用,则会导致问题,在这种情况下,SendMessage(hSciWnd, SCI_*, wParam, lParam)应使用该直接调用与该窗口的线程进行同步。

此功能也可在GTK上使用,但对速度没有明显影响。

从Windows上的1.47版开始,Scintilla导出一个名为的函数Scintilla_DirectFunction该函数 可以与所返回的函数相同地使用 SCI_GETDIRECTFUNCTION这样可以避免您SCI_GETDIRECTFUNCTION通过函数指针直接调用 和调用Scintilla的麻烦。

SCI_GETDIRECTFUNCTION→指针
此消息返回要处理Scintilla消息的调用函数的地址,而无需通过Windows消息传递系统。无论您创建多少个Scintilla窗口,只需调用一次即可。

SCI_GETDIRECTPOINTER→指针
这将返回一个指向标识正在使用哪个Scintilla窗口的数据的指针。您必须为创建的每个Scintilla窗口调用一次。调用直接函数时,必须传入与目标窗口关联的直接指针。

SCI_GETCHARACTERPOINTER→指针
SCI_GETRANGEPOINTER(位置开始,位置lengthRange)→指针
SCI_GETGAPPOSITION→位置
授予对Scintilla用于存储文档的内存的临时直接只读访问。

SCI_GETCHARACTERPOINTER移动Scintilla中的间隙,以便连续存储文档的文本,并确保文本后有NUL字符,然后返回指向第一个字符的指针。然后,应用程序可以将其传递给接受字符指针的函数,例如正则表达式搜索或解析器。指针应被写入到作为可以Scintilla的失去同步的内部状态。

由于Scintilla中的任何操作都可能更改其内部状态,因此该指针在任何调用后或通过允许用户界面活动而变为无效。在对Scintilla进行任何调用或执行任何用户界面调用(如修改进度指示器)之后,应用程序应重新获取指针。

此调用所花费的时间与在文档末尾插入字符的时间相似,并且这可能包括移动文档内容。具体来说,文档空白之后的所有字符都将移动到空白之前。这种压缩状态应在不会更改文档内容的调用和用户界面操作上保持不变,因此之后很快重新获取指针。如果此调用用于实现全局替换操作,则每次替换都会移动间隙,因此如果SCI_GETCHARACTERPOINTER在每次替换之后调用,则该操作将变为O(n ^ 2)而不是O(n)。相反,应该找到并记住所有匹配项,然后执行所有替换。

SCI_GETRANGEPOINTER提供对所需范围的直接访问。除非间隙在请求的范围内,否则间隙不会移动,因此此调用可以比快SCI_GETCHARACTERPOINTER可以对文本块或行范围起作用的应用程序代码可以使用此代码。

SCI_GETGAPPOSITION返回当前间隙位置。这提示应用程序可以避免SCI_GETRANGEPOINTER 在包含间隙的范围内进行调用,并因此而产生移动间隙的成本。

多个视图

Scintilla窗口和它显示的文档是单独的实体。创建新窗口时,还创建一个新的空文档。每个文档的引用计数最初都设置为1。该文档还具有链接到该文档的Scintilla窗口的列表,因此,当任何窗口更改该文档时,都会通知出现该窗口的所有其他窗口以使其进行更新。 。以这种方式安排系统,以便您可以在单个Scintilla窗口中处理多个文档,并且可以在多个窗口中显示单个文档(用于拆分器窗口)。

这些消息使用pointer返回值和参数来引用文档。它们指向Scintilla内部的内部对象,应视为不透明void*也就是说,您可以按照本节中的描述使用和存储指针,但不应取消引用它。

SCI_GETDOCPOINTER → pointer
SCI_SETDOCPOINTER(<unused>, pointer doc)
SCI_CREATEDOCUMENT(position bytes, int documentOptions) → pointer
SCI_ADDREFDOCUMENT(<unused>, pointer doc)
SCI_RELEASEDOCUMENT(<unused>, pointer doc)
SCI_GETDOCUMENTOPTIONS → int

SCI_GETDOCPOINTER→指针
这将返回窗口当前正在使用的文档的指针。它没有其他作用。

SCI_SETDOCPOINTER(<未使用>,指针doc)
该消息执行以下操作:
1.从当前文档保存的列表中删除当前窗口。
2.将当前文档的参考计数减少1。3
.如果参考计数达到0,则删除该文档。
4. doc设置为窗口的新文档。
5.如果doc为0,则创建一个新的空文档并将其附加到窗口。
6.如果doc不为0,则其引用计数增加1。

SCI_CREATEDOCUMENT(位置字节,int documentOptions)→指针
此消息创建一个新的空文档并返回指向该文档的指针。尚未在编辑器中选择此文档,该文档的引用计数为1开头。这意味着您拥有该文档的所有权,使用后必须将其引用计数减少1,以SCI_SETDOCPOINTER使Scintilla窗口拥有该文档 ,或者您必须确保自己SCI_RELEASEDOCUMENT在关闭应用程序之前,将引用计数减少1 以避免内存泄漏。bytes参数确定了文档的初始内存分配,因为分配一次而不是依赖于添加数据时增长的缓冲区效率更高。如果SCI_CREATEDOCUMENT失败,则返回0。

documentOptions参数在影响文档分配和性能的不同文档功能之间进行 SC_DOCUMENTOPTION_DEFAULT选择,选择(0)选择标准选项。 SC_DOCUMENTOPTION_STYLES_NONE(0x1)停止为样式字符分配内存,从而节省了大量内存,通常将整个文档视为样式0占40%。Lexers仍可以通过使用指示器来产生视觉样式。 SC_DOCUMENTOPTION_TEXT_LARGE(0x100)可在64位可执行文件中容纳大于2 GB的文档。

使用SC_DOCUMENTOPTION_STYLES_NONE,词法分析器仍处于活动状态,并可能显示指示器。有些可能会产生折叠信息,尽管大多数都需要词汇样式来正确确定折叠。设置空词法分析器通常更为有效,SCLEX_NULL因此不运行词法分析器。

SC_DOCUMENTOPTION_TEXT_LARGE选项是实验性的,尚未经过全面测试。超过2GB或4GB时,词法分析器可能会失败或挂起。使用此选项的应用程序应经过测试,以确保该选项在其情况下有效,并且还应使用大于4GB的文档对其中包括的每个词法分析器进行测试。对于许多应用程序,大于4GB的lexing文档太迟了,因此可以使用SC_DOCUMENTOPTION_STYLES_NONE null lexer SCLEX_NULL另一种方法是使用启用空闲样式 SCI_SETIDLESTYLING

符号 影响
SC_DOCUMENTOPTION_DEFAULT 0 标准行为
SC_DOCUMENTOPTION_STYLES_NONE 0x1 停止为样式分配内存,并将所有文本视为样式0。
SC_DOCUMENTOPTION_TEXT_LARGE 0x100 允许文档大于2 GB。

SCI_ADDREFDOCUMENT(<未使用>,指针doc)
会将文档的引用计数增加1。如果要在Scintilla窗口中替换当前文档并获得当前文档的所有权,例如,如果要在一个文档中编辑许多文档,窗口,请执行以下操作:
1. SCI_GETDOCPOINTER用于获取指向文档的指针 doc
2.使用SCI_ADDREFDOCUMENT(0, doc)增加参考计数。
3. SCI_SETDOCPOINTER(0, docNew)用于设置其他文档或 SCI_SETDOCPOINTER(0, 0)设置新的空文档。

SCI_RELEASEDOCUMENT(<未使用>,指针doc)
该消息减少了标识的文档的引用计数docdoc必须是SCI_GETDOCPOINTER的结果,SCI_CREATEDOCUMENT并且必须指向仍然存在的文档。如果在仍附加到Scintilla窗口的引用计数为1的文档上调用此方法,则会发生不良情况。为了保持世界纺纱在它的轨道必须每次通话平衡来SCI_CREATEDOCUMENTSCI_ADDREFDOCUMENT用一个电话SCI_RELEASEDOCUMENT

SCI_GETDOCUMENTOPTIONS→int
返回用于创建文档的选项。

后台加载和保存

为了确保响应式用户界面,应用程序可以决定使用与用户界面不同的线程来加载和保存文档。

在后台加载

SCI_CREATELOADER(position bytes, int documentOptions) → pointer

应用程序可以将所有文件加载到在后台线程中分配的缓冲区中,然后将该缓冲区中的数据添加到用户界面线程上的Scintilla文档中。该技术使用了额外的内存来存储文件的完整副本,并且还意味着Scintilla执行初始行尾发现所需的时间会阻塞用户界面。

为了避免这些问题,可以创建一个加载器对象,并使用该对象来加载文件。加载程序对象支持ILoader接口。

SCI_CREATELOADER(位置字节,int documentOptions)→指针
创建一个对象,该对象支持ILoader可用于加载数据接口,然后将其转换为Scintilla文档对象以附加到视图对象。bytes参数确定了文档的初始内存分配,因为分配一次而不是依赖于添加数据时增长的缓冲区效率更高。如果SCI_CREATELOADER失败,则返回0。

documentOptions参数在本SCI_CREATEDOCUMENT节中介绍。

加载器

ILoader { public virtual int SCI_METHOD Release ()= 0 ; //从SC_STATUS_ * 虚拟int SCI_METHOD AddData 返回状态代码const char * data Sci_Position length = 0 ; 虚拟void * SCI_METHOD ConvertToDocument ()= 0 ; };

       
       
       
       

应用程序应AddData使用从文件读取的每个数据块来调用该方法。 AddData除非发生诸如内存耗尽的故障,否则它将返回SC_STATUS_OK。如果AddData在文件读取调用或文件读取调用中发生故障,则可以放弃加载,并随Release调用释放加载器读取整个文件后,ConvertToDocument应调用该文件以生成Scintilla文档指针。与从SCI_CREATEDOCUMENT返回的文档指针相同,新创建的文档的引用计数为1 Release之后无需致电ConvertToDocument

在后台保存

想要保存在后台的应用程序应将文档锁定SCI_SETREADONLY(1) 以防止修改,并使用SCI_GETCHARACTERPOINTER检索指向统一文档内容的指针 锁定文档的缓冲区不会移动,因此在应用程序调用之前指针是有效的SCI_SETREADONLY(0)

如果用户在文档锁定时尝试执行修改,则将SCN_MODIFYATTEMPTRO通知发送给应用程序。然后,应用程序可以决定忽略该修改,或者终止后台保存线程并在从通知返回之前重新启用修改。

折叠式

折叠的基本操作是使线条不可见或可见。线可见性是视图而不是文档的属性,因此每个视图可能显示一组不同的线。从用户的角度来看,使用折叠点隐藏和显示线条。通常,文档的折叠点基于文档内容的层次结构。在Python中,层次结构由缩进确定,在C ++中,结构由大括号字符确定。通过在每个行上附加一个数字“折叠级别”,可以在Scintilla文档对象内表示此层次结构。折叠级别最容易由词法分析器设置,但是您也可以在消息中设置它。

设置用户操作与折叠和展开之间的连接取决于您的代码。查看此操作的最佳方法是在SciTE源代码中搜索文档本节中使用的消息,并查看其用法。您还需要使用标记和折叠边距来完成折叠实现。"fold"属性应设置为"1"with SCI_SETPROPERTY("fold", "1")以启用折叠。

SCI_VISIBLEFROMDOCLINE(line docLine) → line
SCI_DOCLINEFROMVISIBLE(line displayLine) → line
SCI_SHOWLINES(line lineStart, line lineEnd)
SCI_HIDELINES(line lineStart, line lineEnd)
SCI_GETLINEVISIBLE(line line) → bool
SCI_GETALLLINESVISIBLE → bool
SCI_SETFOLDLEVEL(line line, int level)
SCI_GETFOLDLEVEL(line line) → int
SCI_SETAUTOMATICFOLD(int automaticFold)
SCI_GETAUTOMATICFOLD → int
SCI_SETFOLDFLAGS(int flags)
SCI_GETLASTCHILD(line line, int level) → line
SCI_GETFOLDPARENT(line line) → line
SCI_SETFOLDEXPANDED(line line, bool expanded)
SCI_GETFOLDEXPANDED(line line) → bool
SCI_CONTRACTEDFOLDNEXT(line lineStart) → line
SCI_TOGGLEFOLD(line line)
SCI_TOGGLEFOLDSHOWTEXT(line line, const char *text)
SCI_FOLDDISPLAYTEXTSETSTYLE(int style)
SCI_FOLDDISPLAYTEXTGETSTYLE → int
SCI_SETDEFAULTFOLDDISPLAYTEXT(<unused>, const char *text)
SCI_GETDEFAULTFOLDDISPLAYTEXT(<unused>, char *text) → int
SCI_FOLDLINE(line line, int action)
SCI_FOLDCHILDREN(line line, int action)
SCI_FOLDALL(int action)
SCI_EXPANDCHILDREN(line line, int level)
SCI_ENSUREVISIBLE(line line)
SCI_ENSUREVISIBLEENFORCEPOLICY(line line)

SCI_VISIBLEFROMDOCLINE(line docLine)→line
当隐藏某些行和/或显示注释时,文档中的特定行可能会显示在与其文档位置不同的位置。如果没有任何行被隐藏并且没有注释,则此消息返回 docLine否则,这将返回显示行(将第一个可见行计数为0)。不可见线的显示线与上一个可见线相同。文档中第一行的显示行号为0。如果行被隐藏并且docLine超出文档中行 的范围,则返回值为-1。如果将行换行,则它们可以占用多个显示行。

SCI_DOCLINEFROMVISIBLE(line displayLine)→行
隐藏某些行和/或显示注释时,文档中的特定行可能会显示在与其文档位置不同的位置。此消息返回与显示行相对应的文档行号(将文档中第一行的显示行计为0)。如果displayLine小于或等于0,则结果为0。如果 displayLine大于或等于显示的行数,则结果为文档中的行数。

SCI_SHOWLINES(行起始线,行结束)
SCI_HIDELINES(行起始线,行结束)
SCI_GETLINEVISIBLE(行行)→bool
SCI_GETALLLINESVISIBLE→bool
前两个消息将一系列行标记为可见或不可见,然后重绘显示。 SCI_GETLINEVISIBLE报告行的可见状态,如果可见则返回1,如果不可见则返回0。 SCI_GETALLLINESVISIBLE如果所有行均可见,则返回1;如果某些行被隐藏,则返回0。这些消息对折叠级别或折叠标志没有影响。第一行不能隐藏。

SCI_SETFOLDLEVEL(行行,int级别)
SCI_GETFOLDLEVEL(行行)→int
这两个消息设置并获得一个32位值,该值包含行的折叠级别以及一些与折叠相关的标志。折叠级别是介于0到 SC_FOLDLEVELNUMBERMASK(0x0FFF)之间的数字。但是,初始折叠级别设置为 SC_FOLDLEVELBASE(0x400),以允许对折叠级别进行无符号运算。有两个加法标志位。SC_FOLDLEVELWHITEFLAG表示该行是空白的,并允许对其进行处理,而其水平可能会稍有不同。例如,空白行通常不应该是折叠点,即使它们的折叠级别较小,也应被视为上一节的一部分。 SC_FOLDLEVELHEADERFLAG表示该行是标题(折点)。

使用SCI_GETFOLDLEVEL(line) & SC_FOLDLEVELNUMBERMASK取得一行的折叠级别。同样,用于SCI_GETFOLDLEVEL(line) & SC_FOLDLEVEL*FLAG获取标志的状态。要设置折叠级别,您必须或在相关标志中。例如,要将水平设置为thisLevel并将线标记为折点,请使用: SCI_SETFOLDLEVEL(line, thisLevel | SC_FOLDLEVELHEADERFLAG)

如果使用词法分析器,则无需使用,SCI_SETFOLDLEVEL因为词法分析器可以更好地处理它。您将需要使用SCI_GETFOLDLEVEL来决定如何处理用户折叠请求。如果您确实更改了折叠级别,则折叠边距将更新以匹配您的更改。

SCI_SETFOLDFLAGS(int flags)
除了在折叠边距中显示标记外,您还可以通过在文本区域中画线来向用户指示折叠。线条以设置的前景色绘制STYLE_DEFAULT设置的位 flags确定绘制折线的位置:

符号 影响
1个 实验性功能已被删除。
SC_FOLDFLAG_LINEBEFORE_EXPANDED 2 展开上方绘制
SC_FOLDFLAG_LINEBEFORE_CONTRACTED 4 如果未展开,请在上方绘制
SC_FOLDFLAG_LINEAFTER_EXPANDED 8 展开下方绘制
SC_FOLDFLAG_LINEAFTER_CONTRACTED 16 如果未展开,请在下面绘制
SC_FOLDFLAG_LEVELNUMBERS 64 在行边距中显示十六进制折叠级别,以帮助调试折叠。此功能的外观将来可能会更改。
SC_FOLDFLAG_LINESTATE 128 在行距中显示十六进制行状态,以帮助调试字典和折叠。可能与不能同时使用SC_FOLDFLAG_LEVELNUMBERS

此消息导致显示重新绘制。

SCI_GETLASTCHILD(line line,int level)→line
此消息搜索之后的下一行line,其折叠级别小于或等于level,然后返回上一行。如果设置level为-1,level则设置为line的折叠级别 line如果from是折叠点,SCI_GETLASTCHILD(from, -1)则通过切换折叠状态返回将变为可见或隐藏的最后一行。

SCI_GETFOLDPARENT(line line)→line
此消息返回第一行的行号,该行之前line被标记为的折叠点,SC_FOLDLEVELHEADERFLAG并且折叠级别小于line如果未找到任何行,或者标头标志和折叠级别不一致,则返回值为-1。

SCI_TOGGLEFOLD(行)
SCI_TOGGLEFOLDSHOWTEXT(行,const char * text)
每个折叠点都可以展开,显示其所有子行,也可以收缩,隐藏所有子行。只要给定的行有SC_FOLDLEVELHEADERFLAG设置,这些消息就会切换给定行的折叠状态这些消息负责折叠或扩展依赖于该行的所有行。此消息之后,显示将更新。

可选文本标签可以显示在折叠文本的右侧, text参数为 SCI_TOGGLEFOLDSHOWTEXT可以使用设置所有标题行的默认文本SCI_SETDEFAULTFOLDDISPLAYTEXT文本以STYLE_FOLDDISPLAYTEXT样式绘制

SCI_FOLDDISPLAYTEXTSETSTYLE(int样式)
SCI_FOLDDISPLAYTEXTGETSTYLE→int
这些消息更改折叠文本标签的外观。

符号 影响
SC_FOLDDISPLAYTEXT_HIDDEN 0 不显示文本标签。这是默认值。
SC_FOLDDISPLAYTEXT_STANDARD 1个 显示文本标签。
SC_FOLDDISPLAYTEXT_BOXED 2 显示文本标签,并在其周围绘制一个框。

SCI_SETDEFAULTFOLDDISPLAYTEXT(<unused>,const char * text)
SCI_GETDEFAULTFOLDDISPLAYTEXT(<unused>,char * text)→int
这些消息设置并获取默认文本,显示在折叠文本的右侧。

SCI_SETFOLDEXPANDED(行,布尔扩展)
SCI_GETFOLDEXPANDED(行,线性)→bool
这些消息设置并获得单行的扩展状态。设置的消息对行或依赖它的任何行的可见状态没有影响。确实会更改折叠边距中的标记。如果您要求文档外部的行的扩展状态,则结果为false(0)。

如果只想切换一行的折叠状态并处理所有与之相关的行,则使用起来会容易得多SCI_TOGGLEFOLD您将使用该 SCI_SETFOLDEXPANDED消息来处理许多折页,直到完成后才更新显示。请参阅SciTEBase::FoldAll()SciTEBase::Expand()有关使用这些消息的示例。

SCI_FOLDLINE(行线,int动作)
SCI_FOLDCHILDREN(行线,int动作)
SCI_FOLDALL(int动作)
这些消息提供了更高级别的折叠方法,而不是设置扩展标志以及显示或隐藏单个行。

可以使用来收缩/扩展/切换单个折叠SCI_FOLDLINE为了影响所有的儿童折叠以及呼叫SCI_FOLDCHILDREN

影响整个文档调用SCI_FOLDALL通过SC_FOLDACTION_TOGGLE 检查文档中的第一折页眉,可以确定是展开还是收缩。

符号 影响
SC_FOLDACTION_CONTRACT 0 合同。
SC_FOLDACTION_EXPAND 1个 扩大。
SC_FOLDACTION_TOGGLE 2 在缩小和展开之间切换。

SCI_EXPANDCHILDREN(line line,int level)
这用于响应对导致折叠级别的行的更改,或者它是否更改为标题,可能是在添加或删除“ {”时进行的更改。

到容器接收到该行已更改的通知时,折叠级别已被设置,因此容器必须在此调用中使用先前的级别,以便可以显示此行下面隐藏的任何范围。

SCI_SETAUTOMATICFOLD(int automaticFold)
SCI_GETAUTOMATICFOLD→int
除了在容器中实现用于处理折叠的所有逻辑之外,Scintilla还可提供适合许多应用程序的行为。automaticFold参数是一个位集,定义应启用3种折叠实现中的哪一种。 除非它们希望实现完全不同的行为(例如定义自己的折叠结构),否则大多数应用程序应能够使用 SC_AUTOMATICFOLD_SHOWSC_AUTOMATICFOLD_CHANGE标志。 SC_AUTOMATICFOLD_CLICK当应用程序想要添加或更改单击行为(例如仅在将Shift + Alt与单击结合使用时才显示方法标题)时,更有可能被取消。

符号 影响
SC_AUTOMATICFOLD_SHOW 1个 根据需要自动显示行。这样可以避免发送SCN_NEEDSHOWN通知。
SC_AUTOMATICFOLD_CLICK 2 自动处理折页边距中的点击。这样可以避免发送SCN_MARGINCLICK折叠边距通知。
SC_AUTOMATICFOLD_CHANGE 4 更改折叠结构时,根据需要显示线条。SCN_MODIFIED除非容器将其禁用,否则仍将发送通知。

SCI_CONTRACTEDFOLDNEXT(line lineStart)→line
有效地搜索缩排首部的行这在切换文档时保存用户的折叠或与文件一起保存折叠时很有用。搜索从行号开始,lineStart然后继续前进到文件末尾。 lineStart如果是收缩折叠标头,则返回,否则返回下一个收缩折叠标头。如果没有更多的折叠首部,则返回-1。

SCI_ENSUREVISIBLE(行线)
SCI_ENSUREVISIBLEENFORCEPOLICY(行线)
可能隐藏了一条线,因为它的多个父行已收缩。这两个消息都沿折叠层次结构传播,扩展所有收缩的折叠直到它们到达最高层。该行将可见。如果使用SCI_ENSUREVISIBLEENFORCEPOLICYSCI_SETVISIBLEPOLICY则将应用设置的垂直插入符号策略

换行

SCI_SETWRAPMODE(int wrapMode)
SCI_GETWRAPMODE → int
SCI_SETWRAPVISUALFLAGS(int wrapVisualFlags)
SCI_GETWRAPVISUALFLAGS → int
SCI_SETWRAPVISUALFLAGSLOCATION(int wrapVisualFlagsLocation)
SCI_GETWRAPVISUALFLAGSLOCATION → int
SCI_SETWRAPINDENTMODE(int wrapIndentMode)
SCI_GETWRAPINDENTMODE → int
SCI_SETWRAPSTARTINDENT(int indent)
SCI_GETWRAPSTARTINDENT → int
SCI_SETLAYOUTCACHE(int cacheMode)
SCI_GETLAYOUTCACHE → int
SCI_SETPOSITIONCACHE(int size)
SCI_GETPOSITIONCACHE → int
SCI_LINESSPLIT(int pixelWidth)
SCI_LINESJOIN
SCI_WRAPCOUNT(line docLine) → line

默认情况下,Scintilla不换行。如果启用换行,则比以下窗口宽的线会在以下几行上继续。在空格或制表符之后或在不同样式的运行之间断行。如果由于一种样式的单词比窗口宽而无法这样做,则在完全适合该行的最后一个字符之后发生中断。环绕模式打开时,水平滚动条不会出现。

对于换行,Scintilla可以在换行的子行的末尾和下一个子行的开头绘制可视标记(小箭头)。这些可以单独启用,但是如果Scintilla在下一个子行的开头绘制可视标记,则该子行将缩进一个字符。与在开始处绘制视觉标记无关,子行可以具有缩进。

Scintilla花费的大部分时间都用于布置和绘制文本。即使这些计算中使用的数据不变,也可以多次执行相同的文本布局计算。为了在某??些情况下避免这些不必要的计算,行布局缓存可以存储计算结果。每当基础数据(例如文档的内容或样式)发生更改时,缓存就会失效。缓存整个文档的布局效果最大,可使动态换行速度快20倍,但这需要文档内容所需的内存7倍,每行大约80个字节。

包装不会立即进行更改,而是会延迟到重新绘制显示为止。此延迟通过允许执行一组更改,然后包装并显示一次更改来提高性能。因此,某些操作可能不会按预期进行。如果读取了文件并且滚动位置移动到了文本中的特定行(例如,当容器尝试还原先前的编辑会话时发生),则在换行之前就已经确定了滚动位置,因此会出现意外范围的文本。显示。若要正确滚动到该位置,请等待初始SCN_PAINTED通知,以延迟滚动直到执行换行

SCI_SETWRAPMODE(int wrapMode)
SCI_GETWRAPMODE→int
将wrapMode设置为SC_WRAP_WORD(1)启用在字或样式边界上的换行,SC_WRAP_CHAR(2)启用在任何字符之间的换行,SC_WRAP_WHITESPACE(3)启用在空白处的换行,以及SC_WRAP_NONE(0)禁用换行。SC_WRAP_CHAR对于单词之间没有空格的亚洲语言,首选。

SCI_SETWRAPVISUALFLAGS(int wrapVisualFlags)
SCI_GETWRAPVISUALFLAGS→int
您可以启用可视标记的绘制来表示换行。wrapVisualFlags中设置的位确定绘制了哪些可视标记。

符号 影响
SC_WRAPVISUALFLAG_NONE 0 没有视觉标记
SC_WRAPVISUALFLAG_END 1个 换行的子行末尾的可视标记。
SC_WRAPVISUALFLAG_START 2 在换行的子行开头的可视标记。
子行至少缩进1以为标志留出空间。
SC_WRAPVISUALFLAG_MARGIN 4 行号边距中的可视标记。

SCI_SETWRAPVISUALFLAGSLOCATION(int wrapVisualFlagsLocation)
SCI_GETWRAPVISUALFLAGSLOCATION→int
您可以设置是在边框附近还是在文本附近绘制表示换行的可视标志。wrapVisualFlagsLocation中设置的位将位置设置为对应视觉标记的文本附近。

符号 影响
SC_WRAPVISUALFLAGLOC_DEFAULT 0 在边框附近绘制视觉标记
SC_WRAPVISUALFLAGLOC_END_BY_TEXT 1个 在文本附近绘制的子行末尾的可视标记
SC_WRAPVISUALFLAGLOC_START_BY_TEXT 2 在文本附近绘制的子行开头的可视标记

SCI_SETWRAPINDENTMODE(int wrapIndentMode)
SCI_GETWRAPINDENTMODE→int
可以将包装的子行缩进其第一条子行的位置或一个或多个缩进级别。默认值为SC_WRAPINDENT_FIXED这些模式是:

符号 影响
SC_WRAPINDENT_FIXED 0 与窗口左侧对齐的包装子线加上SCI_SETWRAPSTARTINDENT设置的 数量
SC_WRAPINDENT_SAME 1个 包裹的子行与第一个子行的缩进对齐
SC_WRAPINDENT_INDENT 2 包裹的子行与第一个子行缩进对齐,再加上一个缩进级别
SC_WRAPINDENT_DEEPINDENT 3 包裹的子行与第一个子行缩进对齐,再加上两个缩进级别

SCI_SETWRAPSTARTINDENT(int缩进)
SCI_GETWRAPSTARTINDENT→int
SCI_SETWRAPSTARTINDENT根据中的平均字符宽度设置换行的子行缩进大小 STYLE_DEFAULT缩进大小没有限制,但是小于0的值或较大的值可能会产生不良影响。
子行的缩进与视觉标记无关,但是如果 SC_WRAPVISUALFLAG_START设置,则缩进至少为1。

SCI_SETLAYOUTCACHE(int cacheMode)
SCI_GETLAYOUTCACHE→int
您可以设置cacheMode表中的符号之一:

符号 为这些行缓存的布局
SC_CACHE_NONE 0 没有行被缓存。
SC_CACHE_CARET 1个 包含文本插入符号的行。这是默认值。
SC_CACHE_PAGE 2 可见线加上包含插入符号的线。
SC_CACHE_DOCUMENT 3 文档中的所有行。

SCI_SETPOSITIONCACHE(int大小)
SCI_GETPOSITIONCACHE→int
位置缓存存储短文本运行的位置信息,以便在运行再次发生时可以更快地确定其布局。可以使用设置此缓存的条目大小SCI_SETPOSITIONCACHE

SCI_LINESSPLIT(int pixelWidth)
将目标指示的行范围划分为最大pixelWidth宽的行。在任何可能的地方,字分割都会以类似于换行的方式在字边界上发生。pixelWidth为0时,则使用窗口的宽度。

SCI_LINESJOIN
通过删除行结束符,将目标指示的一系列行连接为一行。如果这将导致单词之间没有空格,则会插入多余的空格。

SCI_WRAPCOUNT(line docLine)→line如果将
文档行换行,则它们可以占据多个显示行,这将返回包装文档行所需的显示行数。

缩放

Scintilla包含“缩放因子”,可让您以一点为单位将文档中的所有文本放大或缩小。无论您设置了什么缩放比例,显示的点大小都不会低于2。您可以在-10至+20点之间设置缩放系数。

SCI_ZOOMIN
SCI_ZOOMOUT
SCI_SETZOOM(int zoomInPoints)
SCI_GETZOOM → int

SCI_ZOOMIN
SCI_ZOOMOUT
SCI_ZOOMIN如果当前缩放系数小于20点,则将缩放系数增加1点。SCI_ZOOMOUT如果当前缩放系数大于-10点,则将缩放系数减小1点。

SCI_SETZOOM(int zoomInPoints)
SCI_GETZOOM→int
这些消息使您可以直接设置和获取缩放系数。您可以设置的因数没有限制,因此将自己限制在-10到+20以匹配增量缩放功能是一个好主意。

排长龙

您可以通过画一条垂直线或给超过设定长度的字符背景上色来标记超过指定长度的线。

SCI_SETEDGEMODE(int edgeMode)
SCI_GETEDGEMODE → int
SCI_SETEDGECOLUMN(position column)
SCI_GETEDGECOLUMN → position
SCI_SETEDGECOLOUR(colour edgeColour)
SCI_GETEDGECOLOUR → colour

SCI_MULTIEDGEADDLINE(position column, colour edgeColour)
SCI_MULTIEDGECLEARALL

SCI_SETEDGEMODE(int edgeMode)
SCI_GETEDGEMODE→int
这两个消息设置并获取用于显示长行的模式。您可以在表中设置以下值之一:

符号 长线显示模式
EDGE_NONE 0 长线未标记。这是默认状态。
EDGE_LINE 1个 在由设置的列号处绘制一条垂直线SCI_SETEDGECOLUMN这对于等宽字体非常有效。这条线是根据中的空格字符的宽度绘制的STYLE_DEFAULT,因此如果您的样式使用比例字体或样式的字体大小不同,或者混合使用粗体,斜体和普通文本,则线条可能效果不佳。
EDGE_BACKGROUND 2 列限制之后的字符的背景色更改为设置的颜色SCI_SETEDGECOLOUR建议将其用于比例字体。
EDGE_MULTILINE 3 这类似于EDGE_LINE但仅显示一条线但与相反,可以同时显示一组可配置的垂直线。edgeMode 使用了完全独立的数据集,该数据集只能通过使用SCI_MULTIEDGE*消息进行配置

SCI_SETEDGECOLUMN(位置列)
SCI_GETEDGECOLUMN→位置
这些消息设置并获取显示长行标记的列号。绘制线条时,该列在中以空格字符的宽度为单位设置位置 STYLE_DEFAULT设置背景色时,该列是行中的字符数(允许使用制表符)。

SCI_SETEDGECOLOUR(color edgeColour)
SCI_GETEDGECOLOUR→color
这些消息设置并获取标记的颜色,该标记用于显示一行已超过设置的长度SCI_SETEDGECOLUMN

SCI_MULTIEDGEADDLINE(位置列, 彩色 edgeColour)
SCI_MULTIEDGECLEARALL
SCI_MULTIEDGEADDLINE向视图添加新的垂直边缘。边缘将显示在给定的列号处。产生的边缘位置取决于中的空格字符的度量STYLE_DEFAULT可以用清除所有边缘 SCI_MULTIEDGECLEARALL

辅助功能

Scintilla支持某些平台可访问性功能。平台之间的支持不同。在GTK和Cocoa上,平台可访问性API的实现足以使屏幕阅读器正常工作。在Win32上,系统插入符号被操纵以帮助屏幕阅读器。

SCI_SETACCESSIBILITY(int accessibility)
SCI_GETACCESSIBILITY → int

SCI_SETACCESSIBILITY(int可访问性)
SCI_GETACCESSIBILITY→int
这些消息可能会启用或禁用可访问性并报告其当前状态。

在大多数平台上,可访问要么执行或不执行,这可以用被发现SCI_GETACCESSIBILITYSCI_SETACCESSIBILITY不执行任何动作。在GTK上,可访问性存在存储和性能成本,因此可以通过调用禁用它SCI_SETACCESSIBILITY

符号 辅助功能状态
SC_ACCESSIBILITY_DISABLED 0 辅助功能已禁用。
SC_ACCESSIBILITY_ENABLED 1个 辅助功能已启用。

Lexer

如果SCI_LEXER在构建Scintilla时定义了符号(有时称为Scintilla的SciLexer版本),则包括对多种编程语言的词法支持,并且支持本节中的消息。如果要为不受支持的语言设置样式和折叠点,则可以在容器中进行设置,或者更好的方法是,按照现有语言之一的样式编写自己的词法分析器。

如果SCI_EMPTYCATALOGUE在构建Scintilla时定义了该符号,则不会提供任何词法分析器,但可能会存在其他词法化支持代码。

Scintilla还支持外部词法分析器。这些DLL文件(在Windows上),名为.dylib模块(在MacOS),或.so模块(在GTK / Linux)的,出口三大功能:GetLexerCountGetLexerName,和 GetLexerFactory请参阅ExternalLexer.cxx以获取更多信息。

SCI_SETLEXER(int lexer)
SCI_GETLEXER→int
SCI_SETLEXERLANGUAGE(<未使用>,const char *语言)
SCI_GETLEXERLANGUAGE(<unused>,char * language)→int
SCI_SETILEXER(<unused>,指针ilexer)
SCI(constlexerpath)* )
SCI_COLOURISE(位置开始,位置结束)
SCI_CHANGELEXERSTATE(位置开始,位置结束)→int
SCI_PROPERTYNAMES(<未使用>,char * names)→int
SCI_PROPERTYTYPE(const char * name)→int
SCI_DESCRIBEPROPERTY(const char * name,char * description )→int
SCI_SETPROPERTY(const char * key,const char * value)
SCI_GETPROPERTY(const char * key,char * value)→int
SCI_GETPROPERTYEXPANDED(const char * key,char * value)→int
SCI_GETPROPERTYINT(常量字符*键,INT默认值)→INT
SCI_DESCRIBEKEYWORDSETS(<未使用>,字符*描述)→INT
SCI_SETKEYWORDS(INT keyWordSet,常量字符*关键词)
SCI_GETSUBSTYLEBASES(<未使用>,字符*样式)→INT
SCI_DISTANCETOSECONDARYSTYLES→INT
SCI_ALLOCATESUBSTYLES (INT styleBase,诠释的NumberStyles)→INT
SCI_FREESUBSTYLES
SCI_GETSUBSTYLESSTART(INT styleBase)→INT
SCI_GETSUBSTYLESLENGTH(INT styleBase)→INT
SCI_GETSTYLEFROMSUBSTYLE(INT子样式)→INT
SCI_GETPRIMARYSTYLEFROMSTYLE(INT风格)→INT
SCI_SETIDENTIFIERS(INT风格,为const char *标识符)
SCI_PRIVATELEXERCALL( int操作,指针指针)→指针
SCI_GETNAMEDSTYLES→int
SCI_NAMEOFSTYLE(int样式,char *名称)→int
SCI_TAGSOFSTYLE(int样式,char * tags)→int
SCI_DESCRIPTIONOFSTYLE(int样式,char * description)→int

SCI_SETLEXER(int lexer)
SCI_GETLEXER→int
您可以从中的SCLEX_*枚举选择要与整数代码一起使用的词法分析器Scintilla.h此序列中有两个不使用词法分析器的代码: SCLEX_NULL不选择词法分析操作,每当需要设置文本范围的样式时,便将通知SCLEX_CONTAINER发送SCN_STYLENEEDED到容器。您不能使用该 SCLEX_AUTOMATIC值;这标识了Scintilla为其分配未使用的词法分析器编号的其他外部词法分析器。

SCI_SETLEXERLANGUAGE(<unused>,const char * language)
SCI_GETLEXERLANGUAGE(<unused>,char * language NUL终止)→int
SCI_SETLEXERLANGUAGE允许您按名称选择词法分析器,并且这是使用外部词法分析器或具有以下条件的唯一方法为您自己的语言编写了词法分析器模块,不希望为其分配明确的词法分析器编号。要选择现有的词法分析器,请设置language为与赋予模块的(区分大小写)名称匹配,例如“ ada”或“ python”,而不是“ Ada”或“ Python”。要找到内置词法分析器的名称,请打开相关 Lex*.cxx文件并搜索LexerModuleLexerModule构造函数中的第三个参数 是要使用的名称。

SCI_SETILEXER(<unused>,指针ilexer)
SCI_SETILEXER允许将lexer设置为ILexer5*词法分析器可以由应用程序或诸如Lexilla的共享库实现。

要测试您的词法分析器分配是否有效,请SCI_GETLEXER在设置新词法分析器之前和之后使用,以查看词法分析器编号是否已更改。

SCI_GETLEXERLANGUAGE 检索词法分析器的名称。

SCI_LOADLEXERLIBRARY(<unused>,const char * path)
加载在共享库中实现的词法分析器。这是GTK / Linux上的.so文件,在macOS上是.dylib文件,在Windows上是.DLL文件。

SCI_COLOURISE(位置开始,位置结束)
这请求当前词法分析器或容器(如果词法分析器设置为SCLEX_CONTAINER)在start之间设置 文档样式end如果end为-1,则文档的样式为从头到尾 start如果将该"fold"属性设置为, "1"并且您的词法分析器或容器支持折叠,则还将设置折叠级别。此消息导致重画。

SCI_CHANGELEXERSTATE(位置开始,位置结束)→int
指示词法分析器的内部状态已在一定范围内更改,因此可能需要重绘。

SCI_PROPERTYNAMES(<未使用>,char *名称以NUL结尾的)→int
SCI_PROPERTYTYPE(const char *名称)→int
SCI_DESCRIBEPROPERTY(const char * name,char *以NUL结尾的描述)→int
可能会检索到有关可以为当前词法分析器设置。此信息仅适用于较新的词法分析器。 SCI_PROPERTYNAMES返回一个字符串,其中所有有效属性都用“ \ n”分隔。如果词法分析器不支持此调用,则返回一个空字符串。属性可以是boolean(SC_TYPE_BOOLEAN),integer(SC_TYPE_INTEGER)或string(SC_TYPE_STRING),可通过找到SCI_PROPERTYTYPE会返回英文的属性说明SCI_DESCRIBEPROPERTY

SCI_SETPROPERTY(const char * key,const char * value)
您可以使用关键字:值字符串对将设置传达给词法分析器。除可用内存外,可以设置的关键字对数量没有限制。key是区分大小写的关键字,value是与关键字关联的字符串。如果已经有与关键字关联的值字符串,则将其替换。如果传递长度为零的字符串,则该消息不执行任何操作。key两者均value未经修改即可使用;开头或结尾的多余空格key很大。

value字符串可以引用其他关键字。例如, SCI_SETPROPERTY("foldTimes10", "$(fold)0")存储字符串"$(fold)0",但是当访问该字符串 时,$(fold)会被"fold"关键字的值替换(如果此关键字不存在,则不替换任何内容)。

当前,大多数词法分析器都定义了“ fold”属性,以将折叠结构设置为“ 1”。SCLEX_PYTHON理解"tab.timmy.whinge.level"为一种确定如何指示缩进的设置。大多数关键字具有解释为整数的值。搜索词法分析器源GetPropertyInt以查看如何使用属性。

有一个约定用于词法分析器使用的属性,以便可以通过脚本找到属性集。属性名称应以“ lexer。<lexer>”开头。或“ fold。<lexer>”。当它们应用于一个词法分析器或以“词法分析器”开头时。或“折叠”。如果它们适用于多个词法分析器。

应用程序可能会通过在词法分析器的源代码中搜索包含GetProperty包含双引号字符串的行来发现使用的属性集, 然后提取双引号字符串的值作为属性名称。scintilla/scripts/LexGen.py脚本可以执行此操作,并且可以用作示例。该属性的文档可以在呼叫上方以多行注释的形式放在开头,
// property <property-name>

SCI_GETPROPERTY(const char * key,char * value NUL-terminal)→int
使用指定的键查找一个关键字:值对;如果找到,则将值复制到用户提供的缓冲区中并返回长度(不包括终止符0)。如果未找到,则将一个空字符串复制到缓冲区中并返回0。

注意,将不执行中所述的“关键字替换” SCI_SETPROPERTY

如果value参数为0,则返回应分配用于存储值的长度;否则,返回0。同样,不包括终止符0。

SCI_GETPROPERTYEXPANDED(const char * key,char * value)→int
使用指定的键查找一个关键字:值对;如果找到,则将值复制到用户提供的缓冲区中并返回长度(不包括终止符0)。如果未找到,则将一个空字符串复制到缓冲区中并返回0。

注意,将执行中所述的“关键字替换” SCI_SETPROPERTY

如果value参数为0,则返回应分配用于存储值的长度(包括任何指示的关键字替换);否则,返回0。同样,不包括终止符0。

SCI_GETPROPERTYINT(const char * key,int defaultValue)→int
使用指定的键查找一个关键字:值对;如果找到,则将值解释为整数并返回。如果找不到(或值是一个空字符串),则返回提供的默认值。如果找到了“关键字:值”对,但不是数字,则返回0。

注意,在任何数字解释之前将执行如所述的“关键字替换” SCI_SETPROPERTY

SCI_SETKEYWORDS(int keyWordSet,const char * keyWords)
最多可以设置9个供当前词法分析器使用的关键字列表。 keyWordSet可以是0到8(实际上是0到KEYWORDSET_MAX),并选择要替换的关键字列表。keyWords是空格,制表符,分隔的关键字列表"\n""\r"或这些的任何组合。预期关键字将由标准的ASCII打印字符组成,但是没有什么可以阻止您使用1到255之间的任何非分隔符字符代码(常识除外)。

这些关键字的使用方式完全取决于词法分析器。某些语言(例如HTML)可能包含嵌入式语言,VBScript和JavaScript对于HTML来说很常见。对于HTML,关键字集0表示HTML,1表示JavaScript,2表示VBScript,3表示Python,4表示PHP,5表示SGML和DTD关键字。查看词法分析器代码以查看关键字列表的示例。完全符合条件的词法分析器将LexerModule构造函数的第四个参数设置为描述关键字列表用途的字符串列表。

或者,您可以将set 0用于常规关键字,将set 1用于导致缩进的关键字,将set 2用于导致缩进的关键字。再一次,您可能有一个简单的词法分析器,该词法可以为关键字着色,并且可以通过更改集合0中的关??键词来更改语言。没有什么可以阻止您在词法分析器中构建自己的关键字列表,但这意味着如果需要重新构建词法分析器添加了更多关键字。

SCI_DESCRIBEKEYWORDSETS(<unused>,char *描述以NUL终止)→int
由返回由\ n分隔的所有关键字集的描述SCI_DESCRIBEKEYWORDSETS

子样式

词法分析器可能支持几种不同的子语言,并且每种子语言可能希望唯一地设置一些标识符集(或类似的词素,例如文档关键字)的样式。为每种目的预先分配大量的样式会很快耗尽允许的样式数量。这可以通过子样式缓解,该子样式允许应用程序确定为每个目的分配多少组标识符。Lexers必须通过实现特定方法来明确支持此功能。

SCI_GETSUBSTYLEBASES(<unused>,char * styles NUL终止)→int为每个可以
填充styles为子样式的样式填充一个字节。

SCI_DISTANCETOSECONDARYSTYLES→int
返回主要样式与其对应的次要样式之间的距离。

SCI_ALLOCATESUBSTYLES(int styleBase,int numberStyles)→int
为特定基本样式分配一些子样式,并返回分配的第一个子样式编号。子样式是连续分配的。

SCI_FREESUBSTYLES
释放所有分配的子样式。

SCI_GETSUBSTYLESSTART(int styleBase)→int
SCI_GETSUBSTYLESLENGTH(int styleBase)→int
返回为基本样式分配的子样式的开始和长度。

SCI_GETSTYLEFROMSUBSTYLE(int subStyle)→int
对于子样式,返回基本样式,否则返回参数。

SCI_GETPRIMARYSTYLEFROMSTYLE(int样式)→int
对于辅助样式,返回主样式,否则返回参数。

SCI_SETIDENTIFIERS(int style,const char * identifiers)
类似于,SCI_SETKEYWORDS但用于子样式。可用前缀功能SCI_SETKEYWORDS没有为实施SCI_SETIDENTIFIERS

SCI_PRIVATELEXERCALL(int操作,指针指针)→指针
以Scintilla无法理解的方式调用词法分析器。

样式元数据

词法分析器可能会提供有关使用的样式的信息。Lexers必须通过实现特定方法来明确支持此功能。

SCI_GETNAMEDSTYLES→int
检索词法分析器的命名样式数。

SCI_NAMEOFSTYLE(int style,char * name)→int
检索样式的名称。这是一个C预处理程序符号,例如“ SCE_C_COMMENTDOC”。

SCI_TAGSOFSTYLE(int style,char * tags)→int
检索样式的标签。这是一组用空格分隔的单词,例如“评论文档”。

SCI_DESCRIPTIONOFSTYLE(int style,char * description)→int
检索可能适合在用户界面中显示的样式的英语描述。看起来像“文档注释:阻止以/ **或/ *开头的注释!”。

Lexer对象

词法分析器被编程为实现ILexer4接口并与它们通过IDocument接口进行词法化的文档进行交互的对象。以前,词法分析器是通过提供词法分析和折叠功能来定义的,但是通过创建一个对象来处理词法分析器与文档的交互,可以使词法分析器存储可在词法化过程中使用的状态信息。例如,C ++词法分析器可以存储一组预处理器定义或变量声明,并根据其作用设置样式。

使用临时ILexer5接口扩展了ILexer4,以支持Lexilla的使用。

一组帮助器类允许在Scintilla中使用由函数定义的较旧的词法分析器。

ILexer4

class ILexer4 { public virtual int SCI_METHOD Version ()const = 0 ; 虚拟void SCI_METHOD Release ()= 0 ; 虚拟const char * SCI_METHOD PropertyNames ()= 0 ; 虚拟int SCI_METHOD PropertyType const char * name = 0 ; 虚拟const char *

       
       
       
       
        SCI_METHOD DescribeProperty const char * name = 0 ; 虚拟 Sci_Position SCI_METHOD PropertySet const char * key const char * val = 0 ; 虚拟const char * SCI_METHOD DescribeWordListSets ()= 0 ; 虚拟 Sci_Position SCI_METHOD WordListSet int n const
       
       
        char * wl = 0 ; 虚拟无效 SCI_METHOD Lex Sci_PositionU startPos Sci_Position lengthDoc int initStyle IDocument * pAccess = 0 ; 虚拟无效 SCI_METHOD 折叠 Sci_PositionU startPos Sci_Position lengthDoc int initStyle IDocument * pAccess = 0 ;
       
       
        虚拟void * SCI_METHOD PrivateCall int操作void *指针= 0 虚拟int SCI_METHOD LineEndTypesSupported ()= 0 ; 虚拟int SCI_METHOD AllocateSubStyles int styleBase int numberStyles = 0 ; 虚拟int SCI_METHOD SubStylesStart int styleBase = 0
       
       
        ; 虚拟int SCI_METHOD SubStylesLength int styleBase = 0 ; 虚拟int SCI_METHOD StyleFromSubStyle int subStyle = 0 ; 虚拟int SCI_METHOD PrimaryStyleFromStyle int style = 0 ; 虚拟void SCI_METHOD FreeSubStyles ()= 0 ; 虚拟void SCI_METHOD SetIdentifiers
       
       
       
       
        int 样式const char *标识符= 0 virtual int SCI_METHOD DistanceToSecondaryStyles ()= 0 ; 虚拟const char * SCI_METHOD GetSubStyleBases ()= 0 ; virtual int SCI_METHOD NamedStyles ()= 0 ; 虚拟const char * SCI_METHOD NameOfStyle int style = 0
       
       
       
        ; 虚拟const char * SCI_METHOD TagsOfStyle int style = 0 ; 虚拟const char * SCI_METHOD DescriptionOfStyle int style = 0 ; };
       
       

ILexer5

class ILexer5 public ILexer4 { public virtual const char * SCI_METHOD GetName ()= 0 ; 虚拟int SCI_METHOD GetIdentifier ()= 0 ; 虚拟常量

       
         
        char * SCI_METHOD PropertyGet const char * key = 0 ; };

类型Sci_PositionSci_PositionU用于文档中的位置和行号。在Scintilla 4中,64位版本将这些定义为64位类型,以允许将来实现大于2 GB的文档。

const char *不需要 返回字符串的方法可以无限期地维护单独的分配:lexer实现可能拥有单个缓冲区,该缓冲区可用于每个调用。调用者应立即复制返回的字符串。

PropertySet和WordListSet的返回值用于指示更改是否需要对任何文档进行词法化或折叠。如果更改不需要在文档上进行任何额外的工作,则此位置是重新开始词法分析和折叠的位置,或者为-1。一种简单的方法是,如果更改可能需要再次对文档进行词法化,则返回0,而优化可能是记住设置首先影响文档的位置并返回该位置。

Version返回一个枚举值,指定实现接口的版本: lvRelease4for ILexer4在Scintilla 4.0之前,可能有不同的值。

Release 被称为销毁词法分析器对象。

PrivateCall允许应用程序和词法分析器之间直接通信。一个示例是应用程序维护一个包含有关系统头的符号信息的大型数据结构(例如Windows.h),并将其提供给词法分析器,然后将其应用于每个文档。这避免了为每个文档构造系统头信息的成本。这是通过SCI_PRIVATELEXERCALLAPI 调用的

Fold被称为需要折叠的确切范围。以前,词法编辑器的调用范围是在需要折叠的范围之前的一行开始,因为这可以固定上一次折叠的最后一行。新方法允许词法分析器决定是回溯还是更有效地处理。

NamedStylesNameOfStyleTagsOfStyle,和DescriptionOfStyle 用于提供关于设定的这个词法分析器使用样式的信息。 NameOfStyle是C语言标识符,例如“ SCE_LUA_COMMENT”。 TagsOfStyle是一组以标准化方式(例如“ literal string multiline raw”)描述样式的标签这里描述了一组通用标签和用于组合它们的约定DescriptionOfStyle是对“ Function or method name definition等样式的英文描述

GetName并且GetIdentifier可以被称为发现一个词法分析器的身份和被用来实现 SCI_GETLEXERLANGUAGESCI_GETLEXER

PropertyGet可以调用它来发现词法分析器存储的属性的值,并可以用来实现 SCI_GETPROPERTY

文件

IDocument { public virtual int SCI_METHOD 版本()const = 0 ; 虚拟void SCI_METHOD SetErrorStatus int status = 0 ; 虚拟 Sci_Position SCI_METHOD Length ()const = 0 ; 虚拟void SCI_METHOD GetCharRange char * buffer Sci_Position position Sci_Position

       
       
       
        lengthRetrieve const = 0 ; 虚拟字符 SCI_METHOD 0 ; 虚拟int SCI_METHOD GetLevel
        StyleAt Sci_Position position const = 0 ; 虚拟 Sci_Position SCI_METHOD LineFromPosition Sci_Position 位置const = 0 ; 虚拟 Sci_Position SCI_METHOD LineStart Sci_Position const = Sci_Position const = 0 ; 虚拟int SCI_METHOD SetLevel Sci_Position int
       
       
       
        级别= 0 虚拟int SCI_METHOD GetLineState Sci_Position const = 0 ; 虚拟int SCI_METHOD SetLineState Sci_Position int状态= 0 虚拟虚空
       
       
        SCI_METHOD StartStyling Sci_Position 位置= 0 虚拟布尔 SCI_METHOD SetStyleFor Sci_Position 长度字符样式= 0 ; 虚拟布尔 SCI_METHOD SetStyles Sci_Position 长度const char * styles = 0 ; 虚拟void SCI_METHOD DecorationSetCurrentIndicator int indicator
       
       
        = 0 ; 虚拟空隙 SCI_METHOD DecorationFillRange Sci_Position 位置INT Sci_Position fillLength = 0 ; 虚拟无效 SCI_METHOD ChangeLexerState Sci_Position 开始 Sci_Position 结束= 0 ; 虚拟INT SCI_METHOD 代码页()const的= 0 ; 虚拟布尔 SCI_METHOD IsDBCSLeadByte
       
       
       
        char ch const = 0 ; 虚拟const char * SCI_METHOD BufferPointer ()= 0 ; 虚拟int SCI_METHOD GetLineIndentation Sci_Position = 0 ; 虚拟 Sci_Position SCI_METHOD LineEnd Sci_Position const 0 ; 虚拟 Sci_Position SCI_METHOD GetRelativePosition Sci_Position
       
       
        = positionStart Sci_Position characterOffset const = 0 ; 虚拟int SCI_METHOD GetCharacterAndWidth Sci_Position 位置 Sci_Position * pWidth
       
        const = 0 ; };

Scintilla试图最大程度地减少将文本修改为仅使更改和重新绘制更改线的后果。Lexer对象包含它们自己的私有额外状态,这可能会影响以后的行。例如,如果C ++词法分析器将不活动的代码段变灰,则将该语句更改#define BEOS 0#define BEOS 1可能需要重新样式化并重新显示文档的后续部分。词法分析器可以调用ChangeLexerState以向文档发送信号,通知它应进行词法分析并显示更多内容。

对于StartStylingmask参数无效。它已在3.4.2及更早版本中使用。

SetErrorStatus用于将异常通知文档。不应将异常抛出构建边界,因为可能是使用不同的编译器或不兼容的异常选项构建了双方。

为了允许词法分析器确定行的结束位置,从而更轻松地支持Unicode行结束 ,应使用IDocumentinclude LineEnd而不是测试特定的行结束字符。

GetRelativePosition按整个字符浏览文档,返回INVALID_POSITION到超出文档开头和结尾的位置。

GetCharacterAndWidth提供从UTF-8字节到UTF-32字符或从DBCS到16位值的标准转换。无效UTF-8中的字节分别报告为值0xDC80 + byteValue,这不是有效的Unicode代码点。pWidth参数可以是NULL,如果调用者不需要知道在字符的字节数。

ILexer4IDocument 接口可能会在未来扩展版本(扩展ILexer5...)。Version方法指示实现了哪个接口,从而可以调用哪些方法。

Scintilla 4 IDocument通过合并以前单独的 IDocumentWithLineEnd接口并将mask参数删除为来更改的定义StartStyling

通知事项

当发生容器可能感兴趣的事件时,通知将从Scintilla控件发送(触发)到其容器。

通知是使用 WM_NOTIFY Windows上消息

在GTK上,发送“ sci-notify”信号,并且信号处理程序应具有签名 handler(GtkWidget *, gint, SCNotification *notification, gpointer userData)

在Cocoa上,可以将实现的委托ScintillaNotificationProtocol 设置为接收通知,或者可以将该ScintillaView类子类化,并且 notification:重写方法。重写notification:允许子类控制是否执行默认处理。

容器通过了 SCNotification包含有关事件信息结构。

struct Sci_NotifyHeader {//这与Win32 NMHDR结构匹配
    * hwndFrom; //环境特定的窗口句柄/指针
    uptr_t idFrom; //发出通知的窗口的CtrlID
    未签名的int代码;// SCN_ *通知代码
};

struct SCNotification {
	struct Sci_NotifyHeader nmhdr;
	Sci_Position位置;
	/ * SCN_STYLENEEDED,SCN_DOUBLECLICK,SCN_MODIFIED,SCN_MARGINCLICK,* /
	/ * SCN_MARGINRIGHTCLICK,SCN_NEEDSHOWN,SCN_DWELLSTART,SCN_DWELLEND,* /
	/ * SCN_CALLTIPCLICK,SCN_HOTSPOTCLICK,SCN_HOTSPOTDOUBLECLICK,* /
	/ * SCN_HOTSPOTRELEASECLICK,SCN_INDICATORCLICK,SCN_INDICATORRELEASE,* /
	/ * SCN_USERLISTSELECTION,SCN_AUTOCSELECTION,SCN_AUTOCSELECTIONCHANGE * /

	诠释
	/ * SCN_CHARADDED,SCN_KEY,SCN_AUTOCCOMPLETE,SCN_AUTOCSELECTION,* /
	/ * SCN_USERLISTSELECTION * /
	int修饰符;
	/ * SCN_KEY,SCN_DOUBLECLICK,SCN_HOTSPOTCLICK,SCN_HOTSPOTDOUBLECLICK,* /
	/ * SCN_HOTSPOTRELEASECLICK,SCN_INDICATORCLICK,SCN_INDICATORRELEASE,* /

	intificationType; / * SCN_MODIFIED * /
	const char * text;
	/ * SCN_MODIFIED,SCN_USERLISTSELECTION,SCN_AUTOCSELECTION,SCN_URIDROPPED,* /
	/ * SCN_AUTOCSELECTIONCHANGE * /

	Sci_Position长度;/ * SCN_MODIFIED * /
	科学位置线收藏夹; / * SCN_MODIFIED * /
	int消息;/ * SCN_MACRORECORD * /
	uptr_t wParam; / * SCN_MACRORECORD * /
	sptr_t lParam; / * SCN_MACRORECORD * /
	Sci_Position行;/ * SCN_MODIFIED * /
	int foldLevelNow; / * SCN_MODIFIED * /
	int foldLevelPrev; / * SCN_MODIFIED * /
	整数余量 / * SCN_MARGINCLICK,SCN_MARGINRIGHTCLICK * /
	int listType; / * SCN_USERLISTSELECTION,SCN_AUTOCSELECTIONCHANGE * /
	int x; / * SCN_DWELLSTART,SCN_DWELLEND * /
	诠释 / * SCN_DWELLSTART,SCN_DWELLEND * /
	整数令牌; / * SCN_MODIFIED与SC_MOD_CONTAINER * /
	int注解 / * SCN_MODIFIED和SC_MOD_CHANGEANNOTATION * /
	int更新;/ * SCN_UPDATEUI * /
	int listCompletionMethod;
	/ * SCN_AUTOCSELECTION,SCN_AUTOCCOMPLETED,SCN_USERLISTSELECTION * /
	int characterSource; / * SCN_CHARADDED * /
};

容器可以选择处理的通知消息以及与它们关联的消息是:

SCN_STYLENEEDED
SCN_CHARADDED
SCN_SAVEPOINTREACHED
SCN_SAVEPOINTLEFT
SCN_MODIFYATTEMPTRO
SCN_KEY
SCN_DOUBLECLICK
SCN_UPDATEUI
SCN_MODIFIED
SCN_MACRORECORD
SCN_MARGINCLICK
SCN_NEEDSHOWN
SCN_PAINTED
SCN_USERLISTSELECTION
SCN_URIDROPPED
SCN_DWELLSTART
SCN_DWELLEND
SCN_ZOOM
SCN_HOTSPOTCLICK
SCN_HOTSPOTDOUBLECLICK
SCN_HOTSPOTRELEASECLICK
SCN_INDICATORCLICK
SCN_INDICATORRELEASE
SCN_CALLTIPCLICK
SCN_AUTOCSELECTION
SCN_AUTOCCANCELLED
SCN_AUTOCCHARDELETED
SCN_FOCUSIN
SCN_FOCUSOUT
SCN_AUTOCCOMPLETED
SCN_MARGINRIGHTCLICK
SCN_AUTOCSELECTIONCHANGE

以下SCI_*消息与这些通知关联:

SCI_SETMODEVENTMASK(int eventMask)
SCI_GETMODEVENTMASK → int
SCI_SETCOMMANDEVENTS(bool commandEvents)
SCI_GETCOMMANDEVENTS → bool
SCI_SETMOUSEDWELLTIME(int periodMilliseconds)
SCI_GETMOUSEDWELLTIME → int
SCI_SETIDENTIFIER(int identifier)
SCI_GETIDENTIFIER → int

以下附加通知是使用辅助“命令”方法发送的,并且应在新代码中避免使用,因为主要“通知”方法将为所有相同的事件提供更丰富的信息。WM_COMMAND消息在Windows上使用。这模拟Windows编辑控件。这些通知中仅传递控件ID的低16位。

在GTK上,将发送“命令”信号,并且信号处理程序应具有签名 handler(GtkWidget *, gint wParam, gpointer lParam, gpointer userData)

SCEN_CHANGE
SCEN_SETFOCUS
SCEN_KILLFOCUS

SCI_SETIDENTIFIER(int标识符)
SCI_GETIDENTIFIER→int
这两个消息设置并获取Scintilla实例的标识符,该实例作为idFrom字段包含在通知中 当应用程序创建多个Scintilla窗口小部件时,这将允许找到每个通知的来源。在Windows上,此值在CreateWindow调用中初始化,并存储为GWLP_ID窗口属性。该值应较小,最好小于16位,而不是指针,因为某些功能只能发送16位或32位。

SCN_STYLENEEDED
如果您SCI_SETLEXER(SCLEX_CONTAINER)以前使容器充当词法分析器,则在Scintilla将要显示或打印需要样式的文本时,您将收到此通知。您需要从包含返回SCI_GETENDSTYLED的位置到传入的位置的行中设置文本样式SCNotification.position象征性地,您需要以下形式的代码:

    startPos = SCI_GETENDSTYLED()
    lineNumber = SCI_LINEFROMPOSITION(startPos);
    startPos = SCI_POSITIONFROMLINE(lineNumber);
    MyStyleRoutine(startPos,SCNotification.position);

SCN_CHARADDED
当用户键入输入到文本中的普通文本字符(与命令字符相对)时发送。容器可以使用它来决定显示呼叫提示自动完成列表字符在中SCNotification::ch对于单字节字符集,这是字符的字节值。对于UTF-8,它是Unicode代码点;对于DBCS,它是2个字节字符的(第一个字节* 256 +第二个字节),以及1个字节字符的字节值。该通知是在对字符进行样式设置之前发送的,因此取决于样式的处理应改为在SCN_UPDATEUI通知中执行。

SCNotification::characterSource字段是字符的来源。

符号 含义
SC_CHARACTERSOURCE_DIRECT_INPUT 0 直接输入字符,包括通过调用键盘命令(如SCI_NEWLINE)生成的字符
SC_CHARACTERSOURCE_TENTATIVE_INPUT 1个 暂定输入字符。它们由IME使用(内联模式,请参见SCI_SETIMEINTERACTION)来合成最终字符串,通常不同于最终合成字符串(这是已经真正添加到当前文档中的字符串),并且当用户取消键入时可以将其撤消(例如通过按Esc键)。某些系统(至少是Cocoa)还对非IME功能使用了试探性输入,例如使用死键来合成变音符号(重音符号等)。这些字符不会添加到宏录制中。设置此值后,大多数应用程序可以简单地忽略通知。
SC_CHARACTERSOURCE_IME_RESULT 2 IME(内联或窗口模式)完整的复合字符串。现代IME能够合成英语单词或句子,设置此值后,当前字符可能不是中文,日文或韩文字符。当前,仅在Windows上设置。

SCN_SAVEPOINTREACHED
SCN_SAVEPOINTLEFT
输入或离开保存点时发送到容器,以使容器显示“文档脏污”指示符并更改其菜单。
另请参阅:SCI_SETSAVEPOINTSCI_GETMODIFY

SCN_MODIFYATTEMPTRO
在只读模式下,如果用户尝试更改文本,则此通知将发送到容器。这可用于从版本控制系统中签出文档。您可以使用设置文档的只读状态SCI_SETREADONLY

SCN_KEY
报告Scintilla按下但未使用的所有键。由于键盘焦点存在一些问题,因此在GTK上使用,并且Windows版本未发送该消息。SCNotification::ch保留关键代码并 SCNotification.modifiers保留修饰符。如果修饰符包括SCMOD_ALTSCMOD_CTRL且键控代码小于256,则发送此通知

SCN_DOUBLECLICK
在编辑器中双击了鼠标按钮。position字段设置为双击的文本位置,该line字段设置为双击的行,该modifiers字段设置为以与SCN_KEY相似的方式按下的键修饰符

SCN_UPDATEUI
文档的文本或样式已更改,或者选择范围或滚动位置可能已更改。现在将是更新依赖于文档或视图状态的所有容器UI元素的好时机。由于有时很难确定是否已发生更改,因此在没有实际更改时也会触发这些事件。updated字段设置为自上次通知以来已更改的事物的位集。

符号 含义
SC_UPDATE_CONTENT 0x01 内容,样式或标记可能已更改。
SC_UPDATE_SELECTION 0x02 选择可能已更改。
SC_UPDATE_V_SCROLL 0x04 可能已垂直滚动。
SC_UPDATE_H_SCROLL 0x08 可能已水平滚动。

SCN_MODIFIED
当文档的文本或样式更改或将要更改时,发送此通知。您可以使用来为发送到容器的通知设置掩码SCI_SETMODEVENTMASK通知结构包含有关更改内容,更改如何发生以及此更改是否更改了文档中的行数的信息。在任何情况下都不能进行任何修改SCN_MODIFIED使用的SCNotification字段是:

领域 用法
modificationType 一组标识所做更改的标志。请参阅下表。
position 文本或样式更改的开始位置。如果不使用,则设置为0。
length 文本或样式更改时更改的长度(以字节为单位)。如果不使用,则设置为0。
linesAdded 添加的行数。如果为负,则为删除的行数。如果不使用或没有添加或删除行,则设置为0。
text 对文本更改有效,对样式更改无效。如果我们正在收集撤消信息,则它将保存指向移交给撤消系统的文本的指针,否则为零。对于用户执行的SC_MOD_BEFOREDELETE,文本字段为0。
line 发生折叠级别或标记更改的行号。如果未使用,则为0;如果更改了多行,则为-1。
foldLevelNow 应用于行的新折叠级别;如果未使用此字段,则为0。
foldLevelPrev 行的上一个折叠级别;如果未使用此字段,则为0。

SCNotification.modificationType字段设置了一些位来告诉您已完成的操作。这些SC_MOD_*位对应于动作。这些 SC_PERFORMED_*位告诉您操作是由用户完成的,还是先前操作的撤消或重做的结果。

符号 含义 SCNotification字段
SC_MOD_NONE 0x00 没有字段有效的基本值。不会发生,但在测试中很有用。
SC_MOD_INSERTTEXT 0x01 文本已插入到文档中。 position, length, text, linesAdded
SC_MOD_DELETETEXT 0x02 文本已从文档中删除。 position, length, text, linesAdded
SC_MOD_CHANGESTYLE 0x04 样式发生了变化。 position, length
SC_MOD_CHANGEFOLD 0x08 发生了折页变化。 line, foldLevelNow, foldLevelPrev
SC_PERFORMED_USER 0x10 信息:该操作由用户完成。 没有
SC_PERFORMED_UNDO 0x20 信息:这是撤消的结果。 没有
SC_PERFORMED_REDO 0x40 信息:这是重做的结果。 没有
SC_MULTISTEPUNDOREDO 0x80 这是多步骤撤消或重做事务的一部分。 没有
SC_LASTSTEPINUNDOREDO 0x100 这是撤消或重做事务的最后一步。 没有
SC_MOD_CHANGEMARKER 0x200 一行中的一个或多个标记已更改。 line
SC_MOD_BEFOREINSERT 0x400 文本即将插入到文档中。 position, if performed by user then text in bytes, length in bytes
SC_MOD_BEFOREDELETE 0x800 文本即将从文档中删除。 position, length
SC_MOD_CHANGEINDICATOR 0x4000 已在一系列文本中添加或删除了一个指示符。 position, length
SC_MOD_CHANGELINESTATE 0x8000 线路状态已更改,因为调用了SCI_SETLINESTATE line
SC_MOD_CHANGETABSTOPS 0x200000 由于调用了SCI_CLEARTABSTOPSSCI_ADDTABSTOP,因此行上的显式制表位已更改 line
SC_MOD_LEXERSTATE 0x80000 词法分析器的内部状态已在一定范围内变化。 position, length
SC_MOD_CHANGEMARGIN 0x10000 文字边距已更改。 line
SC_MOD_CHANGEANNOTATION 0x20000 注释已更改。 line
SC_MOD_INSERTCHECK 0x100000 文本将被插入。处理程序可以通过调用SCI_CHANGEINSERTION来更改要插入的文本 不能在此处理程序中进行其他修改。 position, length, text
SC_MULTILINEUNDOREDO 0x1000 这是具有多行更改的撤消或重做的一部分。 没有
SC_STARTACTION 0x2000 当它是撤消事务的第一步或唯一步骤时,可以在SC_PERFORMED_USER操作上设置此值。通过将Scintilla操作添加到当前打开的容器事务的容器堆栈中,可以将Scintilla撤消堆栈与容器应用程序中的撤消堆栈集成在一起,或者在没有打开的容器事务的情况下打开新的容器事务。 没有
SC_MOD_CONTAINER 0x40000 对于使用将该容器存储到撤消堆栈中的操作,将其设置为on SCI_ADDUNDOACTION 代币
SC_MODEVENTMASKALL 0x1FFFFF 这是所有有效标志的掩码。这是设置的默认遮罩状态SCI_SETMODEVENTMASK 没有


SCEN_CHANGE当文档的文本(不是样式)更改时,将触发SCEN_CHANGE(768)。此通知是使用WM_COMMANDWindows上消息和GTK上的“命令”信号发送的,因为这是标准Edit控件的行为(SCEN_CHANGE与Windows Edit控件具有相同的值 EN_CHANGE)。没有其他信息被发送。如果您需要更详细的信息,请使用SCN_MODIFIED您可以过滤类型的系统会通知您与变化的SCI_SETMODEVENTMASKSCI_SETCOMMANDEVENTS

SCI_SETMODEVENTMASK(int eventMask)
SCI_GETMODEVENTMASK→int
这些消息设置并获取事件掩码,该事件掩码确定使用SCN_MODIFIED通知将哪些文档更改事件通知给容器SCEN_CHANGE例如,容器可以决定只调用关于文本更改的通知,而不通过调用来样式化更改的样式 SCI_SETMODEVENTMASK(SC_MOD_INSERTTEXT|SC_MOD_DELETETEXT)

可能的通知类型是一样的modificationType通过使用位标志SCN_MODIFIEDSC_MOD_INSERTTEXTSC_MOD_DELETETEXTSC_MOD_CHANGESTYLESC_MOD_CHANGEFOLDSC_PERFORMED_USERSC_PERFORMED_UNDOSC_PERFORMED_REDOSC_MULTISTEPUNDOREDOSC_LASTSTEPINUNDOREDOSC_MOD_CHANGEMARKERSC_MOD_BEFOREINSERTSC_MOD_BEFOREDELETESC_MULTILINEUNDOREDO,和SC_MODEVENTMASKALL

SCI_SETCOMMANDEVENTS(bool commandEvents)
SCI_GETCOMMANDEVENTS→bool
这些消息设置并获取是否将SCEN_*命令事件发送到容器。为此,SCEN_CHANGE它充当的附加过滤器 SCI_SETMODEVENTMASK大多数应用程序应将此设置为关闭以避免产生开销,而只能使用 SCN_MODIFIED

SCEN_SETFOCUS
SCint_KILLFOCUS
SCEN_SETFOCUS在Scintilla获得焦点时被激发,在SCEN_KILLFOCUS(256)失去焦点时被激发 这些通知是使用WM_COMMANDWindows上消息和GTK上的“命令”信号发送的,因为这是标准Edit控件的行为。不幸的是,这些代码与Windows编辑通知代码EN_SETFOCUS(256)和EN_KILLFOCUS(512)不匹配现在更改Scintilla代码为时已晚,因为客户端取决于当前值。

SCN_MACRORECORD
SCI_STARTRECORDSCI_STOPRECORD消息启用和禁用宏录制。启用后,每次发生可记录的更改时, SCN_MACRORECORD通知都会发送到容器。由容器来记录操作。要查看完整列表SCI_*是记录的信息,搜索Scintilla的来源Editor.cxxEditor::NotifyMacroRecordSCNotification此通知中set 字段为

领域 用法
message SCI_*导致通知消息。
wParam 的值wParamSCI_*的消息。
lParam 的值lParamSCI_*的消息。

SCN_MARGINCLICK
SCN_MARGINRIGHTCLICK
这些通知告诉容器在标记为敏感边距内单击或右键单击了鼠标(请参阅参考资料SCI_SETMARGINSENSITIVEN)。这可用于执行折叠或放置断点。使用以下SCNotification字段:

领域 用法
modifiers 的适当组合SCI_SHIFTSCI_CTRLSCI_ALT指示保存按下在边际上点击时的键。
position 文档中与边距单击相对应的行的开始位置。
margin 单击的边距数字。

SCN_NEEDSHOWN
Scintilla已确定应使当前不可见的一系列线可见。一个可能需要这样做的示例是,如果收缩的折叠点的行尾被删除了。如果希望以某种不寻常的方式使行可见(例如使整个文档可见),则会将该消息发送到容器。大多数容器只会通过调用来确保范围内的每一行都是可见的SCI_ENSUREVISIBLEpositionlength领域SCNotification指示应可见文档的范围。容器代码将类似于以下代码框架:

firstLine = SCI_LINEFROMPOSITION(scn.position)
lastLine = SCI_LINEFROMPOSITION(scn.position + scn.length-1)
对于line = lineStart到lineEnd,下一步执行SCI_ENSUREVISIBLE(line)

SCN_PAINTED
绘画刚刚完成。当您希望基于Scintilla的更改来更新其他一些小部件,但又希望首先进行绘制以使响应速度更快时,该功能将非常有用。中没有其他信息SCNotification

SCN_USERLISTSELECTION
用户已在用户列表中选择一个项目使用的 SCNotification字段是:

领域 用法
listType 设置为启动列表listTypeSCI_USERLISTSHOW消息中参数
text 选择的文本。
position 列表显示的位置。
ch 如果填充字符是选择方法,则使用字符,否则为0。
listCompletionMethod 一个值,指示完成的方式。请参阅下表。

请参阅SCN_AUTOCCOMPLETED通知以获取可能的值listCompletionMethod.

SCN_URIDROPPED
仅在GTK版本上。表示用户已将URI(例如文件名或Web地址)拖到Scintilla上。容器可以将此解释为打开文件的请求。URI文本上textSCNotification字段

SCN_DWELLSTART
SCN_DWELLEND
SCN_DWELLSTART是在用户将鼠标停留在某个位置持续停留时间时生成的(请参阅参考资料SCI_SETMOUSEDWELLTIME)。SCN_DWELLEND后一个产生SCN_DWELLSTART和移动鼠标或诸如键按压其他活动性指示驻留结束。两种通知都在中设置了相同的字段 SCNotification

领域 用法
position 这是文档中鼠标指针停留的最接近的位置。
x, y 指针在哪里徘徊。position字段设置为 SCI_POSITIONFROMPOINTCLOSE(x, y)

SCI_SETMOUSEDWELLTIME(int periodMilliseconds)
SCI_GETMOUSEDWELLTIME→int
这两个消息设置并获取鼠标必须静止不动的时间(以毫秒为单位),以生成SCN_DWELLSTART通知。如果设置为SC_TIME_FOREVER,则默认为不生成任何驻留事件。

SCN_ZOOM
当用户使用键盘缩放显示或SCI_SETZOOM调用方法时,将生成此通知 此通知可用于重新计算位置,例如行数边距的宽度,以保持字符大小而不是像素大小。SCNotification没有其他信息。

SCN_HOTSPOTCLICK
SCN_HOTSPOTDOUBLECLICK
SCN_HOTSPOTRELEASECLICK
当用户单击或双击设置了热点属性的样式的文本时,将生成这些通知。此通知可用于链接到变量定义或网页。在通知处理程序中,应避免调用任何会修改当前选择或插入符号位置的函数。position字段设置为单击或双击的文本位置,并且该modifiers字段设置为以与SCN_KEY类似的方式按下的键修饰符仅报告Ctrl键的状态SCN_HOTSPOTRELEASECLICK

SCN_INDICATORCLICK
SCN_INDICATORRELEASE
当用户单击或释放具有指示符的文本时,将生成这些通知。position字段设置为单击或双击的文本位置,并且该modifiers字段设置为以与SCN_KEY类似的方式按下的键修饰符

SCN_CALLTIPCLICK
当用户单击呼叫提示时,将生成此通知。当函数名称重载了不同的参数时,此通知可用于显示下一个函数原型。所述position如果点击是一个向上的箭头,2如果在一个向下箭头,和0,如果别处字段被设置为1。

SCN_AUTOCSELECTION
用户已在自动完成列表中选择了一个项目在插入选择之前发送通知。通过SCI_AUTOCCANCEL从通知返回之前发送一条消息可以取消自动插入 使用的SCNotification字段是:

领域 用法
position 单词的开始位置。
text 选择的文本。
ch 如果填充字符是选择方法,则使用字符,否则为0。
listCompletionMethod 一个值,指示完成的方式。请参阅下表。

符号 含义
SC_AC_FILLUP 1个 填满字符触发完成。使用的字符以ch为单位。
SC_AC_DOUBLECLICK 2 双击触发完成。ch为0。
SC_AC_TAB 3 Tab键或SCI_TAB触发完成。ch为0。
SC_AC_NEWLINE 4 新行或SCI_NEWLINE触发了完成。ch为0。
SC_AC_COMMAND 5 消息触发了完成。ch为0。 SCI_AUTOCSELECT

SCN_AUTOCCANCELLED
用户已取消自动完成列表SCNotification中没有其他信息。

SCN_AUTOCCHARDELETED
用户在自动完成列表处于活动状态时删除了一个字符。SCNotification中没有其他信息。

SCN_AUTOCCOMPLETED
该通知是在自动完成插入其文本后生成的。这些字段与 通知相同 SCN_AUTOCSELECTION

SCN_AUTOCSELECTIONCHANGE
当自动完成或用户列表中突出显示项目时,发送此通知。使用的 SCNotification字段是:

领域 用法
listType 设置为消息中listType参数,SCI_USERLISTSHOW或者为0表示自动完成。
text 选择的文本。
position 列表显示的位置。

SCN_FOCUSIN
Sint_FOCUSOUT
SCN_FOCUSIN(2028)在Scintilla获得焦点时触发,而SCN_FOCUSOUT(2029)在失去焦点时触发

图片

页边标记和自动完成列表中使用的图像支持两种格式:RGBA和XPM。

RGBA

RGBA格式允许 每个像素alpha具有半透明性它比XPM功能更简单

数据是一个4字节像素值的序列,从顶行的像素开始,最左端的像素开始,然后从后续行的像素继续。出于对齐原因,线之间没有间隙。

每个像素依次由??一个红色字节,一个绿色字节,一个蓝色字节和一个alpha字节组成。颜色字节不与alpha值预乘。也就是说,不透明度为25%的全红色像素将为[FF,00,00,3F]

由于RGBA像素数据不包含任何尺寸信息,因此必须事先使用SCI_RGBAIMAGESETWIDTHSCI_RGBAIMAGESETHEIGHT消息设置宽度和高度

GUI平台通常包含用于以RGBA形式或类似形式将图像文件格式(如PNG)读入内存的功能。如果没有合适的平台支持,则LodePNG和picoPNG库是用于加载和解码BSD样式许可下可用的PNG文件的小型库。

Windows,GTK和OS X Cocoa支持RGBA格式。

XPM

XPM格式 在此处描述Scintilla仅能处理每个像素使用一个字符且没有指定颜色的XPM像素图。可能有一个完全透明的颜色称为“无”。

XPM图像使用两种形式的数据结构,第一种“行形式”格式非常适合将图像嵌入C源代码中,而“文本形式”则适合从文件中读取。在线条形式中,使用字符串数组,第一个字符串表示所用颜色的尺寸和数量。这之后是每种颜色的字符串,并且该部分之后是每行一个字符串的图像。文本格式包含与一个以C源代码格式化的以null终止的块相同的数据,该块以“ / * XPM * /”注释开头,以标记格式。

两种格式都可以与Scintilla API一起使用,并在指向所检查位置的字节处确定哪种格式:如果字节以“ / * XPM * /”开头,则将其视为文本形式,否则将其视为行形式。

所有平台均支持XPM格式。

GTK

在GTK上,以下函数创建了一个Scintilla小部件,与之通信并允许在销毁所有Scintilla小部件之后释放资源。

GtkWidget *scintilla_new()
void scintilla_set_id(ScintillaObject *sci, uptr_t id)
sptr_t scintilla_send_message(ScintillaObject *sci,unsigned int iMessage, uptr_t wParam, sptr_t lParam)
void scintilla_release_resources()

GtkWidget * scintilla_new()
创建一个新的Scintilla小部件。可以将返回的指针添加到容器并以与其他小部件相同的方式显示。

void scintilla_set_id(ScintillaObject * sci,uptr_t id)
设置将在此实例的所有通知的Sci_NotifyHeader结构的idFrom字段中使用的控件ID。这等效于SCI_SETIDENTIFIER

sptr_t scintilla_send_message(ScintillaObject * sci,无符号int iMessage,uptr_t wParam,sptr_t lParam)
主入口点允许发送本文档中描述的任何消息。

void scintilla_release_resources()
调用此函数可在销毁所有Scintilla小部件之后释放所有剩余资源。

临时消息

可能会添加复杂的新功能作为“临时”功能,以允许对该API进行进一步更改。如果经验表明它们是错误的,甚至可以删除临时功能。

临时功能在本文档中以独特的背景色显示

一些开发人员可能只想使用稳定的功能并已从临时状态毕业。为避免使用临时消息,请使用SCI_DISABLE_PROVISIONAL定义的符号进行编译

不推荐使用的消息和通知

当前支持以下消息来模拟现有Windows控件,但是在以后的Scintilla版本中将删除它们。如果使用这些消息,则应将它们替换为Scintilla。

WM_GETTEXT(int length,char * text)
WM_SETTEXT(<未使用>,const char * text)
EM_GETLINE(int line,char * text)
EM_REPLACESEL(<未使用>,const char * text)
EM_SETREADONLY
EM_GETTEXTRANGE(<未使用>,TEXTRANGE * tr)
WM_CUT
WM_COPY
WM_PASTE
WM_CLEAR
WM_UNDO
EM_CANUNDO
EM_EMPTYUNDOBUFFER
WM_GETTEXTLENGTH
EM_GETFIRSTVISIBLELINE
EM_GETLINECOUNT
EM_GETMODIFY
EM_SETMODIFY(布尔值已修改)
EM_GETRECT(RECT * rect)
EM_GETSEL(int *开始,int *结束)
EM_EXGETSEL(<未使用>,CHARRANGE * cr)
EM_SETSEL(整数开始,整数结束)
EM_EXSETSEL(<未使用>,CHARRANGE * cr)
EM_GETSELTEXT(<未使用>,char * text)
EM_LINEFROMCHAR(int位置)
EM_EXLINEFROMCHAR(int位置)
EM_LINEINDEX(int行)
EM_LINELENGTH(int位置)
EM_SCROLL(行)
EM_LINESCROLL(int列,int行)
EM_SCROLLCARET()
EM_CANPASTE
EM_CHARFROMPOS(<未使用>,POINT *位置)
EM_POSFROMCHAR(int位置,POINT *位置)
EM_SELECTIONTYPE
EM_HIDESELECTION(布尔皮革)
EM_FINDTEXT(int标志,FINDTEXTEX * ft)
EM_FINDTEXTEX(int标志,FINDTEXTEX * ft)
EM_GETMARGINS
EM_SETMARGINS(EC_LEFTMARGIN或EC_RIGHTMARGIN或EC_USEFONTINFO,整数)
EM_FORMATRANGE

以下是仅在中定义 INCLUDE_DEPRECATED_FEATURES的功能Scintilla.h为了确保将来的兼容性,您应该按照指示进行更改。

SCI_SETKEYSUNICODE(bool keysUnicode)
SCI_GETKEYSUNICODE → bool
SCI_SETTWOPHASEDRAW(bool twoPhase)
SCI_GETTWOPHASEDRAW → bool
SCI_SETSTYLEBITS(int bits)
SCI_GETSTYLEBITS → int
SCI_GETSTYLEBITSNEEDED → int

SCI_SETKEYSUNICODE(bool keysUnicode)
推荐使用SCI_GETKEYSUNICODE→bool不推荐使用
在Windows上,Scintilla不再支持窄字符窗口,因此输入始终被视为Unicode。

SCI_SETTWOPHASEDRAW(bool twoPhase)
SCI_GETTWOPHASEDRAW→bool
此属性已替换为更通用的前面的PHASESDRAW属性,允许进行多相绘制以及一相和两相绘制。

SC_PHASES_ONE不建议使用单相图,应将其替换为两相SC_PHASES_TWO或多相SC_PHASES_MULTIPLE图。

以下是应从调用代码中删除的功能,但仍要定义这些功能,以避免破坏调用者。

SCI_SETSTYLEBITS(INT位)已过时
SCI_GETSTYLEBITS→INT已过时
SCI_GETSTYLEBITSNEEDED→INT已过时
INDIC0_MASKINDIC1_MASKINDIC2_MASKINDICS_MASK已过时
的Scintilla不再支持风格字节指标。支持样式字节指示器的最新版本是3.4.2。对这些符号的任何使用均应删除,并用标准指示器代替SCI_GETSTYLEBITS并且SCI_GETSTYLEBITSNEEDED总是返回8,表示样式使用了8位,并且有256种样式。

编辑Scintilla从未支持的消息

EM_GETWORDBREAKPROC EM_GETWORDBREAKPROCEX
EM_SETWORDBREAKPROC EM_SETWORDBREAKPROCEX
EM_GETWORDWRAPMODE EM_SETWORDWRAPMODE
EM_LIMITTEXT EM_EXLIMITTEXT
EM_SETRECT EM_SETRECTNP
EM_FMTLINES
EM_GETHANDLE EM_SETHANDLE
EM_GETPASSWORDCHAR EM_SETPASSWORDCHAR
EM_SETTABSTOPS
EM_FINDWORDBREAK
EM_GETCHARFORMAT EM_SETCHARFORMAT
EM_GETOLEINTERFACE EM_SETOLEINTERFACE
EM_SETOLECALLBACK
EM_GETPARAFORMAT EM_SETPARAFORMAT
EM_PASTESPECIAL
EM_REQUESTRESIZE
EM_GETBKGNDCOLOR EM_SETBKGNDCOLOR
EM_STREAMIN EM_STREAMOUT
EM_GETIMECOLOR EM_SETIMECOLOR
EM_GETIMEOPTIONS EM_SETIMEOPTIONS
EM_GETOPTIONS EM_SETOPTIONS
EM_GETPUNCTUATION EM_SETPUNCTUATION
EM_GETTHUMB
EM_GETEVENTMASK
EM_SETEVENTMASK
EM_DISPLAYBAND
EM_SETTARGETDEVICE

Scintilla尝试在可行的情况下成为标准Windows Edit和RichEdit控件的超集。由于它不打算在文字处理器中使用,因此某些编辑消息无法合理处理。不支持的消息无效。

删除的功能

这些功能现已完全删除。

SC_CP_DBCS在2016年版本3.7.1中删除,
版本用于在GTK上设置DBCS(双字节字符集)模式。调用SCI_SETCODEPAGE时应使用显式的DBCS代码页

SCI_SETUSEPALETTE(bool usePalette)在2016年版本3.7.1中删除
。SCI_GETUSEPALETTE→bool在2016年版本3.7.1中删除。Scintilla
不再支持调色板模式。支持调色板的最新版本是2.29。必须删除对这些方法的所有调用。

早期版本的Scintilla允许将指标存储在每个样式字节的位中。该版本于2007年弃用,并于2014年从3.4.3版中删除。样式字节指示器的所有使用都应替换为标准指示器

建筑物辛蒂利亚

要构建Scintilla或SciTE,请参阅Scintilla和SciTE目录中都存在的自述文件。编译器必须支持C ++ 17。对于Windows,可以使用GCC 7.1或Microsoft Visual C ++ 2017.5进行构建。对于GTK,应使用GCC 7.1或更高版本。glib 2.22+支持GTK 2.24和3.x。应自动检测安装的GTK版本。当同时存在GTK 2和GTK 3时,要构建GTK 3.x,需要在命令行上定义GTK3。

从Scintilla添加和删除源文件可能需要修改构建文件。这在AddSource.txt解决

静态链接

在Windows上,Scintilla通常用作.DLL文件的动态库。如果要将Scintilla直接链接到应用程序.EXE或.DLL文件,则可以链接到静态库bin / libscintilla.lib(如果使用GCC,则链接为.a)并调用Scintilla_RegisterClassesScintilla_RegisterClasses使用HINSTANCE您的应用程序,并确保注册了“ Scintilla”窗口类。

生成独立的Scintilla DLL时,应编译并链接ScintillaDLL.cxx文件以提供DllMainScintilla_RegisterClasses

确保词法分析器链接到Scintilla

根据使用的编译器和链接器,可能会删除词法分析器。这通常是在构建静态库时引起的。为了确保链接词法器,Scintilla_LinkLexers()可以调用函数。

更改词法集

要更改Scintilla中的词法分析器集,请从中添加和删除词法分析器源文件(Lex*.cxx),scintilla/lexers directory然后scripts/LexGen.pyscripts目录运行 脚本以更新make文件和Catalogue.cxxLexGen.py需要Python 3.6或更高版本。如果您无权使用Python,则可以Catalogue.cxx按照其他词法分析器的模式,以一种简单的方式进行手工编辑重要的是要在您的词法分析器源代码中包含 LINK_LEXER(lmMyLexer);与相对应的内容LexerModule lmMyLexer(...);

使用替代的正则表达式实现进行构建

一个简单的界面提供了在编译时切换正则表达式引擎的支持。您必须RegexSearchBase为您选择的引擎实现,查看内置实现BuiltinRegex以了解如何完成。然后,您需要实现factory方法CreateRegexSearch 来创建类的实例。您必须通过定义禁用内置实现 SCI_OWNREGEX

原文