Ru-Board.club
← Вернуться в раздел «Тестирование»

» SciTE Ru-Board Edition

Автор: BioInfo
Дата сообщения: 10.06.2007 21:28
BioInfo

Цитата:
Хоть бы объяснил почему нет?... Много переделывать что ли?

Я бы сказал дохренища, а точнее всю работу props. Оно того точно стоит?
Дело в том что при обращении к какому либо значению в props если оно не найдено возвращается пустая строка.
Props не различает присутствие строки
какое_либо значение=
и ее отсутствие вообще, это считается одним и тем же.
По этому если задано
command.name.filepattern=
то считается что его нет.
Код всего редактора завязан на том, что если значение в props отсутствует то возвращается пустая строка.
Ферштейн?
Автор: mozers
Дата сообщения: 10.06.2007 22:18
Ферштейн ((
Автор: mozers
Дата сообщения: 11.06.2007 08:27
BioInfo
Цитата:
Может они сделали в новой версии, в предоставленных исходниках эта фича не работает.
Если имя команды не задано оно не создается в меню вообще и никак вообще не обрабатывается.
Неправда ваша. Вот этот
Код: command.name.21.*=
command.21.*=dostring print(props["FileNameExt"])
command.mode.21.*=subsystem:lua,savebefore:no
user.shortcuts=Alt+Shift+A|1121|
Автор: BioInfo
Дата сообщения: 11.06.2007 10:14
mozers

Цитата:
Неправда ваша

И точно не моя
Неверная часть моего поста:
Цитата:
Если имя команды не задано оно не создается в меню вообще и никак вообще не обрабатывается.

Проблема в том что меню tools в русской сборке перекрывает команды SCI_
Scintilla.h строка 43
Код: #define SCI_START 2000
Автор: mozers
Дата сообщения: 11.06.2007 23:54
Обновил Текущие исходники.
Все изменения присланы BioInfo. Изменений - до черта. Комментариев - никаких. Так что изучайте предыдущие посты и догадывайтесь сами...
При компиляции (Microsoft Visual Studio .NET 2003) не было ни одного ворнинга.

BioInfo
Цитата:
С помощью карты сделал подсказки для кнопок на панели инструментов
Нету подсказок
Точнее - есть только у тех первых 13 что были всегда.
Автор: BioInfo
Дата сообщения: 12.06.2007 01:26
mozers

Цитата:
Изменений - до черта. Комментариев - никаких

Да какие там нужны комментарии? Перелопатил код, поправлял совместимость (SubMenu и ToolBar), убрал филл проперти, убрал хайд, сделал чтобы работало как в оригинальной сборке (ToolsMax)
Коммент забыл добавить только в SciTEWin.cxx
[no]if (commandNum < 2000 || commandNum>IDM_TOOLS) { //-change-[ToolsMax][/no]
В общем ничего особенного - просто работа над ошибками (своими и чужими)

Цитата:
Нету подсказок

Чего-то товарищи не активные, значит будем внедрять без их ведома
У меня уже все готово, подсказки отображаются как следует. Попутно сделал, чтобы если не задан никакой тулбар, то отображается стандартный.
Товарищи, крепитесь! Добавил новую мегафичу!!! Новая функция в луа:
OnKeyDown(код нажатой клавиши, нажатый символ, состояние шифта/котрола/альта)
если возвращает true то обработка дальше не ведется, т.е. можно из скрипта запретить например нажатие любой клавиши вообще, или по своему обработать нажатие...
Короче простор для скриптописателей, сам вот уже насочинял кое что...
Поставлю все в комплекте
Автор: mozers
Дата сообщения: 12.06.2007 13:00
BioInfo
Цитата:
Да какие там нужны комментарии?
Ну вот теперь хотябы понятно что сделано...

Цитата:
Новая функция в луа:
OnKeyDown(код нажатой клавиши, нажатый символ, состояние шифта/котрола/альта)
У Мишеля Форала давно есть подобная. Я давно уже говорил о том что неплохобы выдрать его код в нашу сборку...
Совсем недавно Нейл согласился добавить его OnKey (а так же OnClose и OnDwellStart) в официальный дистрибутив.
Все идет к тому что Lua 5.1 будет таки включена в SciTE 1.74...
Выложить бы сейчас наши доработки - глядишь и включили бы что то в официал...
Нет, не могу - тут-недоделано, тут-недописано.
Русские описания фич надо дополнять, а про английский текст я вообще не говорю...
Автор: BioInfo
Дата сообщения: 12.06.2007 15:22
mozers

Цитата:
У Мишеля Форала давно есть подобная. Я давно уже говорил о том что неплохобы выдрать его код в нашу сборку...

Я не видел того что сделал Мишель, но самое главное что сделано в
OnKeyDown это анализируется "нажатый символ", по этому его можно
использовать вместо OnChar с той лишь разницей что OnChar возникает
уже после того как мы символ ввели, т.е. констатируется факт - OnChar
У меня же говорится что, нажат символ ДО того как он попадает в
редактор, да плюс к тому не все символы вызывают OnChar с OnKeyDown
таких проблем нет.
Еще одна особенность OnChar - возникает после того как снялось выделение у текста, по этому никак не понять был ли выделен текст или нет до нажатия, во всяком случае было проще написать OnKeyDown
Для тех кому совсем туго, поясняю на пальцах: символ '/' можно ввести
3 разными клавишами с клавиатуры, у этих клавиш соответственно разный
"код клавиши"
Короче - наипросторнейшее поле для скриптописателей!

Цитата:
Выложить бы сейчас наши доработки - глядишь и включили бы что то в официал...
Нет, не могу - тут-недоделано, тут-недописано.

Высылай что по коду не доделано, доделаю

З.Ы. Ну а все-таки, можно прикрепить первый пост в топике?

mozers

Цитата:
Нету подсказок

Критических замечаний по коду я так не дождался, так что исходники ушли прямо к тебе приватом.

Цитата:
Совсем недавно Нейл согласился добавить его OnKey в официальный дистрибутив.
...
самое главное что сделано в
OnKeyDown это анализируется "нажатый символ"

Ну и чтобы не быть голословным выкладываю первый скрипт основанный на этой фиче (будет доступно всем как только обновится наша сборка)
Итак, [more=наслаждайтесь...]smartcomment.lua
Код: [no]-- SciTE Smart comment[/no]
[no]-- Version: 2.4[/no]
[no]-- Autor: Dmitry Maslov[/no]
[no]---------------------------------------------------[/no]
[no]-- Веделяем текст нажимаем на клавиатуре символ [/no]
[no]-- с которого начинается комментарий и строка комментируется[/no]
[no]-- пример: выделить строку в cpp, нажать на клавишу * или /[/no]
[no]---------------------------------------------------[/no]
[no]-- Версия 2.4[/no]
[no]-- Поправлена обработка { в cpp[/no]
[no]---------------------------------------------------[/no]
[no]-- Версия 2.3[/no]
[no]-- Скрипт сделан полностью автономным[/no]
[no]---------------------------------------------------[/no]
[no]-- Версия 2.2[/no]
[no]-- Исправлен баг, если нажали не печатный символ[/no]
[no]-- то скрипт вел себя не предсказуемо[/no]
[no]---------------------------------------------------[/no]
[no]-- Версия 2.1[/no]
[no]-- Закрытие блочным комментирием во всех языках по первому [/no]
[no]-- символу блочного комментария во как загнул [/no]
[no]-- Благодарность mozers за подсказку в реализации.[/no]
[no]---------------------------------------------------[/no]
[no]-- Версия 2.0[/no]
[no]-- Автозакрытие скобок и текста в скобки[/no]
[no]-- Работает, если braces.autoclose=1 [/no]
[no]-- (параметр в файле SciTEGlobal.properties)[/no]
[no]-- Особая обработка { и } в cpp[/no]
[no]---------------------------------------------------[/no]
[no]-- Версия 1.0[/no]
[no]-- Обработка комментариев в cpp * и / (/**/ и //~ )[/no]
[no]-- Обработка коментариев в lua - ( -- )[/no]
[no]-- Обработка скобок в lua [ ( [[...]] )[/no]
[no]-- Обработка комментария в props # ( #~ )[/no]
[no]---------------------------------------------------[/no]

[no]-- позиция это начало строки (учитывая отступ)[/no]
local function IsLineStartPos(pos)
return (editor.LineIndentPosition[editor:LineFromPosition(pos)] == pos)
end

[no]-- Получить номер текущей строки[/no]
local function GetCurrLineNumber()
return editor:LineFromPosition(editor.CurrentPos);
end

[no]-- Получить отступ в троке[/no]
local function GetLineIndentation(num_line)
if num_line<0 then num_line=0 end
if num_line>=editor.LineCount then num_line=editor.LineCount-1 end
return editor.LineIndentation[num_line]/editor.Indent
end

[no]-- Возвращает текущий символ перевода строки[/no]
local function GetEOL()
local eol = [no]"\r\n"[/no]
if editor.EOLMode == SC_EOL_CR then
eol = [no]"\r"[/no]
elseif editor.EOLMode == SC_EOL_LF then
eol = [no]"\n"[/no]
end
return eol
end

[no]-- сделать текст шаблоном для поиска[/no]
[no]-- (фактически экранирование служебных символов)[/no]
local function makefind(text)
local strres=[no]''[/no]
local simbol
for i=1, string.len(text), 1 do
simbol = string.format([no]'%c'[/no], string.byte(text,i))
if ((simbol==[no]"("[/no])or(simbol==[no]"["[/no])or(simbol==[no]"."[/no])or(simbol==[no]"%"[/no])or
(simbol==[no]"*"[/no])or(simbol==[no]"/"[/no])or(simbol==[no]"-"[/no])or(simbol==[no]")"[/no])or
(simbol==[no]"]"[/no])or(simbol==[no]"?"[/no])or(simbol==[no]"+"[/no])) then
simbol=string.format([no]"%%%s"[/no],simbol)
end
strres = strres..simbol
end
return strres
end

[no]-- последний в строке ?[/no]
local function IsInLineEnd(num_line, text)
local endpos = editor.LineEndPosition[num_line];
if endpos>=string.len(text) and
string.find(editor:textrange(endpos-string.len(text), endpos), makefind(text)) then
return true
end
return false
end

[no]-- предыдущий символ позиции конец строки?[/no]
local function prevIsEOL(pos)
if (string.find(editor:textrange(pos-string.len(GetEOL()), pos),GetEOL())) then
return true
end
return false
end

[no]-- следующий символ позиции конец строки?[/no]
local function nextIsEOL(pos)
if (string.find(editor:textrange(pos, pos+string.len(GetEOL())),GetEOL())) then
return true
end
return false
end

[no]-- последний символ в строке - конец строки?[/no]
local function IsEOLlast(text)
[no]-- в луа конец строки всегда один символ[/no]
if string.find(text,GetEOL(),string.len(text)-1) then
return true
end
return false
end

local function StrimComment(commentbegin, commentend)
local text, lenght = editor:GetSelText()
local selbegin = editor.SelectionStart
local selend = editor.SelectionEnd
local b,e = string.find(text,makefind(commentbegin))
if (e and (string.byte(text, e+1) == 10 or string.byte(text, e+1) == 13)) then
e=e+1
end
if (e and (string.byte(text, e+1) == 10 or string.byte(text, e+1) == 13)) then
e=e+1
end
local b2,e2
if IsEOLlast(text) then
b2,e2 = string.find(text,makefind(commentend),
string.len(text)-string.len(commentend)-string.len(GetEOL()))
else
b2,e2 = string.find(text,makefind(commentend),
string.len(text)-string.len(commentend))
end
if (b2 and (string.byte(text, b2-1) == 10 or string.byte(text, b2-1) == 13)) then
b2=b2-1
end
if (b2 and (string.byte(text, b2-1) == 10 or string.byte(text, b2-1) == 13)) then
b2=b2-1
end
editor:BeginUndoAction()
if (b and b2) then
local add=[no]''[/no]
if (string.find(text,GetEOL(),string.len(text)-string.len(GetEOL()))) then
add = GetEOL()
end
text = string.sub(text,e+1,b2-1)
editor:ReplaceSel(text..add)
editor:SetSel(selbegin, selbegin+string.len(text..add))
else
if (editor:LineFromPosition(selend)==editor:LineFromPosition(selbegin)) then
editor:insert(selend, commentend)
editor:insert(selbegin, commentbegin)
editor:SetSel(selbegin, selend+string.len(commentbegin)+string.len(commentend))
else
local eolcount = 0
if (prevIsEOL(selend)) then
editor:insert(selend, commentend..GetEOL())
eolcount = eolcount + 1
else
editor:insert(selend, commentend)
end
if (prevIsEOL(selbegin)) then
editor:insert(selbegin, commentbegin..GetEOL())
eolcount = eolcount + 1
else
editor:insert(selbegin, commentbegin)
end
editor:SetSel(selbegin, selend+string.len(commentbegin)+string.len(commentend)+string.len(GetEOL())*eolcount)
end
end
editor:EndUndoAction()
return true
end

local function BlockComment()
local selbegin = editor.SelectionStart
editor:BeginUndoAction()
if (string.find(editor:textrange(selbegin-string.len(GetEOL()), selbegin),GetEOL())) then
scite.MenuCommand([no]"IDM_BLOCK_COMMENT"[/no])
editor:SetSel(selbegin, editor.SelectionEnd)
else
scite.MenuCommand([no]"IDM_BLOCK_COMMENT"[/no])
editor:SetSel(editor.SelectionStart, editor.SelectionEnd)
end
editor:EndUndoAction()
return true
end

local function BlockBraces(bracebegin, braceend)
local text, lenght = editor:GetSelText()
local selbegin = editor.SelectionStart
local selend = editor.SelectionEnd
local b,e = string.find(text,makefind(bracebegin))
local b2,e2
local add=[no]''[/no]
if IsEOLlast(text) then
b2,e2 = string.find(text,makefind(braceend),
string.len(text)-string.len(braceend..GetEOL()))
add = GetEOL()
else
b2,e2 = string.find(text,makefind(braceend),
string.len(text)-string.len(braceend))
end
editor:BeginUndoAction()
if (b and b2) then
text = string.sub(text,e+1,b2-1)
editor:ReplaceSel(text..add)
editor:SetSel(selbegin, selbegin+string.len(text..add))
else
editor:insert(selend - string.len(add), braceend)
editor:insert(selbegin, bracebegin)
editor:SetSel(selbegin, selend+string.len(bracebegin..braceend))
end
editor:EndUndoAction()
return true
end

local function GetIndexFindCharInProps(value, findchar)
if findchar then
local resIndex = string.find(props[value], makefind(findchar), 1)
if (resIndex~=nil) and (string.sub(props[value],resIndex,resIndex) == findchar) then
return resIndex
end
end
return nil
end

local function GetCharInProps(value, index)
return string.sub(props[value],index,index)
end

local function SmartComment(char)
if (editor.SelectionStart~=editor.SelectionEnd) then
[no]-- делаем проверку на блочный комментарий[/no]
if GetIndexFindCharInProps([no]'comment.block.'[/no]..editor.LexerLanguage, char) == 1 then
return BlockComment()
end
[no]-- делаем индивидуальную обработку по лексерам[/no]
if (editor.LexerLanguage == [no]'cpp'[/no]) then
if (char == [no]'*'[/no] ) then return StrimComment([no]'/*'[/no], [no]'*/'[/no]) end
end
if (editor.LexerLanguage == [no]'lua'[/no]) then
if (char == [no]'['[/no]) then return BlockBraces([no]'[['[/no],[no]']]'[/no]) end
end
[no]-- делаем обработку по автозакрытию текста скобками[/no]
if (props[[no]'braces.autoclose'[/no]]==[no]'1'[/no]) then
local brIdx = GetIndexFindCharInProps([no]'braces.open'[/no], char)
if (brIdx~=nil) then
local brClose = GetCharInProps([no]'braces.close'[/no], brIdx)
if (brClose~=nil) then
return BlockBraces(char, brClose)
end
end
end
[no]-- автозакрытие скобок[/no]
elseif (props[[no]'braces.autoclose'[/no]]==[no]'1'[/no]) then
[no]-- если следующий символ закрывающаяся скобка[/no]
[no]-- и мы ее вводим, то ввод проглатываем[/no]
local nextSimbol = string.format([no]"%c"[/no],editor.CharAt[editor.CurrentPos])
local endBr = GetIndexFindCharInProps([no]'braces.close'[/no],nextSimbol)
if (endBr~=nil) and (nextSimbol==char) then
editor:CharRight()
return true
end
[no]-- если следующий символ конец строки[/no]
[no]-- и мы ставим открывающуюся скобку[/no]
[no]-- то сразу вставляем закрывающуюся скобку[/no]
if (editor.CurrentPos==editor.Length) or nextIsEOL(editor.CurrentPos) then
local brIdx = GetIndexFindCharInProps([no]'braces.open'[/no], char)
if (brIdx~=nil) then
editor:BeginUndoAction()
[no]-- по волшебному обрабатываем скобку { в cpp[/no]
if (char == [no]'{'[/no]) and (editor.LexerLanguage == [no]'cpp'[/no]) then
local ln = GetCurrLineNumber()
if ln>0 and GetLineIndentation(ln)>GetLineIndentation(ln-1) then
if IsLineStartPos(editor.CurrentPos) and not IsInLineEnd(ln-1, [no]'{'[/no]) then
editor:BackTab()
end
end
editor:AddText([no]'{'[/no])
editor:NewLine()
if GetLineIndentation(ln)==GetLineIndentation(ln+1) then
editor:Tab()
end
local pos = editor.CurrentPos
editor:NewLine()
if GetLineIndentation(ln+2)==GetLineIndentation(ln+1) then
editor:BackTab()
end
editor:AddText([no]'}'[/no])
editor:GotoPos(pos)
[no]-- по волшебному обрабатываем скобку } в cpp[/no]
elseif (char == [no]'}'[/no]) and (editor.LexerLanguage == [no]'cpp'[/no]) then
editor:BackTab()
editor:AddText([no]'}'[/no])
[no]-- вставляем закрывающуюся скобку[/no]
else
local symE = GetCharInProps([no]'braces.close'[/no],brIdx)
if (symE==nil) then symE=[no]''[/no] end
editor:InsertText(editor.CurrentPos, char..symE)
editor:CharRight()
end
editor:EndUndoAction()
return true
end
end
end
return false
end

[no]-- Add user event handler OnKey[/no]
local old_OnKey = OnKey
function OnKey(key, shift, ctrl, alt, char)
if old_OnKey and old_OnKey(key, shift, ctrl, alt, char) then
return true
end
if editor.Focus and char~=[no]''[/no] and SmartComment(char) then
return true
end
return false
end
Автор: mozers
Дата сообщения: 12.06.2007 22:20
Обновил Текущие исходники.
Цитата:
[FindResultListStyle] - добавлено, что если функция включена, то в
тексте для поиска табуляция заменяется на пробелы, вначале строки
пробелы не выводятся, двойные пробелы заменяются одинарными.

[OnKeyDown] - добавлена новая функция в луа:
OnKeyDown(код нажатой клавиши, нажатый символ, состояние шифта/котрола/альта)
если возвращает true то обработка дальше не ведется, т.е. можно из
скрипта запретить например нажатие любой клавиши вообще, или по своему
обработать нажатие (для скриптописателей)

[user.toolbar] - переделано задание панели инструментов, теперь если
не задана в настройках, то отображается стандартная, добавлена
возможность задавать всплывающую подсказку
Новый формат user.toolbar=
Имя команды|IDM_COMMAND|номер иконки

В контейнеры добавлена "карта" (для программистов)
Расширен функционал класса SString, теперь позволяет отсекать определенные
символы в начале и в конце строки (для программистов)
Расширен функционал класса Menu добавлены методы добавление пунктов
и удаление пунктов меню, переписан конструктор - позволяет
копировать (обращаться к уже существующему) меню (для программистов)

Убрал причину ворнинга (достало на него смотреть)
..\lua\src\lib\liolib.c(603) : warning C4244: '=' : conversion from 'double '
to 'unsigned short ', possible loss of data
Все изменения присланы BioInfo.
При компиляции (Microsoft Visual Studio .NET 2003) не было ни одного ворнинга.

Добавлено:
BioInfo
Цитата:
Я не видел того что сделал Мишель
То же самое что и ты (У него, наоборот, бывают проблемы под Виндами потому что отлаживает все в GTK)

Цитата:
Ну а все-таки, можно прикрепить первый пост в топике?
Всем модераторам отписал об этом - ждем ответа...

Цитата:
Высылай что по коду не доделано
Ктото обещал тулбар из внешнего файла...
И ошибку исправь - check.if.already.open=1 перестал работать
Автор: BioInfo
Дата сообщения: 12.06.2007 23:17
mozers

Цитата:
И ошибку исправь - check.if.already.open=1 перестал работать

И точно ведь! А это когда примерно хоть отвалилось?
Автор: alrusdi81
Дата сообщения: 13.06.2007 06:22
Блино... Хотя бы не комментируйте просто так оригинальный код, если в усовершенствованиях используете чисто Виндовые возможности - стоит оборачивать их в теги прекомпилятора... Теперь уже компилятор gcc под GTK и на лекксере (LexOthers.cxx) дохнет... Корень зла функция - strnicmp (стр. 1031). Может ее на strncmp заменить, как выше по коду или strncasecmp - http://cisco.opennet.ru/man.shtml?topic=strcasecmp&category=3&russian=2

BioInfo
Для того чтобы использовать GTK не придется ничего устанавливать. Достаточно скачать любой русский дистрибутив LiveCD Linux (Knoppix лучше всего для начала) и загружаться c CD, не изменяя состояния жестких дисков.
Автор: vladvro
Дата сообщения: 13.06.2007 12:18
BioInfo
Цитата:
Блин, ну не уж то не видно что знаком ошибся?

увы, сразу заметить не получилось.
оптимизация супер

Цитата:
А можно тогда еще сделать
buffers.new.to.next=2
и новый файл будет открываться на первой позиции?

конечно можно, только название параметра тогда пожалуй надо поменять, скажем на:
# 0-last (default), 1-next, 2-first
buffers.new.open.at=2
сделаю в ближайшее время.

Цитата:
Переделал слегонца контейнеры, добавил "карту"
Посмотрите, плиз, компилится нормально?


Код: ../src/Containers.h:411: error: `BEFORE_START_POSITION' undeclared (first use this function)
Автор: alrusdi81
Дата сообщения: 13.06.2007 13:10
vladvro

Цитата:

похоже не подойдет... функция strncasecmp, на сколько я понял, не является общестандартной для юникс платформ.

Ну почему - эта функция прокатывает на GNOME и KDE на моей машине... И это стандарт BSD... Все же лучше, чем вовсе отказ в компиляции!
И я бы в коде разделил... Та конструкция, которую ты предложил у меня не решает проблему, хотя может просто руки кривые)

Зы... И для того, чтобы под GTK что-то потестить нужно хотя бы учесть мои исправления, которые сделаны для 1.73 (http://alrusdi.nm.ru/debug/) fixes.zip - необходимые поправки для компиляции кода под Виндой... У меня вся эта история в борданде на Винде и в gcc на Линуксе компилится. Я даже поправил новую версию исходников scintilla, а scite править - руки опускаются, поскольку предыдущие замечания не учтены и по сути работу нужно делать заново - а она немалая.
Автор: mozers
Дата сообщения: 13.06.2007 13:52
Правильная ссылка на доработку alrusdi81 тут
Вставлять в текущие исходники не решился, поскольку увидел только что похерена функция [LowerUpperCase]...
Спецы, гляньте! А то говорим что надо мол под GTK сделать, надо...
А когда умный человек готовые изменения выкладывает - пасуем
Цитата:
поскольку предыдущие замечания не учтены и по сути работу нужно делать заново
Это - совсем плохо Форум то для того и сделан чтобы слушать друг - друга, а не только трубить о личных победах...

Народ, я конечно, извиняюсь, но вы иногда в дружественную тему заглябывайте
Автор: vladvro
Дата сообщения: 13.06.2007 14:44
alrusdi81
Цитата:
Та конструкция, которую ты предложил у меня не решает проблему
а почему не решает? что пишет то?
возможно инклуд надо делать в начале файла (я в С не силен), тогда всю конструкцию закинь наверх.

Цитата:
поскольку предыдущие замечания не учтены и по сути работу нужно делать заново - а она немалая.

работа немалая, но ее все равно надо переделывать, т.к. не правильно делать реализацию только под PLAT_WIN и PLAT_GTK, и мои замечания вобщем то тоже остались не замеченными...
но мне думается что, используя сравнение файлов, повторно наложить изменения уже проще, чем делать их с нуля.

mozers
Цитата:
Народ, я конечно, извиняюсь, но вы иногда в дружественную тему заглябывайте

конечно заглядываем, токо там нового мало
Автор: mozers
Дата сообщения: 14.06.2007 09:12
Обновил текущие исходники
(BioInfo исправил ошибку в Containers.h)

Уря! В топике шапку сделали
Автор: alrusdi81
Дата сообщения: 14.06.2007 13:39
Поправил косяк с [LowerUpperCase] в исходниках (1,6 Mb) компилирующихся под Линукс.
Каюсь, он заключался именно в тех замечаниях, которые дал vladvro

Облегченная (300kb) версия
Автор: vladvro
Дата сообщения: 14.06.2007 13:56
alrusdi81
Цитата:
в исходниках (1,6 Mb) компилирующихся под Линукс

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

Добавлено:
всем

по поводу обновлеия исходников - было бы очень не плохо обзавестись нам SVN базой для проекта.
есть идеи где разместиться?
Автор: BioInfo
Дата сообщения: 14.06.2007 15:51
vladvro

Цитата:
по поводу обновления исходников - было бы очень не плохо обзавестись нам SVN базой для проекта. есть идеи где разместиться?

Просвети темноту - а что это такое вообще и как работает?
Ну и главное в чем понт этого SVN, зачем нам этим обзаводится?

alrusdi81
Исходники не качал, пока некогда. Хочу вот что спросить: я исправил в наших исходниках обработку menu - PlatGTK.cxx, смотрел? На menu больше ругаться не должно.
Также исправил SetToolBar, в прошлых исходниках ты его закоментил или #if обернул... Короче смотри SciTEGTK.cxx
Автор: mozers
Дата сообщения: 14.06.2007 16:37
Обновил текущие исходники
(я их обновляю только если у меня они откомпилились без ошибок)
vladvro
Цитата:
постарался внести изменения для поддержки мультиплатформенности на основе изменений от alrusdi81
скорее всего их недостаточно, но надо же начинать
Одного я не понял:
Нахрена в liolib.c комменты еще в знаки комментария обуты Типа такого:
Код: /* //!-start-[MsgBox][FileAttr] */
Автор: alrusdi81
Дата сообщения: 15.06.2007 06:39
mozers
Комменты в liolib.c сделаны поскольку ISO C не поддерживает комментарии в стиле С++, это конечно необязательно, но я ставил себе задачу скомпилить scite на Линуксе без ворнингов (маньяк)

Коррективы в новые исходники от mozers, 11:25 14-06-2007.
С ними под GTK компилится, но почему-то не загружаются из файла настроек некотрые параметры (видимость табов, статус бара, тулбара). Другие настройки загружаются и работают нормально. Где могла собака порыться? Дополнение FillProperties не виновно?

Нужно что-то делать с функцией itoa - ее тоже нет на Линукс, очень обидно некоторые доработки вылетели только из-за однократного использования этой функции.
sprintf(buffer, "%d", value); прокатит?

Нужно найти решение для функций изменения регистра кириллических символов в Линуксе - тоже, казалось бы простенько, но я не знаю как поправить((

Очень обидно также, что модифицированная функция WarnUser не работает. Во многих местах править приходится...

BioInfo PlatGTK.cxx скомпилировался без ошибок в SciTEGTK.cxx только WarnUser не прошла
Автор: vladvro
Дата сообщения: 15.06.2007 07:56
alrusdi81
Цитата:
но я ставил себе задачу скомпилить scite на Линуксе без ворнингов

это решение поддерживаю, лучше если будет и без ворнингов

Цитата:
в SciTEGTK.cxx только WarnUser не прошла

пожалуйста, всегда присылай сообщение об ошибке, а то править вслепую приходится.

Добавлено:
alrusdi81
Цитата:
PlatGTK.cxx скомпилировался без ошибок

а почему тогда он правленый?

еще раз хочу обратить твое внимание на добавление условной компиляции, вариант:
PlatGTK.cxx строка 2479
Код: #if PLAT_GTK
Menu::Menu() : id(0) {}
#endif
#if PLAT_WIN
[no]//!-add-[GTKSUPPORT][/no]
Menu::Menu(MenuID _id) : id(_id) {}[no]//!-change-[SubMenu][/no]
...
#endif
Автор: mozers
Дата сообщения: 15.06.2007 09:21
alrusdi81 vladvro
Я так понял, что пихать эту доработку в наши исходники - рановато...
Вы согласуйте код, учитывая замечания vladvro и тогда и вставим. ОК?

chupakabra
Мне кажется, что эта доработка - очень индивидуальная. (На вкус и цвет...)
Поэтому если кто то поддержит твою идею и ты доработаешь код чтобы это дело было опциональным - внесем в сборку. ОК?
Автор: BioInfo
Дата сообщения: 15.06.2007 09:36
vladvro
Спокойствие! (Каму я говорю... у мне же уже через полтора часа диплом защищать а я тут херней занимаюсь, поболейте за меня чтоли )

Цитата:
более правильным вариантом является такой

Это не более правильный вариант, правильный вариант мною предоставлен, компилироваться это будет без ошибок (у меня прямо уверенность такая непоколебимая), единственное что там не хватает так это реализации! Конструктор вообще трогать не нужно, а вот другие методы ждут реализации. Свою помощь в их реализации я уже предложил.
То что предлагается вообще полная муть т.к. компилятор в PlatGTK.cxx ВООБЩЕ не лезет при компиляции под виндовс, тем самым событие #if PLAT_WIN НИКОГДА не произойдет.
Ошибка я так понял из-за WarnUser, освобожусь (через пару деньков ) посмотрю что можно сделать.
Еще раз оборачивание #if - очень плохой тон! Наверняка можно задачу решить правильно. А то что предлагаете это тоже самое что черпаком из тарелки суп кушать.
alrusdi81
Если этот момент компилируется с ошибкой

Цитата:
Menu::Menu(MenuID _id) : id(_id) {}

то выложи ее сюда, пожалуйста, т.к. ошибок этот код ну никак не должен создавать.
P.S. Я отсылал тебе свой электронный адрес в приват (в самом верху страницы есть ссылка "личный ящик"), напиши мне пожалуйста, я помогу разобраться.
Автор: vladvro
Дата сообщения: 15.06.2007 10:09
BioInfo
Цитата:
поболейте за меня чтоли
болеем!

Цитата:
То что предлагается вообще полная муть т.к. компилятор в PlatGTK.cxx ВООБЩЕ не лезет при компиляции под виндовс, тем самым событие #if PLAT_WIN НИКОГДА не произойдет.

согласен, для PlatGTK.cxx муть
но я просто взял это для примера, а говорил вобщем о применении.

Цитата:
Еще раз оборачивание #if - очень плохой тон!

мне кажется это зависит от того, что оборачивается...
в любом случае, местами использовать это прийдется.
Автор: chupakabra
Дата сообщения: 15.06.2007 10:11
mozers

Цитата:
очень индивидуальная

А что там индивидуального? Неужели кому-то нужен автоотступ после конструкций типа
if (c) do();
? Я бы даже назвал это исправлением ошибки, а не доработкой. Ссылка на описание проблемы.
Другой вопрос насколько правильно это реализовано, я пока мало что понимаю в исходном коде, поэтому просил проверить.
Автор: vladvro
Дата сообщения: 15.06.2007 10:14
mozers
Цитата:
Мне кажется, что эта доработка - очень индивидуальная. (На вкус и цвет...)

а почему "очень индивидуальная"?
разве кто-то в конструкции вида:
if (c) operator;
делает в следующей строке отступ?

Добавлено:
chupakabra
Цитата:
Другой вопрос насколько правильно это реализовано, я пока мало что понимаю в исходном коде, поэтому просил проверить.

глянул, код, увы в этой части кода я понимаю еще меньше.

Добавлено:
alrusdi81
Цитата:
Нужно что-то делать с функцией itoa - ее тоже нет на Линукс

странно что нету, функция из stdlib.h...
попробуй заменить на _itoa
Автор: mozers
Дата сообщения: 15.06.2007 11:34
Обновил текущие исходники
Цитата:
[FixIndent] (Автор: chupakabra)
Исправление ошибки: При включённой автоиндентации и вводе однострочных операторов С++ вида:
if (c) do();
при переходе на следующую строку редактор добавляет отступ, который в данном случае вовсе не нужен
Еще отыграл взад Platform.h поскольку, как выяснилось, теги условной компиляции там были наставлены сгоряча
Автор: BioInfo
Дата сообщения: 15.06.2007 14:36
chupakabra

Цитата:
А что там индивидуального? Неужели кому-то нужен автоотступ после конструкций типа

Если мой пример отработает без ошибок (т.е. с нормальным автоотступом) то нет вопросов:

Код: if (s) интер
оператор2()
else интер
оператор2();
Автор: chupakabra
Дата сообщения: 15.06.2007 15:58
BioInfo

Цитата:
Если мой пример отработает без ошибок

А "интер" это что? Пробелы? Если да, то работает как надо. А вот если без пробелов, то не работает, после else не делает отступ. Но с моим изменением это не связано, эта ошибка и раньше была.


Цитата:
в чем понт этого SVN, зачем нам этим обзаводится?

Кстати хорошее дело, позволяет легко узнать кто, что, где и когда правил. И даже зачем, если автор изменений потрудился объяснить это.

P.S. Поздравляю со сдачей диплома!

Страницы: 1234567891011121314151617181920212223242526

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


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