Ru-Board.club
← Вернуться в раздел «Программы»

» SciTE - Open Source Text Editor for Windows & Linux

Автор: Midas
Дата сообщения: 14.03.2007 17:26
mozers

Цитата:
атрибут - не более чем условность

Гм... Смысл тогда в аттрибуте ? Все программы которые пишут в RO файлы
сначала снимают, затем устанавливают аттрибуты.
Вопрос (для снятия/установки аттр.) знающим больше меня в LUA: Как узнать установлен ли бит в числе (и как установить какой-то бит) ?
Автор: codewarlock1101
Дата сообщения: 14.03.2007 22:14
Midas
Предлагаю использовать дла снятия ридонли вбс-скрипт. который запускается из луа (плохо что только решение это не кроссплатформенное)
Автор: mimir
Дата сообщения: 15.03.2007 11:44
Я почему-то считал что при установки Scite файл пользовательских настроек не переписываеться, ан нет. Может стоит его вообще убрать. На то они и пользовательские чтобы их писал только пользователь.

Цитата:
Как узнать установлен ли бит в числе (и как установить какой-то бит) ?

Вот набросал. Я сам не очень в LUA. Там нет проверок на границы, да и с отр. числами не очень.

Цитата:
function ToBin(Num)
local bin_n={};
local i=1;
while (Num>0)do
bin_n[ i ] = math.fmod (Num , 2);
Num = math.floor(Num / 2);
i = i + 1;
end;
return bin_n;
end;

function IsSetBit(Num, Bit)
local bin = ToBin(Num);
if( table.getn(bin) <= Bit )then
return false;
end;
return (bin[ Bit+1 ]==1);
end;

function SetBit(Num, Bit)
if(IsSetBit(Num, Bit))then
return Num;
end;
return Num + 2^Bit;
end

function ResetBit(Num, Bit)
if(IsSetBit(Num, Bit))then
return Num - 2^Bit;
end;
return Num;
end

Автор: vladvro
Дата сообщения: 15.03.2007 14:41

Цитата:
Как узнать установлен ли бит в числе (и как установить какой-то бит) ?

предлагаю другой вариант решения, для меня правда C не родной язык, но вроде работает правильно.

тест:
Код: local i = 0
i = math.setbit(i, 4, 1)
print(i, math.getbit(i, 4))
i = math.setbit(i, 4, 0)
print(i)

--- результат:
16 1
0
Автор: Midas
Дата сообщения: 15.03.2007 15:01

Цитата:
новый AutocompleteObject.lua (version 1.3) ломается при вводе символа %

Возможное решение проблемы:
AutocompleteObject.lua: 53
Заменить

Код:
if char ~= " " then
Автор: mimir
Дата сообщения: 15.03.2007 16:01

Цитата:
предлагаю другой вариант решения, для меня правда C не родной язык, но вроде работает правильно

Мне кажется, что код не критичный по времени стоит писать на уровне скриптов, если это конечно возможно, но если хочется реализовать в виде С-функции то стоит задуматься о своей библиотеки. LUA позволяет очень просто подключать библиотеки написаные в виде DLL. Это позволяет во первых избавиться от изменения кода, а во вторых использовать эти функции не только в Scite, но в том числе и для отладки скриптов сторонними утилитами.
Например я создал библиотеку batlib.dll куда поместил функции

Цитата:
io_exec
io_msgbox
io_getfileattr
io_setfileattr

Для подключения этой библиотеки достаточно просто написать require('batlib');
Для использования можно batlib.exec , a если хочеться именно через библиотеку os то можно сделать загрузчик который грузит DLL и перекидывает функции в нужную таблицу.
Правда я пользуюсь LUA 5.1 (для нее и собирал библиотеку) а там были изменения. Вроде в 5.0 загружать DLL можно только через LoadLib.
А кстати еще не было перехода в Scite на lau 5.1 ?


Добавлено:
Вот скрипт для обработки атрибутов файла в виде таблицы.
Атрибуты можно добовлять по вкусу.


Цитата:
function SetBitValue ( Num, Bit, val )
if(val == '1' or val == 1 or val == true)then
return SetBit ( Num, Bit );
else
return ResetBit(Num, Bit);
end;
end;

function getfileattr_ex(FileName)
local attr_i = os.getfileattr(FileName);
local attr = {};
attr.ro = IsSetBit(attr_i,0);
attr.hide = IsSetBit(attr_i,1);
return attr;
end;

function P.setfileattr_ex(FileName, attr)
local attr_i = os.getfileattr(FileName);

if(attr.ro ~= nil) then
attr_i = SetBitValue(attr_i,0,attr.ro);
end;

if(attr.hide ~= nil) then
attr_i = SetBitValue(attr_i,1,attr.hide);
end;

os.setfileattr(FileName,attr_i);
return attr;
end;


пример

Цитата:
--получить атрибуты
attr = getfileattr_ex([[c:\test.txt]]);

attr.ro = true; -- Установить
attr.hide = nil; -- Не менять
setfileattr_ex([[c:\test.txt]],attr);



Автор: vladvro
Дата сообщения: 15.03.2007 17:17
это все хорошо, вот только главной проблемы это не лечит, если функция os.getfileattr(FileName) возвращает не верные данные, число 4294967295 = 2^32-1, т.е. все биты в 1.

Midas
откуда взялось число 2080 для снятия атрибутов?
Автор: mimir
Дата сообщения: 15.03.2007 17:36
Это очень похоже на ошибку. У меня это значение выдаеться при отсутствии файла.


Цитата:
The GetFileAttributes function retrieves a set of FAT file system attributes for a specified file or directory
*****
If the function succeeds, the return value contains the attributes of the specified file or directory.

If the function fails, the return value is INVALID_FILE_ATTRIBUTES.


Цитата:
#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)




Добавлено:
вроде это то что нужно. У меня стоит только FAT пожтому не могу тестировать.

Цитата:
The GetFileAttributes function retrieves a set of FAT file system attribute information. GetFileAttributesEx can obtain other sets of file or directory attribute information. Currently, GetFileAttributesEx retrieves a set of standard attributes that is a superset of the FAT file system attribute information.





Добавлено:

Цитата:
void push_lasterr(lua_State *L, LPTSTR lpszFunction) {
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );

lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR)lpszFunction)+40)*sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
    
    lua_pushstring(L,(LPTSTR)lpDisplayBuf);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
}

static int l_getfileattr (lua_State *L) {
    const char*FN = luaL_checkstring(L,-1);
    WIN32_FILE_ATTRIBUTE_DATA fad;
    if(0==GetFileAttributesEx(FN,GetFileExInfoStandard ,&fad)){
        lua_pushnil(L);
        push_lasterr(L,"\"getfileattr\"");
        return 2;
    }
    lua_pushnumber(L, fad.dwFileAttributes);
    return 1;
}

static int l_setfileattr (lua_State *L) {
    const char *FN = luaL_checkstring(L,-2);
    DWORD attr = luaL_checkint(L,-1);
    if(0 == SetFileAttributes(FN, attr)){
        lua_pushnil(L);
        push_lasterr(L,"\"setfileattr\"");
        return 2;
    }
    lua_pushinteger(L, 1);
    return 1;
}

Автор: vladvro
Дата сообщения: 16.03.2007 11:20
mimir
Цитата:
Это очень похоже на ошибку. У меня это значение выдаеться при отсутствии файла.

ты оказался прав на все 100%
вот что теперь выдает мне скрипт:
Цитата:
> "getfileattr" failed with error 2: Не удается найти указанный файл.

да у меня не FAT, а так же как и у mozers NTFS, и такое происходит стабильно на вновь созданный файл с новым именем.

с кодом пришлось немного повозиться:
1. не нашлось определения для StringCchPrintf, я добавил <strsafe.h>, но как я уже и говорил, я в С не силен, т.ч. если я не прав, то поправь.

2. выдало предупреждение и не захотело линковаться с функцией lua_pushinteger, я заменил ее на lua_pushnumber.

3. дописал скрипт ROWrite.lua:
Код:     -- сохраним текущии, затем снимем все аттрибуты
    local FileAttrNumber, err = os.getfileattr(FN)
    if (FileAttrNumber == nil) then
        print("> "..err)
        props['FileAttrNumber'] = 32 + iif(string.find(FileAttr,'R'),1,0) + iif(string.find(FileAttr,'H'),2,0) + iif(string.find(FileAttr,'S'),4,0)
    else
        props['FileAttrNumber'] = FileAttrNumber
    end
    os.setfileattr(FN, 2080)
Автор: mimir
Дата сообщения: 16.03.2007 13:23
Я использую для написагия скриптов lua.exe ( версия 5.1 ).
И все собирал и проверял именно на нем.
Дополнил свою BatLib.DLL новыми функциями и написал тестовый скрипт.

Код: require ("batlib");

res,err = batlib.getfileattr([[test.txt]])
print (batlib.tooem(res), batlib.tooem(err));

res,err = batlib.setfileattr([[test.txt]],32)
print (batlib.tooem(res), batlib.tooem(err));
Автор: mozers
Дата сообщения: 17.03.2007 00:22
Корректное исправление ошибки с % для AutocompleteObject.lua:
Код: if char ~= " " then
-- props["scite.lexer.name"] - value set script lexer_name.lua
if string.find(props["autocomplete."..props["scite.lexer.name"]..".start.characters"], char, 1, 1) == nil then
return false
end
end
Автор: vladvro
Дата сообщения: 17.03.2007 11:13
mimir
Цитата:

Цитата: дописал скрипт ROWrite.lua:
А зачем? ИМХО лучше нормально сделать возврат сообщения об ошибки.
Автор: mimir
Дата сообщения: 18.03.2007 08:29

Цитата:
Цитата:ЗЫ. А как выделять текст, чтоб он подсвечивался как LUA (ну типа local, if ...)?

не понял вопроса, выделять где?


Да я в форуме говорю. Когда посты со скриптами делаешь. Увидел у тебя подсветку и тоже захотел.
Извините, что ввел в заблуждение.

Удачи!
Автор: mozers
Дата сообщения: 18.03.2007 10:34
vladvro
Мне тоже интересно
Лично я пользуюсь плагином R2 для Maxthon - очень сильно упрощает офрмление постов, есть предпросмотр и куча других фич... Но автоматом раскрашивать код он не умеет.

ALL
Задача: Как определить включен тулбар в данный момент или нет? Я полагал, что при включении тулбара изменяется содержимое ключа toolbar.visible... Но на поверку оказалось что - нет
Аналогичная ситуация и с другими элементами интерфейса - как определить текущие установки пользователя - неясно ...
Автор: vladvro
Дата сообщения: 19.03.2007 10:37
mimir, mozers
Цитата:
Да я в форуме говорю. Когда посты со скриптами делаешь. Увидел у тебя подсветку и тоже захотел.

написал луашный скрипт в скайте [more]
Код: local STYLES = {
[1] = {color="008000"},
[2] = {color="008000"},
[4] = {color="AC00A9"},
[5] = {color="0000DF"},
[6] = {color="9999CC"},
[7] = {color="9999CC"},
[10] = {color="FF0000"},
[13] = {color="0080C0"},
[14] = {color="8000FF"},
[15] = {color="0080C0"},
[16] = {color="660000"},
[17] = {color="B35900"},
[18] = {color="408080"},
[19] = {color="AAAA00"},
}

local new = ""
local text = editor:GetSelText()
local start = editor.SelectionStart - 1
local len = string.len(text)
local bold,color = false,nil
for i = 1, len do
local sid = scite.SendEditor(SCI_GETSTYLEAT,start+i)
local style = STYLES[sid]
if style == nil then
if color ~= nil then
new = new.."[/color]"
color = nil
end
if bold then
new = new.."[/b]"
bold = false
end
else
if color ~= style.color and color ~= nil then
new = new.."[/color]"
end
if bold and not style.bold then
new = new.."[/b]"
bold = false
end
if not bold and style.bold then
new = new.."[b]"
bold = true
end
if color ~= style.color then
new = new.."[color="..style.color.."]"
color = style.color
end
end
new = new..string.sub(text,i,i)
end
-- update
local ss = editor.SelectionStart
editor:ReplaceSel(new)
editor:SetSel(ss, ss+string.len(new))
Автор: mozers
Дата сообщения: 19.03.2007 13:15
vladvro
Цитата:
написал луашный скрипт в скайте


Цитата:
что такое Maxthon?
Maxthon Плагины

Цитата:
Цитата:как определить текущие установки пользователя - неясно
дописать код самого редактора
"Дописать" - это радикально, но я думаю, дико волокитно. Я нашел в SciTEDirector такую хрень
Цитата:
enumproperties:dyn|local|user|base|embed - Перечислить все параметры в заданном окружении.
Попробовал в работе - нефига не понял что за чушь эта функция выдает Мож кто объяснит как ей пользоваться?

ALL
Как сделать видимым выделение в редакторе, если окно SciTE неактивно?
ОЧЕНЬ НАДО.
Автор: vladvro
Дата сообщения: 20.03.2007 17:43
mozers
Цитата:
"Дописать" - это радикально, но я думаю, дико волокитно. Я нашел в SciTEDirector такую хрень
согласен волокитно, но полагаю, что другого вырианта не дано
а найденная "хрень" позволяет получить содержимое списков props, propsLocal, propsUser, propsBase, propsEmbed, propsAbbrev,
но в интерфейсе Луа она не реализована, с другой стороны почти все это доступно через props[], т.к. в скайте заложена следующая схема вложенного поиска по спискам:
props -> propsLocal -> propsUser -> propsBase -> propsEmbed
Автор: Perchilla
Дата сообщения: 22.03.2007 11:29
Приветствую всех! Подскажите пожалуйста, можно ли так вывернуться с командной строкой, чтобы открыть файл в отдельной вкладке, если scite уже запущен?
Автор: mozers
Дата сообщения: 22.03.2007 12:06
Perchilla
Я полагаю, что ты - описАлся. Не в отдельной вкладке (он там открывается по умолчанию), а в отдельном окне? Если я угадал, то так:
Код: scite.exe -property:check.if.already.open=0 "%1"
Автор: codewarlock1101
Дата сообщения: 22.03.2007 12:15
переименование файла из скайта

Код:
##rename.lua:

local nnc
local fp=props['FilePath']
props["1"]=props['FileNameExt']
props["2"]=''
props["3"]=''
props["4"]=''
if scite.ShowParametersDialog("Rename file to...") then
nnc=props["1"]
if nnc~='' then
string.gsub(fp,'\(.+\\\)[^\\]*', function (a) nnc=a..nnc scite.MenuCommand('IDM_CLOSE')
os.rename(fp,nnc) scite.Open(nnc) end)
end
end


##SciTEGlobal.properties:
command.parent.120=30
command.name.120.*=Rename
command.120.*=dofile D:\warez\SciTE\tools\rename.lua
command.mode.120.*=subsystem:lua,savebefore:no
command.shortcut.120.*=Shift+F6

Автор: mozers
Дата сообщения: 22.03.2007 12:27
ALL
Сочинил тут скриптик, не то чтобы - шедевр, но идея дико нравится
Код: // Registry Jump
// Version: 1.0
// Autor: mozers™
// ------------------------------------------------
// Открывает выделенную ветвь в редакторе реестра
// Понимает записи вида:
// HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
// HKLM\SYSTEM\CurrentControlSet\Control
// HKLM\\SYSTEM\\CurrentControlSet\\Control
// Подключение:
// command.name.78.*=Registry Jump
// command.78.*=wscript "$(SciteDefaultHome)\tools\RegJump.js"
// command.input.78.*=$(CurrentSelection)
// command.mode.78.*=subsystem:windows,replaceselection:no,savebefore:no,quiet:yes
// ------------------------------------------------

var key = WScript.StdIn.ReadAll();
if (key == "") {
WScript.Quit();
}

key = key.replace(/^HKLM\\/,'HKEY_LOCAL_MACHINE\\');
key = key.replace(/^HKCR\\/,'HKEY_CLASSES_ROOT\\');
key = key.replace(/^HKCU\\/,'HKEY_CURRENT_USER\\');
key = key.replace(/\\\\/g,'\\');
key = "My Computer\\" + key

var WshShell = new ActiveXObject("WScript.Shell");
WshShell.RegWrite ('HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit\\Lastkey',key,'REG_SZ');
WshShell.Run('regedit', 1, false);
Автор: Perchilla
Дата сообщения: 22.03.2007 13:07

Цитата:
Я полагаю, что ты - описАлся. Не в отдельной вкладке (он там открывается по умолчанию), а в отдельном окне?

Я использую сборку от http://gisdeveloper.tripod.com/scite.html.
Там по умолчанию открывается в новом окне. В русской сборке как - то сделали открытие в новой вкладке, но я пока не готов пересесть на неё . Вот и спрашиваю, как сделать.
Автор: mozers
Дата сообщения: 22.03.2007 13:42
Perchilla
Цитата:
В русской сборке как - то сделали открытие в новой вкладке, но я пока не готов пересесть на неё
Пересаживайся и увидишь как много чего сделали окромя этого
Код: # Если SciTE открыт, то файлы загружаются в существующую копию программы
check.if.already.open=1
Автор: vladvro
Дата сообщения: 23.03.2007 13:06
нашел сегодня ошибку - скайт вылетает при превышении некоторого числа пунктов меню тулз.
для исправления меняем в файле SciTEBuffers.cxx
строку 1051:
} UMenu[100];
на
} UMenu[toolMax];
Автор: mozers
Дата сообщения: 23.03.2007 17:44
И я вот тоже нашел ошибку
Команда saveas:<path> постоянно выкатывает диалог сохранения файла, хотя, по идее (SciTEBase.cxx), этот диалог должен появлятся только при отсутствии параметра (нового имени файла).
Вот если-б кто поправил это дело, то переименовывать файлы можно было бы на порядок более аккуратно (без изменения позиции закладки)...
Автор: vladvro
Дата сообщения: 25.03.2007 12:40
новый функционал для скайта - перемещение табов (вкладок) [more]
добавляем в файл SciTEBase.h
строка 284:
Код: void ShiftTo(int index_from, int index_to); //!-add-[TabsMoving]
Автор: mozers
Дата сообщения: 25.03.2007 16:39
Обновил SciTE Helper v.0.5
Версия 0.5 сильно отличается от предыдущих. Появилось много новых методов и свойств. Стало возможным непосредственно выполнять конструкции на LUA и получать результаты.
Так, например, стало возможным реализовать сохранение текущих установок пользователя при завершении работы SciTE:
[more]save_settings.lua
Код: -- Save SciTE Settings
-- Version: 1.0
-- Autor: mozers™
---------------------------------------------------
-- При завершении работы SciTE (через меню или по шорткату)
-- cохраняет размер и положение окна SciTE и другие текущие установки, измененные через меню
-- Для работы требуется скрипт tools\save_settings.js
-- Подключение:
-- Добавьте в SciTEStartup.lua строку
-- require (props["SciteDefaultHome"].."\\tools\\save_settings.lua")
-- Задайте в файле .properties шорткаты для завершения работы SciTE
-- user.shortcuts=\
-- Alt+X|IDM_QUIT|\
-- Alt+F4|IDM_QUIT|
---------------------------------------------------

local function SaveSettings()
if props['save.session'] == '1' then
os.exec('wscript.exe "'..props["SciteDefaultHome"]..'\\tools\\save_settings.js"')
os.msgbox ('Your settings are successfully saved!')
end
end

local function fNOT (val)
if val=='0' then
return '1'
elseif val=='1' then
return '0'
end
end

-- Добавляем свой обработчик события OnMenuCommand
local old_OnMenuCommand = OnMenuCommand
function OnMenuCommand(cmd, source)
if old_OnMenuCommand then old_OnMenuCommand(cmd, source) end
if cmd == 140 then -- IDM_QUIT
SaveSettings()
elseif cmd == 408 then -- IDM_VIEWTOOLBAR
props['toolbar.visible'] = fNOT(props['toolbar.visible'])
elseif cmd == 410 then -- IDM_VIEWTABBAR
props['tabbar.visible'] = fNOT(props['tabbar.visible'])
elseif cmd == 411 then -- IDM_VIEWSTATUSBAR
props['statusbar.visible'] = fNOT(props['statusbar.visible'])
elseif cmd == 402 then -- IDM_VIEWSPACE
props['view.whitespace'] = fNOT(props['view.whitespace'])
elseif cmd == 403 then -- IDM_VIEWEOL
props['view.eol'] = fNOT(props['view.eol'])
elseif cmd == 404 then -- IDM_VIEWGUIDES
props['view.indentation.guides'] = fNOT(props['view.indentation.guides'])
elseif cmd == 407 then -- IDM_LINENUMBERMARGIN
props['line.margin.visible'] = fNOT(props['line.margin.visible'])
elseif cmd == 413 then -- IDM_OPENFILESHERE
props['check.if.already.open'] = fNOT(props['check.if.already.open'])
elseif cmd == 401 then -- IDM_SPLITVERTICAL
props['split.vertical'] = fNOT(props['split.vertical'])
elseif cmd == 414 then -- IDM_WRAP
props['wrap'] = fNOT(props['wrap'])
elseif cmd == 415 then -- IDM_WRAPOUTPUT
props['output.wrap'] = fNOT(props['output.wrap'])
end
end
Автор: mozers
Дата сообщения: 26.03.2007 07:18
C некоторых пор (после доработки [LowerUpperCase]) при компиляции SciTE постоянно получаю предупреждение:
Код: ..\src\Document.cxx(39) : warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
..\src\Document.cxx(44) : warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
Автор: vladvro
Дата сообщения: 26.03.2007 13:52
Обновил скрипт раскраски кода для форума [more]
скрипт по раскраске кода для форума, примером его работы является сам этот пост

code-poster.lua
Код: [no]-- Code Poster[/no]
[no]-- Version: 1.4.4[/no]
[no]-- Autor: VladVRO[/no]
[no]---------------------------------------------------[/no]
[no]-- Description:[/no]
[no]-- конвертирует выделенный текст или весь файл в форматированный текст форума, используя[/no]
[no]-- синтаксическую подсветку самого редактора (номер стиля) и таблицу цветов STYLES.[/no]
[no]-- корректно работает для: C/C++, CSS, JavaScript, Lau, VB, VBscript, Properties[/no]

[no]-- Для подключения добавьте в свой файл .properties следующие строки:[/no]
[no]-- command.name.125.*=Преобразовать в код для форума[/no]
[no]-- command.125.*=dofile $(SciteDefaultHome)\tools\code-poster.lua[/no]
[no]-- command.mode.125.*=subsystem:lua,savebefore:no[/no]

[no]-- ремарки по использованию:[/no]
[no]-- - в скрипте используется функция editor.LexerLanguage (сборка Ru-Board,[/no]
[no]-- http://scite.ruteam.ru/scite/sborki/scite-ru-board)[/no]
[no]---------------------------------------------------[/no]

local STYLES = {
comment = {color=[no]"008000"[/no], no=true},
number = {color=[no]"AC00A9"[/no]},
string = {color=[no]"9999CC"[/no], no=true},
preproc = {color=[no]"7F7F00"[/no]},
operator = {color=[no]"FF0000"[/no]},
keyword = {color=[no]"0000DF"[/no]},
keyword2 = {color=[no]"0080C0"[/no]},
keyword3 = {color=[no]"8000FF"[/no]},
keyword4 = {color=[no]"FF8000"[/no]},
keyword5 = {color=[no]"660000"[/no]},
keyword6 = {color=[no]"004080"[/no]},
keyword7 = {color=[no]"408080"[/no]},
keyword8 = {color=[no]"AAAA00"[/no]},
}
STYLES.default = {
[1] = STYLES.comment,
[2] = STYLES.comment,
[3] = STYLES.comment,
[4] = STYLES.number,
[5] = STYLES.keyword,
[6] = STYLES.string,
[7] = STYLES.string,
[8] = STYLES.string,
[9] = STYLES.preproc,
[10] = STYLES.operator,
[13] = STYLES.keyword2,
[14] = STYLES.keyword3,
[15] = STYLES.keyword4,
[16] = STYLES.keyword5,
[17] = STYLES.keyword6,
[18] = STYLES.keyword7,
[19] = STYLES.keyword8,
}
STYLES.others = {
[1] = STYLES.comment,
[2] = {color=[no]"0080C0"[/no], no=true},
[3] = STYLES.operator,
[4] = STYLES.preproc,
[5] = STYLES.keyword,
}
STYLES.props = STYLES.others
STYLES.vb = {
[1] = STYLES.comment,
[2] = STYLES.number,
[3] = STYLES.keyword,
[4] = STYLES.string,
[5] = STYLES.preproc,
[6] = STYLES.operator,
[8] = STYLES.number,
[10] = STYLES.keyword2,
[11] = STYLES.keyword3,
[12] = STYLES.keyword4,
}
STYLES.vbscript = STYLES.vb
STYLES.css = {
[1] = STYLES.keyword,
[3] = STYLES.keyword2,
[5] = STYLES.operator,
[6] = STYLES.keyword3,
[8] = STYLES.string,
[9] = STYLES.comment,
[10] = STYLES.number,
[12] = STYLES.preproc,
[13] = STYLES.string,
[14] = STYLES.string,
[15] = STYLES.keyword4,
[16] = STYLES.keyword5,
}
STYLES.cpp = {
[1] = STYLES.comment,
[2] = STYLES.comment,
[3] = STYLES.comment,
[4] = STYLES.number,
[5] = STYLES.keyword,
[6] = STYLES.string,
[7] = STYLES.string,
[8] = STYLES.string,
[9] = STYLES.preproc,
[10] = STYLES.operator,
[13] = STYLES.keyword4,
[14] = STYLES.keyword3,
[15] = STYLES.comment,
[16] = STYLES.keyword2,
[17] = STYLES.comment,
[18] = STYLES.comment,
}
STYLES.cppnocase = STYLES.cpp

local LEXSTYLES
local lex = editor.LexerLanguage
if lex == nil then
LEXSTYLES = STYLES.others
else
LEXSTYLES = STYLES[lex]
if LEXSTYLES == nil then
LEXSTYLES = STYLES.default
end
end

local new = [no]""[/no]
local text = editor:GetSelText()
local line
if text == [no]""[/no] then
editor:SelectAll()
text = editor:GetSelText()
elseif string.len(text) ~= editor.Length then
line = scite.SendEditor(SCI_LINEFROMPOSITION, editor.SelectionStart) + 1
end
local pos = editor.SelectionStart

local text = text..[no]"\n"[/no]
for str in string.gfind(text, [no]"([^\n]*)\n"[/no]) do
[no]-- format next line[/no]
local newstr = [no]""[/no]
local fin = [no]""[/no]
local len = string.len(str)
if string.sub(str,len,len) == [no]"\r"[/no] then
len = len - 1
str = string.sub(str,1,len)
fin = [no]"\r"[/no]
end
local style = LEXSTYLES[scite.SendEditor(SCI_GETSTYLEAT, pos)]
local i0,i = 1,1
while i <= len do
local nstyle
repeat
pos = pos + 1
i = i + 1
nstyle = LEXSTYLES[scite.SendEditor(SCI_GETSTYLEAT, pos)]
until nstyle ~= style or i > len
local txt = string.sub(str,i0,i-1)
i0 = i
txt = string.gsub(txt, string.char(9), [no]" "[/no]) [no]-- change tab to spaces[/no]
if style ~= nil then
if style.no then
txt = [no]"[n[/no][no]o]"[/no]..string.gsub(txt,[no]"%[(/*)no%]"[/no],[no]"[%1n[/n[/no][no]o][n[/no][no]o]o]"[/no])..[no]"[/n[/no][no]o]"[/no]
end
if style.color then
txt = [no]"[color="[/no]..style.color..[no]"]"[/no]..txt..[no]""[/no][/color]
end
end
newstr = newstr..txt
style = nstyle
end
[no]-- append line to formated text[/no]
if new ~= [no]""[/no] then new = new..[no]"\n"[/no] end
new = new..newstr..fin
pos = pos + string.len(fin) + 1
end

[no]-- add remarks[/no]
local header = [no]""[/no]
if props[[no]"FileNameExt"[/no]] ~= [no]""[/no] then
header = [no]""[/no]..props[[no]"FileNameExt"[/no]]..[no]" "[/no]
if line ~= nil then
header = header..[no]" строка "[/no]..line..[no]" "[/no]
[no]-- remove empty line after code block[/no]
local l = string.len(new)
if string.sub(new,l,l) == [no]"\n"[/no] then
if string.sub(new,l-1,l-1) == [no]"\r"[/no] then
new = string.sub(new,1,l-2)
else
new = string.sub(new,1,l-1)
end
end
end
end
local footer = [no]" Данный код внедрен в форум с помощью скрипта vladvro\n"[/no]
new = header..[no]"
Код: "[/no]
..new..[no]"
Автор: dB6
Дата сообщения: 26.03.2007 15:39
mozers
Цитата:
C некоторых пор (после доработки [LowerUpperCase]) при компиляции SciTE постоянно получаю предупреждение:
..
Понимаю, что это - не страшно, но может быть все таки можно поправить?

Попробуй сделать так:
return IsCharUpperA(ch)!=0;    //!-add-[LowerUpperCase]

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: LeechGet


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.