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

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

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

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

   

TymurGubayev

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


Код:
 
--[[--------------------------------------------------
SortText.lua
Authors: Tugarinov Sergey & mozers™
version 2.0
------------------------------------------------------
Sorting selected lines_tbl alphabetically and vice versa
Сортировка выделенных строк по алфавиту и наоборот
 
Connection:
    Set in a file .properties:
        command.name.37.*=Sorting of lines_tbl A… z / z… A
        command.37.*=dofile $(SciteDefaultHome)\tools\SortText.lua
        command.mode.37.*=subsystem:lua,savebefore:no
--]]--------------------------------------------------
 
local lines_tbl = {} -- Таблица со строками нашего текста
local sort_direction_decreasing = false -- Обратный порядок сортировки
local patt = [=[^[%s'"`«]*]=] --патерн для отбрасывания префикса, настраивается по желанию.
 
-- сравниваем две строки
local function CompareTwoLines(line1, line2)
    line1 = line1:gsub(patt, '')
    line2 = line2:gsub(patt, '')
    if sort_direction_decreasing then
        return (line1:lower() > line2:lower())
    else
        return (line1:lower() < line2:lower())
    end
end
 
-- автоматически определяем направление сортировки сравнивая две первые неравные строки
local function GetSortDirection()
    local n = #lines_tbl
    local prev_line = lines_tbl[n]:gsub(patt, '')
    for _, current_line in ipairs(lines_tbl) do
        if current_line:gsub(patt, '') ~= prev_line then
            return current_line:lower() > prev_line:lower()
        end
    end
end
 
local sel_text = editor:GetSelText()
local sel_start = editor.SelectionStart
local sel_end = editor.SelectionEnd
if sel_text ~= '' then
    local current_line = ''
    -- разделяем на строки и загоняем их в таблицу
    for current_line in sel_text:gmatch('[^\n]+') do
        lines_tbl[#lines_tbl+1] = current_line
    end
    if #lines_tbl > 2 then
        sort_direction_decreasing = GetSortDirection()
        -- сортируем строки в таблице
        table.sort(lines_tbl, CompareTwoLines)
        -- соединяем все строки из таблицы вместе
        local out_text = table.concat(lines_tbl, '\n')..'\n'
        editor:ReplaceSel(out_text)
    end
end
-- восстанавливаем выделение
editor:SetSel(sel_start, sel_end)
 


Всего записей: 35 | Зарегистр. 24-11-2008 | Отправлено: 02:12 21-02-2009
   

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

Компьютерный форум 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.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru