Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » SciTE - Open Source Text Editor for Windows & Linux

Модерирует : gyra, Maz

Widok (23-11-2010 11:23): Лимит страниц. Продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

frs

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
--[[
    Indenter.lua
    Authors: frs
    version 0.0.2
    Форматирование кода отступами основанное на уровнях фолдинга с поправками на конкретные реализации лексеров
    Code indenting code based on folding level with correctins for some definite lexers
]]
 
local sel_text = editor:GetSelText()
if sel_text == '' then
   
line_start = 0
   
line_end = editor.LineCount-1
else
   
line_start = props["SelectionStartLine"] - 1
   
line_end = props["SelectionEndLine"] - 2
end
-- значения по умолчанию для непрописанных лексеров
use_outdents=false
outdent_last_line=true
 
-- списки слов для убавления отступа, по мере испытаний будут правится
-- возможно стоит их внести в properties соответствующих языков
-- к началу слов добавлено подчеркивания для снятия конфликтов
-- я плохо знаю lua, возможно кто-нибудь напишет более простую конструкцию хранения списка и проверки наличия в нем слова
outdents={_end=1,_else=1,_next=1,_wend=1,_elseif=1,_then=1} -- список слов по умолчанию
if lex== "pascal" then outdents={_end=1,_except=1} end -- список для паскаля
-- добавьте списки для других языков если требуется
 
lex=editor.LexerLanguage
 
if lex=="lua" or lex== "pascal" then use_outdents=true end
if
lex=="au3" or lex=="vb" or lex=="vbscript" then outdent_last_line=false end
if
lex~="python" then -- не вмешиваемся в отступы питона
   
editor:BeginUndoAction()
     
   
tb=4 -- ручное задание размера табуляций и индентов
   
editor.TabWidth=tb
    --tb=editor.TabWidth -- автоматическое задание  табуляций и индентов
   
editor.TabIndents=tb
    editor.Indent=tb
     
    ind=0
   
ind=editor.FoldLevel[line_start]
   
ind=math.fmod (ind, 1024)
   
for line_num = line_start, line_end do
        local
line = editor:GetLine(line_num)
       
if line ~= nil and line ~="" then
           
ind_next=editor.FoldLevel[line_num+1]
           
ind_next=math.fmod (ind_next, 1024)
           
-- trace((line_num+1).." \t- "..editor.FoldLevel[line_num].." - "..ind.."\n")
           
if use_outdents then
               
-- убавление отступа для слов из списка                
               
if outdents["_"..string.gsub(line,"^%s*(%w*)(.*)","%1")]==1 then ind=ind-1 end
            end
            if
outdent_last_line then
               
-- убавление отступа в последней строке блока фолдинга
               
if ind_next<ind then ind=ind-1 end
            end
           
comm=editor.StyleAt[editor.LineIndentPosition[line_num]]
           
if comm==1 and comm_prev==1 then ind=ind-1 end-- комментарий
           
comm_prev=comm
            editor.LineIndentation[line_num]=tb*ind
        else
           
editor.LineIndentation[line_num]=0
       
end
       
ind=ind_next
    end
   
editor:EndUndoAction()
end

Всего записей: 35 | Зарегистр. 20-02-2003 | Отправлено: 01:52 24-09-2008 | Исправлено: frs, 03:19 24-09-2008
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » SciTE - Open Source Text Editor for Windows & Linux
Widok (23-11-2010 11:23): Лимит страниц. Продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru