Scite 文本折叠 |
|
scite_lua
目录中。
文本文档当然有很多形式;此扩展会获取一些用于折叠信息的常见模式。默认情况下,使用 Wiki 约定,其中以一定数量的“=”字符开头的行表示标题
=Main Heading ==Subheading 1 ==Subheading 2 ===Sub 2 1 ===Sub 2 2当然,您可以更改使用的字符。对于 Emacs 风格的大纲文件,请将此内容放入您的属性文件中
text.outline.char=*您可以指定哪些文件将被视为文本,以及使用哪些字体,以及以下属性。例如,我喜欢在固定系统字体中编辑文本(多年使用记事本对一个人来说就是这样!)
text.ext=*.txt;*.doc text.font.name=Fixedsys另一种常见风格是使用编号部分,例如 1.2.1。(也许是一种官僚主义的诅咒,但有些人喜欢它)。以下是如何设置文件夹以识别这种风格
text.outline.number=1
View|Toggle All Folds
命令现在将在您的文档上工作,您当然也可以以通常的方式手动折叠和展开。Wiki 风格的文档通常从“==”开始,并且没有顶级标题。在这种情况下,您可以指定起始级别是什么
text.outline.start=1这将允许您正确查看此页面标记的大纲。
Tools|Show Outline
显示所有折叠线。
Tools|Rescan
命令来整理文档,如果它变得混乱;请注意,这会在缓冲区切换时自动发生。
这些函数允许您设置 Scintilla 控件的折叠级别,然后提取它。基本级别必须从 SC_FOLDLEVELBASE
开始,并且任何折叠线都必须另外具有 SC_FOLDLEVELHEADERFLAG
。请注意,由真实词法分析器生成的折叠信息更复杂,并且必须伪造位运算。
local function set_level(i,lev,fold) local foldlevel = lev + SC_FOLDLEVELBASE if fold then foldlevel = foldlevel + SC_FOLDLEVELHEADERFLAG editor.FoldExpanded[i] = true end editor.FoldLevel[i] = foldlevel end local function get_level(i) local fold = false local level_flags = editor.FoldLevel[i] - SC_FOLDLEVELBASE if level_flags - SC_FOLDLEVELHEADERFLAG >= 0 then fold = true level_flags = level_flags - SC_FOLDLEVELHEADERFLAG end return level_flags, fold end我已经将其制作成一个 SciteExtMan 脚本,以处理设置命令处理程序(最重要的是)
OnEditorLine
事件的繁琐工作。这可能会与 OnOutputLine
事件混淆,因此如果您使用 Lua 控制台扩展,则预计在输出窗格中会收到偶尔的奇怪错误消息。
我一直在考虑进行自动级别编号生成,但这并不容易正确完成;当插入新项目时,必须重新编号项目,等等。(MS Word 会对此感到困惑)。这是一个定义文本文档的“主要”模式的开始(使用 Emacs 术语),显然还会有“次要”模式,例如 Wiki 标记。例如,如果它自动检测到诸如 editor.FoldLevel[i]
之类的表达式并将其放入等宽字体标记中,那就太酷了。