сделать стартовой  |  добавить в избранное

   SciTE - редактор кода для программистов

Архив SciTE-форума


Автор: frs, Отправлено:15:27 26-07-2007
вставьте многострочную аббревиатуру не в начале строки, а в конце текста или отступа пробелами-табуляциями, найдите различия
Автор: mozers, Отправлено:16:12 26-07-2007
frs
Поглядел повнимательней твой код и все понял.
Ты, если необходимо вставить многострочное сокращение со смещением вправо, добавляешь необходимое количество пробелов во все строки, кроме первой, чтобы эти строки отступали так же как первая. И это - правильно

А вообще хотелось бы еще поправить этот скрипт, чтобы он:
- если недописанному до конца сокращению соответствуют несколько вариантов, не один вариант выводил, а все возможные (точнее, он сейчас ни одного варианта не будет выводить, пока следующий символ не введешь и сокращение не будет однозначным)
- чтобы имена файлов abbrev искал более корректно.
- чтобы символ < понимал (для html тегов)

svs123456789

Цитата:
Цитата:только сначала надо выделить проверяемый текст иначе весь будет проверять
не действает! проверяется все равно весь текст!
У меня этот же скрипт проверяет только выделенный. Выбрось свой комп на помойку
Автор: frs, Отправлено:06:32 27-07-2007
Ну, вот, наваял чего-то.
abbrevlist.lua
-- Version: 1.2
-- аббревиатуры по начальным буквам (если недописанному до конца сокращению соответствуют несколько вариантов, то увидим все возможные)
-- символ < для html тегов (файл html.abbrev надо переименовать в hypertext.abbrev)

Сильно не критикуйте, я не программист и Lua вижу только второй день.
[more=abbrevlist.lua]
Код:
-- SciTE Abbreviation in UserList
-- Version: 1.0
-- Autor: Dmitry Maslov
---------------------------------------------------
-- При вводе слова, если это сокращение то вызывается список аббревиатур
-- Работу со списками подсмотрел в AutocompleteObject.lua (автор: mozers)
-- Примечание:
-- 1. Использует выпадающий список № 11
-- 2. Полностью автономен (нужно подключить в SciTEStartup.lua)
---------------------------------------------------
-- Version: 1.1
-- Autor: frs
-- Сохраняем колонку для многострочных аббревиатур
-- Version: 1.2
-- аббревиатуры по начальным буквам (если недописанному до конца сокращению соответствуют несколько вариантов, то увидим все возможные)
-- символ < для html тегов (файл html.abbrev надо переименовать в hypertext.abbrev)
------------------wishes-----------------------------
-- mozers
-- А вообще хотелось бы еще поправить этот скрипт, чтобы он:
-- - чтобы имена файлов abbrev искал более корректно.


local function GetWordLeft()
    editor:WordLeftExtend()
    if editor.LexerLanguage == 'cpp' and editor.CharAt[editor.SelectionStart-1] == 35 then
        editor:CharLeftExtend()
    end
    if editor.LexerLanguage == 'hypertext' and editor.CharAt[editor.SelectionStart-1] == 60 then
        editor:CharLeftExtend()
    end
    local sel_text = editor:GetSelText()
    editor:CharRight()
    return sel_text
end

-- вставка значения вместо аббревиатуры
local function InsertProp(sel_value)
    editor:WordLeftExtend()
    -- обрабатываем # в cpp
    if editor.LexerLanguage == 'cpp' and editor.CharAt[editor.SelectionStart-1] == 35 then
        editor:CharLeftExtend()
    end
    if editor.LexerLanguage == 'hypertext' and editor.CharAt[editor.SelectionStart-1] == 60 then
        editor:CharLeftExtend()
    end
    editor:DeleteBack()
    ind = string.rep(" ",editor.Column[editor.CurrentPos])
scite.InsertAbbreviation(string.gsub(sel_value,'\\n','\\n'..ind))
    return true
end

local function Abbrev()
-- считываем файл аббревиатур
    local abb_file = io.open(props["SciteDefaultHome"].."\\abbrev\\"..editor.LexerLanguage..".abbrev ")
    if not abb_file then
        abb_file = io.open(props["SciteDefaultHome"].."\\home\\abbrev.properties")
        if not abb_file then return false end
    end
    -- считываем слово в переменную
    local currword = GetWordLeft() -- надо считывать слово на котором курсор
    local len_currword = string.len(currword)
    if len_currword < 1 then
        return false
    end
    
    --находим слово в файле, если есть альтернативы, то считываем и их
    user_list = {}
    abbr_list = {}
    for line in abb_file:lines() do
        local abbr=""
        x1,x2 = string.find(line, "^[^=]+=")
        if x1 then abbr=string.sub(line,x1,x2-1) end

        y1,y2 = string.find(string.upper(abbr), string.upper(currword),1,true)
        if y1==1 then
            local str_method = string.sub(line,string.len(abbr)+2)
            table.insert (abbr_list,line)-- добавляем аббревиатуру в табл.
            table.insert (user_list,str_method)-- добавляем строку соотв. аббревиатуре в табл.
        end
    end
    abb_file:close()
    -- демонстрируем окошко выбора
    local list_count = table.getn(abbr_list)
    if list_count > 0 then
        local s
        if show_abbr then
            s = table.concat(abbr_list, '•')
        else
            s = table.concat(user_list, '•')
        end
        if s ~= '' then
            local sep = editor.AutoCSeparator
            editor.AutoCSeparator = string.byte('•')
            editor:UserListShow(11, s)
            editor.AutoCSeparator = sep
            return true
        end
    end
    return false
end

-- Добавляем свой обработчик события OnChar
local old_OnChar = OnChar
function OnChar(char)
    if old_OnChar and old_OnChar(char) then
        return true
    end
    if char ~= ' ' and Abbrev() then return true end
    return false
end

-- Add user event handler OnUserListSelection
-- Обработка выбора из списка
local old_OnUserListSelection = OnUserListSelection
function OnUserListSelection(tp,sel_value)
    local result
    if old_OnUserListSelection then result = old_OnUserListSelection(tp,sel_value) end
    num=""
    for i,v in pairs (abbr_list) do
        if v==sel_value then
            num=i
            break
        end
    end
    for i,v in pairs (user_list) do
        if i==num then
            sel_value=v
            break
        end
    end
    if tp == 11 then
        if InsertProp(sel_value) then return true end
    end
    return result
end
[/more]
Автор: svs123456789, Отправлено:09:42 27-07-2007
mozers

Цитата:
Выбрось свой комп на помойку

ты считаешь что проблема в комп?
Автор: Shabba, Отправлено:11:25 27-07-2007
frs


Цитата:
abbrevlist.lua
-- Version: 1.2
-- аббревиатуры по начальным буквам (если недописанному до конца сокращению соответствуют несколько вариантов, то увидим все возможные)
-- символ < для html тегов (файл html.abbrev надо переименовать в hypertext.abbrev)


СПАСИБО!
Автор: iglezz, Отправлено:13:22 27-07-2007
На заметку нашим разработчикам:
не обрабатываются комментарии в переменной user.context.menu, получается такая вот ерунда.

(Использую 49ю сборку)
Автор: mozers, Отправлено:13:32 27-07-2007
frs
Цитата:
abbrevlist.lua
-- Version: 1.2
Сильно не критикуйте, я не программист и Lua вижу только второй день.
Круто
Все работает как задумано. Но ты же знаешь, что я не могу без пожеланий
- Хотелось бы чтобы скрипт срабатывал не по 1му символу, а по 2му. (для html - по 3му).(а то уж слишком назойливо он помогает)
- Изначально неверно подключен обработчик OnChar. В результате он мешает работе других скриптов, сидящих на этом эвенте. (Например раньше с помощью AutocompleteObject.lua я мог выбрать из длинного списка свойств и методов нужный не прокручивая список, а просто набирая первые буквы нужного метода).

Добавлено:
iglezz
Вроде бы так и должно быть по замыслу.
Все user.context.menu - 1 единственная строка, разбитая для наглядности на несколько с помощью символа \.
Автор: HSolo, Отправлено:18:23 27-07-2007
Для тех у кого нет клавиатуры с русскими буквами приходится извращаться.
Есть конечно виртуальные клавиатуры и прочее, но хочется чтобы все было в
одном месте (т.е. в любимом SciTE)
Вобщем вот код как есть, возможно пригодится таким же беднягам как я:


Код:

-- Модуль translit.lua предназначен для транслитерации английских букв в русские
-- Подключение можно сделать похожим образом:
---------------------------------------------------------------------------------
--~ command.name.84.*=Translitiration
--~ command.84.*=dofile $(SciteDefaultHome)\tools\translit.lua
--~ command.mode.84.*=subsystem:lua,savebefore:no
--~ command.shortcut.84.*=Alt+T

local translit = {['shh']="щ",
['jo']="ё", ['yo']="ё", ['zh']="ж", ['ii']="й", ['jj']="й", ['sh']="ш",
['ch']="ч", ['je']="э", ['ju']="ю", ['yu']="ю", ['ja']="я", ['ya']="я",
['a'] ="а", ['b'] ="б", ['v'] ="в", ['w'] ="в", ['g'] ="г",
['d'] ="д", ['e'] ="е", ['z'] ="з", ['i'] ="и", ['j'] ="й",
['k'] ="к", ['l'] ="л", ['m'] ="м", ['n'] ="н", ['o'] ="о", ['~']="ъ",
['p'] ="п", ['r'] ="р", ['s'] ="с", ['t'] ="т", ['u'] ="у", ['\"']="ъ",
['f'] ="ф", ['h'] ="х", ['x'] ="х", ['c'] ="ц", ['y'] ="ы", ['\'']="ь",
['Shh']="Щ",
['Jo']="Ё", ['Yo']="Ё", ['Zh']="Ж", ['Ii']="Й", ['Jj']="Й", ['Sh']="Ш",
['Ch']="Ч", ['Je']="Э", ['Ju']="Ю", ['Yu']="Ю", ['Ja']="Я", ['Ya']="Я",
['A'] ="А", ['B'] ="Б", ['V'] ="В", ['W'] ="В", ['G'] ="Г",
['D'] ="Д", ['E'] ="Е", ['Z'] ="З", ['I'] ="И", ['J'] ="Й",
['K'] ="К", ['L'] ="Л", ['M'] ="М", ['N'] ="Н", ['O'] ="О",
['P'] ="П", ['R'] ="Р", ['S'] ="С", ['T'] ="Т", ['U'] ="У",
['F'] ="Ф", ['H'] ="Х", ['X'] ="Х", ['C'] ="Ц", ['Y'] ="Ы"
}

local function TranslitIT(s)
local pos = 1
local outstr = ""
local res
local toFind

if string.len(s) == 0 then
return outstr
end

while (pos <= string.len(s)) do
for i = 3, 1, -1 do
toFind = string.sub(s, pos, pos + i - 1)
res = translit[toFind]
if res ~= nil then
outstr = outstr..res
pos = pos + string.len(toFind)
break
end
end
if res == nil then
outstr = outstr..toFind
pos = pos + 1
end
end
return outstr
end

local str = props['CurrentSelection']
if (str == '') then
str = editor:GetSelText()
end
if (str == '') then
str = editor:GetCurLine()
end

local result = TranslitIT(str)
editor:CharRight()
editor:LineEnd()
local sel_start = editor.SelectionStart + 1
local sel_end = sel_start + string.len(result)
editor:AddText('\n'..result)
editor:SetSel(sel_start, sel_end)
print(result)

Автор: juvaforza, Отправлено:11:09 28-07-2007
Шел мимо, возникли вопросы: SciTE поддержует utf ? И можно ли переключать кодировки?
Автор: chupakabra, Отправлено:14:16 28-07-2007
juvaforza, да
Автор: chupakabra, Отправлено:20:44 31-07-2007
Не могу понять, почему не срабатывает команда import в файле пользовательских настроек SciTEUser.properties:
import $(SciteDefaultHome)\languages\cmake.properties
Что я не так делаю?
Автор: mozers, Отправлено:21:24 31-07-2007
chupakabra
Команда import подразумевает что импортироваться будут файлы .properties расположенные в каталоге SciTE, поэтому лишние разъяснения только сбивают эту команду с толку.
Надо писать так:
Код:
import languages\cmake

Автор: chupakabra, Отправлено:21:34 31-07-2007
Это тоже не работает. В SciTEGlobal.properties - работает, в SciTEUser.properties - нет.
Автор: mozers, Отправлено:23:21 31-07-2007
В случае с SciTEUser.properties (если он находится в подкаталоге SciTE - как в сборке) путь languages\cmake неверен.
Тут, по идее, надо бы писать так:
Код:
import ..\languages\cmake
но не понимает эта убогая команда такой путь
Автор: frs, Отправлено:06:03 01-08-2007
Скрипт добавляющий выделенный код в файл аббревиатур для данного лексера.
На всякий случай сохраните файлы аббревиатур перед использованием скрипта. Имя аббревиатуры задается в диалоге.

MakeAbbrev.lua

Код:
-- add selected text to SciTE Abbreviation, enter the abbreviature in a dialog
-- добавляем выделенный текст в аббревиатуры данного языка, задать аббревиатуру можно в диалоговом окне
-- Version: 1.01
-- Autor: frs
---------------------------------------------------
local function MakeAbbrev()
    
local sel_text = editor:GetSelText()
    
if string.len(sel_text)>=10 then --ограничим минимум длины строки для аббревиатуры
        
local x1,x2=string.find(sel_text,"%w+%S")
        
if x1 and x2 then
            local
key=string.sub(sel_text,x1,x2)
            
props["1"] = key
            if scite.ShowParametersDialog("Enter abbr for code:") then
                
key=props["1"]
           
else
                return
            end
            
sel_text=string.gsub(sel_text,"\\","\\\\")
            
--~ sel_text=string.gsub(sel_text,"\r\n","\\r\\n")
            
sel_text=string.gsub(sel_text,"\n","\\n")
            
sel_text=string.gsub(sel_text,"\r","\\r")
            
sel_text=string.gsub(sel_text,"\t","\\t")
            
local file=(props["SciteDefaultHome"].."\\abbrev\\"..editor.LexerLanguage..".abbrev")
            
local abb_file =io.open(file)
            
if abb_file~=nil then
                
abb_file:close()
                
io.input(file)
                
t=io.read('*a').."\r\n"
            
end
            
io.output(file)
            
if t==nil then t="" end
            
io.write(t..key.."="..sel_text)
            
io.close()
        
end
    end
end

MakeAbbrev()

Автор: vladvro, Отправлено:11:47 01-08-2007
mozers
Цитата:

Код:
import ..\languages\cmake

но не понимает эта убогая команда такой путь

зато понимает такой:

Код:
import ..\languages\cmake.properties

Автор: DeadMorozBLR, Отправлено:17:25 01-08-2007
Скажите, а не планируется ли когда-нибудь поддержка лексера для Smarty либо в официальной, либо в русской сборке? Уж очень не хватает
Автор: vladvro, Отправлено:10:13 02-08-2007
DeadMorozBLR
Цитата:
а не планируется ли когда-нибудь поддержка лексера для Smarty

а Smarty это что?
Автор: chupakabra, Отправлено:14:23 02-08-2007
vladvro
Вот это наверное.
Автор: nullxxx, Отправлено:14:32 03-08-2007
А может ли(как?) SciTE искать закрывающий тег HTML, если курсор стоит на открывающем или наоборот, по закрывающему тегу найти открывающий?


Если нет, то реально ли такое написать на Lua?



1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17 / 18 / 19 / 20 / 21 / 22 / 23 / 24 / 25 / 26 / 27 / 28 / 29 / 30 / 31 / 32 / 33 / 34 / 35 / 36 / 37 / 38 / 39 / 40 / 41 / 42 / 43 / 44 / 45 / 46 / 47 / 48 / 49 / 50 / 51 / 52 / 53 / 54 / 55 / 56 / 57 / 58 / 59 / 60 / 61 / 62 / 63 / 64 / 65 / 66 / 67 / 68 / 69 / 70 / 71 / 72 / 73 / 74 / 75 / 76 / 77 / 78 / 79 / 80 / 81 / 82 / 83 / 84 / 85 / 86 / 87 / 88 / 89 / 90 / 91 / 92 / 93 / 94 / 95 / 96 / 97 / 98 / 99 / 100 / 101 / 102 / 103 / 104 / 105 / 106 / 107 / 108 / 109 / 110 / 111 / 112 / 113 / 114 / 115 / 116 / 117 / 118 / 119 / 120 / 121 / 122 / 123 / 124 / 125 / 126 / 127 / 128 / 129 / 130 / 131 / 132 / 133 / 134 / 135 / 136 / 137 / 138 / 139 / 140 / 141 / 142 / 143 / 144 / 145 / 146 / 147 / 148 / 149 / 150 / 151 / 152 / 153 / 154 / 155 / 156 / 157 / 158 / 159 / 160 / 161 / 162 / 163 / 164 / 165 / 166 / 167 / 168 / 169 / 170 / 171 / 172 / 173 / 174 / 175 / 176 / 177 / 178 / 179 / 180 / 181 / 182 / 183 / 184 / 185 / 186 / 187 / 188 / 189 / 190 / 191 / 192 / 193 / 194 / 195 / 196 / 197 / 198 / 199 / 200 / 201 / 202 / 203 / 204 / 205 / 206 / 207 / 208 / 209 / 210 / 211 / 212 / 213 /
SciTE © 2004 - 2011