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

» SciTE - Open Source Text Editor for Windows & Linux

Автор: ALeXkRU
Дата сообщения: 28.08.2010 13:05
mozers
та я ж не в качестве претензии просто прикольный факт.. впрочем, мне не жалко:
файл: русик от Maxthon3 - ru-ru.ini
кодировка: UCS2-LE
SciTE - Версия 2.03 .74Ru


Добавлено:
ЗЫ: бетка 2.20 (похоже) не имеет такой фичи.. правда она мне все настройки поубивала.. пошёл перенастраивать скайта
Автор: mozers
Дата сообщения: 30.08.2010 13:47
Scintilla History дополнена переводом новшеств версий 2.12 и 2.20 (Перевод: ALeXkRU).
Советую всем почитать, чтобы понять куда мы катимся...
Автор: ruruboard
Дата сообщения: 30.08.2010 14:05
Почитал изменения, не понял фишки:


Цитата:
Один объект лексера привязывается к документу, в то время как раньше лексеры были привязаны к представлению/отображению, что могло приводить к использованию разных лексеров для разделения представления с непредсказуемыми результатами.


Вот это "к использованию разных лексеров для разделения представления" - это как понять? "разделение представления"... бред.
Представлениями тут называются окна редактирования? Ну так даже если я сделал "сплит" документу, он всё равно должен подсвечиваться синхронно в обоих видах, т.е. лексер должен быть привязан к документу, а не виду. Или я не понял архитектуры?

Добавлено:
А! Всё, сори, понял - всё сделано хорошо, только описано сложно.

Добавлено:

Цитата:
A single lexer object is attached to a document whereas previously lexers were attached to views which could lead to different lexers being used for split views with confusing results.


Давайте я чуть более по-русски переведу?

"Каждый объект лексера теперь связан с документом. Ранее он привязывался к представлению этого документа, что приводило к некорректному поведению, когда этих представлений было открыто более одного на документ.
Автор: mozers
Дата сообщения: 30.08.2010 14:32
ruruboard
Я вообще если понимаю о чем речь, то все время пытаюсь исправить дословный перевод.
Если не понимаю (как в данном случае) то вставляю как есть.
Вот последний вариант уже намного более понятен
Вот еще бы расшифровать что такое "представление документа" и каким макаром их можно открыть несколько на один документ - было бы совсем понятно
Автор: ruruboard
Дата сообщения: 30.08.2010 16:14

Цитата:
Вот еще бы расшифровать что такое "представление документа" и каким макаром их можно открыть несколько на один документ


Split view Т.е. физически документ - один (буфер с буквами), а редактировать его можно из нескольких окон - они и есть "вид" или "представление".

Добавлено:
Я думаю, для прогеров не надо расшифровывать - они и так понимают смысл "один документ - множество видов".
Автор: noisy
Дата сообщения: 30.08.2010 16:24
Может кому пригодится
Если возникает ошибка "Отсутствует исполняющее ядро для расширения имени файла ".js""

Загрузить с форума OSzone и выполнить scriptru_5.7_XP_SP3_rereg.exe , — последний перерегистрирует библиотеки, настройки, контекстное меню…
Автор: doromones1
Дата сообщения: 30.08.2010 17:51
а есть ли сборка последняя под линукс?
Автор: mozers
Дата сообщения: 30.08.2010 18:14
ruruboard
Цитата:

Цитата: Вот еще бы расшифровать что такое "представление документа" и каким макаром их можно открыть несколько на один документ
Split view
Автор: ALeXkRU
Дата сообщения: 30.08.2010 18:23
mozers
мне, почему-то кажется, что речь о всяких смешанных файлах, которые могли обрабатываться несколькими лексерами, из-за чего могли вылезать конфликты.
Автор: mozers
Дата сообщения: 30.08.2010 18:25
noisy
Вообще то есть стандартный мелкософтовский инстраллятор WSH...

Добавлено:
ALeXkRU
Вот такая трактовка звучит более правдоподобно... У Нейла уточнить? Да он, билин, так объяснит что еще больше запутаешся
Автор: ALeXkRU
Дата сообщения: 30.08.2010 18:35
mozers

Цитата:
У Нейла уточнить?

дык.. неужели этот момент где-нить не обсуждался? на аглицком.. мож по контексту догадаться смогЁм..


Цитата:
он, билин, так объяснит что

от что да, то да.. я его хистори каждый раз как супер-ребус разгадываю.. далеко не всегда удачно отсюда - просто дословный перевод без разъяснений..
Автор: mozers
Дата сообщения: 30.08.2010 18:37
ALeXkRU
Стоп. Поторопился согласится. "Всякие смешанные файлы" всегда обрабатываются единственным лексером! (Да, этот лексер легко можно переключить на другой, но тогда другой будет так же работать в гордом одиночестве).
Это только в проекте scintillua Мишель Форал предпринял попытку (и весьма неплохую) обрабатывать документ за раз несколькими разными лексерами. В оригинальном SciTE этим и не пахло...

Добавлено:
ALeXkRU
Цитата:
дык.. неужели этот момент где-нить не обсуждался? на аглицком.. мож по контексту догадаться смогЁм..
Вот. Я чесноговоря по большому счету нихрена не понял.
Автор: noisy
Дата сообщения: 31.08.2010 09:17
mozers

А ты пробовал ее ставить на XP с SP3?
Так вот. не ставится. ругается на то что в системе уже установлена новая версия.

а посто мой конечно не панацея, но мне помогло
Автор: Cuprume
Дата сообщения: 31.08.2010 10:44
Задача из области фантастики при HTML-верстке, но озвучу: есть множество однотипных HTML-файлов. В одном из них я делаю какое-то изменение в структуре документа (например, добавляю к таблице или блоку класс или ID, меняю h2 на h3 и тд.) Необходимо, чтобы это изменение распространилось на все остальные открытые однотипные файлы.
Есть ли тут какое-то решение? Поиск и замена во всех файлах немного не то...
Автор: ruruboard
Дата сообщения: 31.08.2010 11:49
Cuprume
Ответ из области реальности: это невозможно. )
Но раз у тебя столько повторяющегося кода, нельзя ли всё это реализовать через шаблоны?
Автор: Cuprume
Дата сообщения: 31.08.2010 12:26
ruruboard
Так, так. Вот про шаблоны поподробней.. ты имеешь в виду аббревиатуры-сокращения?
Автор: ruruboard
Дата сообщения: 31.08.2010 12:55
Cuprume
Нет, я про оффтопик. Я имею ввиду шаблоны любого html-движка (а-ля ASP).

Ещё посмотри в сторону diff/patch: сгенери небольшой diff, который правит нужное место (оно будет у всех файлов примерно с одним смещением) и примени его ко всем файлам
Автор: SufiT
Дата сообщения: 31.08.2010 14:19
Правлю CSS в scite. Когда открываю фигурную скобку, автоматически закрывающаяся скобка появляется через строку и, соответственно, курсор появляется на строке между скобками.
Как в настройках сделать так, чтобы скобки находились на одной строке: { } ?
Подскажите плиз.
Автор: TymurGubayev
Дата сообщения: 31.08.2010 19:04

Цитата:
Вот. Я чесноговоря по большому счету нихрена не понял.


По приведенной ссылке есть ещё одна, вот сюда: http://www.scintilla.org/nulex.html

А там есть такой абзац:

Цитата:
Single lexer per document

A problem with current Scintilla is that lexers and lexer options such as properties and keywords are attached to the view (ScintillaBase) object rather than the Document object. When two views are showing one document then it is possible for two different lexers to be called to style the text leading to arbitrary and confusing results.

To fix this, lexer state is being moved from ScintillaBase to Document although the state is still being set up by ScintillaBase as it is providing the API to client code.

This will change the scope of some settings so may require changes to applications. Applications that only set up properties or word lists at initialisation or when changing languages will have to repeat these for each document. Conversely, there will no longer be a need to set parameters for each view on a document or when switching between documents on a view since documents retain settings.


из которого более-менее понятно, о чём речь.

А т.к. split view в SciTE вроде нет, то нас это новшество касается мало (ИМХО)
Автор: BioInfo
Дата сообщения: 01.09.2010 10:11
SufiT
Обновил скрипт
smartbraces.lua [строка 1] : [more]
Код: --[[--------------------------------------------------
SciTE Smart braces
Version: 1.2.5
Authors: Dmitry Maslov, Julgo, TymurGubayev
-------------------------------------------------
Работает, если:

Подключен в автозагрузку
В настройках установлено braces.autoclose = 1
В настройках установлено braces.open = открывающиеся скобки
В настройках установлено braces.close = закрывающиеся скобки
Используется только в русской сборке из-за расширенной функции OnKey

-------------------------------------------------
Функционал:

Автозакрытие скобок
Автозакрытие выделенного текста в скобки
Особая обработка { и } в cpp: автоматом делает отступ

-------------------------------------------------
Логика работы:

Скрипт срабатывает только если braces.autoclose = 1

Если мы вводим символ из braces.open, то автоматически вставляется
ему пара из braces.close, таким образом, курсор оказывается между скобок

Если мы вводим закрывающуюся скобку из braces.close и следующий символ
эта же закрывающаяся скобка, то ввод проглатывается и лишняя закрывающаяся
скобка не печатается

Если у нас выделен текст и мы вводим символ из braces.open
то текст обрамляется кавычками braces.open - braces.close
если он уже был обрамлен кавычками, то они снимаются,
при этом учитывается символ переноса строки, т.е. если выделенный
текст оканчивается переводом строки, то скобки вставляются до переноса
строки

Если мы вводим символ { при редактировании файла cpp, то автоматически
вставляется перенос строки два раза, а после } - курсор при этом оказывается
в середине, т.е. после первого переноса строки, все отступы сохраняются

Если мы вставляем символ } при редактировании файла cpp, то отступ
автоматически уменьшается на один

Если мы только что вставили скобку автоматом, то после того
как нажимаем BACK_SPACE удаляется вставленная скобка, т.е.
срабатывает как DEL, а не как BACK_SPACE

Если вставляем скобку у которой braces.open == braces.close
то вставляется пара только если таких скобок четно в строке

ВНИМАНИЕ: В скрипте используется ф-ция string.pattern из COMMON.lua
--]]--------------------------------------------------

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

local function
FindCount( text, textToFind )
local count = 0;
for w in string.gmatch( text, textToFind:pattern() )
do
count = count + 1
end
return
count
end

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

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

-- Получить отступ в строке
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

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

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

-- следующий за позицией текст == text ?
local function nextIs(pos, text)
if ( string.find( editor:textrange( pos, editor:PositionAfter( pos + string.len( text ) - 1 ) ), text:pattern() ) ) then
return true
end
return false
end

-- следующий символ позиции конец строки?
local function nextIsEOL(pos)
if ( pos == editor.Length )
or
( nextIs( pos, GetEOL() ) )
then
return true
end
return false
end

-----------------------------------------------------------------
-- проверяет скобки, заданные bracebegin и braceend в строке s на
-- сбалансированность: "(x)y(z)" -> true, "x)y(z" -> false
local function BracesBalanced (s, bracebegin, braceend)
if (#bracebegin + #braceend) > 2 then
--@warn: данная функция не будет работать со "скобками" больше одного символа.
--@todo: для "длинных" скобок нужно переписать эту функцию на lpeg. Но кому оно надо?..
return true
end
local
b,e = s:find("%b"..bracebegin..braceend)
local b2 = s:find(bracebegin, 1, true)
local e2 = s:find(braceend, 1, true)
return (b == b2) and (e == e2)
end -- BracesBalanced

local function BlockBraces( bracebegin, braceend )
local text, lenght = editor:GetSelText()
local selbegin = editor.SelectionStart
local selend = editor.SelectionEnd
local b, e = string.find( text, "^%s*"..bracebegin:pattern() )
local b2, e2 = string.find( text, braceend:pattern().."%s*$" )
local add = ( IsEOLlast( text ) and GetEOL() ) or ""

editor:BeginUndoAction()
if (b and b2) and BracesBalanced( text:sub( e+1, b2-1 ) , bracebegin, braceend ) then
text = string.sub( text, e+1, b2-1 )
editor:ReplaceSel( text..add )
editor:SetSel( selbegin, selbegin + #( text..add ) )
else
editor:insert( selend - #add, braceend )
editor:insert( selbegin, bracebegin )
editor:SetSel( selbegin, selend + #( bracebegin..braceend ) )
end
editor:EndUndoAction()

return true
end

local function
GetIndexFindCharInProps( value, findchar )
if findchar then
local
resIndex = string.find( props[value], findchar:pattern() , 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 GetBraces( char )
local braceOpen = ''
local braceClose = ''
local symE = ''
local brIdx = GetIndexFindCharInProps( 'braces.open', char )
if ( brIdx ~= nil ) then
symE = GetCharInProps( 'braces.close', brIdx )
if ( symE ~= nil ) then
braceOpen = char
braceClose = symE
end
else
brIdx = GetIndexFindCharInProps( 'braces.close', char )
if ( brIdx ~= nil ) then
symE = GetCharInProps( 'braces.open', brIdx )
if ( symE ~= nil ) then
braceOpen = symE
braceClose = char
end
end
end
return
braceOpen, braceClose
end

local
g_isPastedBraceClose = false

-- "умные скобки/кавычки"
-- возвращает true когда обрабатывать дальше символ не нужно
local function SmartBraces( char )
if ( props['braces.autoclose'] == '1' ) then
local
isSelection = editor.SelectionStart ~= editor.SelectionEnd
-- находим парный символ
local braceOpen, braceClose = GetBraces(char)
if ( braceOpen ~= '' and braceClose ~= '' ) then
-- проверяем выделен ли у нас какой либо текст
if ( isSelection == true ) then
-- делаем обработку по автозакрытию текста скобками
return BlockBraces( braceOpen, braceClose )
else
-- если следующий символ закрывающаяся скобка
-- и мы ее вводим, то ввод проглатываем
local nextsymbol = string.format( "%c", editor.CharAt[editor.CurrentPos] )
if ( GetIndexFindCharInProps( 'braces.close', nextsymbol ) ~= nil )
and
( nextsymbol == char )
then
editor:CharRight()
return true
end
-- если мы ставим открывающуюся скобку и
-- следующий символ конец строки или это парная закрывающаяся скобка
-- то сразу вставляем закрывающуюся скобку
if ( char == braceOpen )
and
( nextIsEOL( editor.CurrentPos ) or nextIs( editor.CurrentPos, braceClose ) )
then
-- по волшебному обрабатываем скобку { в cpp
if ( char == '{' ) and
( editor:GetLexerLanguage() == 'cpp' )
then
editor:BeginUndoAction()
local ln = GetCurrLineNumber()
if ( ln > 0 and GetLineIndentation( ln ) > GetLineIndentation( ln - 1 ) )
and
( IsLineStartPos( editor.CurrentPos ) )
and
( not IsInLineEnd( ln-1, '{' ) )
then
editor:BackTab()
end
editor:AddText( '{' )
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( '}' )
editor:GotoPos( pos )
editor:EndUndoAction()
return true
end
-- если вставляем скобку с одинаковыми правой и левой, то смотрим есть ли уже открытая в строке
if ( braceOpen == braceClose )
and
( math.fmod( FindCount( editor:GetCurLine(), braceOpen ), 2 ) == 1 )
then
return false
end
-- вставляем закрывающуюся скобку
editor:BeginUndoAction()
editor:InsertText( editor.CurrentPos, braceClose )
editor:EndUndoAction()
g_isPastedBraceClose = true
end
-- если мы ставим закрывающуюся скобку
if ( char == braceClose ) then
-- "по волшебному" обрабатываем скобку } в cpp
if ( char == '}' ) and
( editor:GetLexerLanguage() == 'cpp' )
then
editor:BeginUndoAction()
if (IsLineStartPos( editor.CurrentPos ) )
then
editor:BackTab()
end
editor:AddText( '}' )
editor:EndUndoAction()
return true
end
end
end
end
end
return false
end

-- Перехватываем функцию редактора OnKey
AddEventHandler("OnKey", function(key, shift, ctrl, alt, char)
if ( editor.Focus ) then
if
( key == 8 and g_isPastedBraceClose == true ) then -- VK_BACK (08)
g_isPastedBraceClose = false
editor:BeginUndoAction()
editor:CharRight()
editor:DeleteBack()
editor:EndUndoAction()
return true
end

g_isPastedBraceClose = false

if
( char ~= '' ) then
return
SmartBraces( char )
end
end
end
)
Автор: Cuprume
Дата сообщения: 01.09.2010 15:29
BioInfo
Спасибо! Тоже ждал, вдруг кто сделает. Все-таки в линию мне удобнее.
В принципе теперь можно ввести настроечный параметр (чтобы пользователь мог выбрать) который указывает как делать обработку фигурных скобок - в линию или с переносом.
Автор: j52
Дата сообщения: 04.09.2010 22:02
2010-09-02 обновился релиз SciTE до 2.21
Ссылка
Автор: ALeXkRU
Дата сообщения: 04.09.2010 22:25
j52
дак, уже три дня как
Автор: j52
Дата сообщения: 04.09.2010 23:47
ALeXkRU

Цитата:
дак, уже три дня как

- а в ветке инфы об этом не было...
Автор: mozers
Дата сообщения: 05.09.2010 21:09
j52
Абсолютно верно. В топике инфы не было, а теперь уважаемый ALeXkRU приготовил нам перевод всех новинок версии 2.21.
Изменений - много. В основном это исправления ошибок предыдущего релиза.
Формулировка
Цитата:
В HTML лексере запоминается состояние строки, вызываемое строкой на этой строке, а не на следующей строке.
не понравилась самому автору перевода. Может кто предложит лучший вариант? (Ссылочку на первоисточник я привел).
Автор: ruruboard
Дата сообщения: 06.09.2010 12:50
Давайте попробую...


Цитата:
LexHTML is now changed to work this way: the state taking into
account the contents of a line is stored as the linestate of that line
rather than the next one. When the lexer starts processing another
block it picks up the line state from the previous line. This should
be more robust when lines are inserted and removed.


"Лексер для HTML сейчас работает так: Состояние лексера для текущей строки сохраняется в этой же строке (ранее оно хранилось в следующей строке). Когда лексер обрабатывает следующий блок, он берёт состояние из предыдущей строки. Это решение должно быть более правильным, когда строки вставляются и удаляются".

Добавлено:
Хотя еси чесна, я не понял, что он имел ввиду. )

По идее, у каждого символа строки должно быть своё состояние: ключевое слово/идентификатор/оператор/строка и т.п. Соотв. строка не может иметь ОДНО состояние. А лексер (при изменении текста текущей строки) должен взять состояние последнего символа из предыдущей строки. Может, Нэйл это имел ввиду?
Автор: mozers
Дата сообщения: 06.09.2010 20:04
ruruboard
По тому как в приведенный выше тред никто, кроме самого Нейла, не вякнул, смысл этой доработки не дошел даже до тех у кого английский - родной язык
Автор: ruruboard
Дата сообщения: 07.09.2010 10:46
Видимо, его лексер строко-ориентированный (что несколько глупо в свете сильной зависимости от предыдущих фрагментов текста), поэтому (я так понял) он для текущей строки хранит её "состояние", которое есть ни что иное, как состояние последнего символа.
В любом случае, мне его лексер-энжын не очень понравился - примитивен. Я писал лексер для D, возникали неудобства. Про кривую фолдинг архитектуру вообще молчу.
Автор: mozers
Дата сообщения: 07.09.2010 12:19
ruruboard

Цитата:
Про кривую фолдинг архитектуру вообще молчу
С точки зрения С - не скажу, но писал как то скриптик на lua для поддержки свертывания в txt - мне показалось что создание фолдинга просто и логично. Что же касается лексеров... Вот как раз в пред-последнем релизе структура лексеров поменялась. Насколько сильно - сказать не могу (не спец). А вот ты, судя по разговору, специалист по С++ и внутренности SciTE знаешь не по наслышке. Так почему же тебя нет в соседнем топике? Очень помощь нужна. Дел - по горло. Welcome, please

Автор: ruruboard
Дата сообщения: 07.09.2010 14:05
В том и прикол, что фолдинг я писал на Си - мне хватило. Внутренняя структура для фолдинга не продуманна.

Я уже давно не касался С++, сейчас я шарповод. А scite - так, баловался, когда было время. С удовольствием помог бы, но 1) времени стало намного меньше 2) Не очень хочется копаться в scite - мой пятый элемент говорит, что это бесперспективный проект.

Кстати о Lua: у меня такое подозрение, что именно из-за Lua русская сборка тормознее аглицкой. Если уж делать плагины, то на Сях (а лучше на D ).

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Universal Share Downloader


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