Scite 文字摺疊

lua-users home
wiki

文字文件的大綱模式

這是個簡單的擴充套件,能讓有結構的文字文件以大綱形式顯示,藉由提供摺疊功能。這是基本以行驅動詞法風格分析器的範例。目前需要 SciteExtMan;如要安裝,請將 檔案:wiki_insecure/editors/SciTE/fold.lua 放在你的 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

顯示大綱

 常見的 檢視 | 切換所有摺疊 指令現在會作用於你的文件,當然你也還是可以用一般的方式手動摺疊和展開。Wiki 型式文件通常從 '==' 開始,而且不會有頂層標題。在這種情況下,你可以指定起始層級
 text.outline.start=1
這會讓你能夠正確地檢視此頁面的標記大綱。

工具 | 顯示大綱 會顯示所有 摺疊行

限制、實作和進一步的可能性

基於行的詞法分析器並非總是正常運作,因為它們必須等候按下回車鍵。我提供了一項 工具 | 重新掃描 指令,萬一你的文件出了問題時,它能將文件整理好;請注意,當切換緩衝區時會自動執行這項動作。

這些函式能讓你設定 Scintilla 控制項的摺疊層級,然後提取它。基本層級必須從 SC_FOLDLEVELBASE 開始,而且所有摺疊行必須另外具有 SC_FOLDLEVELHEADERFLAG。請注意 gerçek 詞法分析器所產生的摺疊資訊較為複雜,而且你必須偽造位元運算。

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] 的表达式并将其置于定距字体标记中,那将很酷。

SteveDonovan


最近的變更 · 偏好設定
編輯 · 歷史
上次編輯時間:2006 年 8 月 31 日下午 8:48 GMT (差異)