[MoonScript] Подсветка кириллицы и пробельных символов

Здесь выкладываются готовые к использованию макросы и скрипты.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by AleXH » Tue 03 Jun, 2014 19:06

Latest post of the previous page:

Гуид поменяйте
Поменял, описание исправил.

User avatar
zg
zero-gravity
Posts: 5231
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by zg » Tue 03 Jun, 2014 23:11

zg wrote:фар отдаёт ссылку на внутренние данные, колорер работает с ними, луафар — копирует себе. в принципе было бы логично расширить.
получить подстроку из редактора без копирования всей строки:
  1. local ffi=require("ffi")
  2.  
  3. local function GetSubStringW(EditorId,StringNumber,Start,Length)
  4.  
  5.   local ec=ffi.cast("struct PluginStartupInfo*",far.CPluginStartupInfo()).EditorControl
  6.  
  7.   local egs=ffi.new("struct EditorGetString")
  8.  
  9.   egs.StructSize=ffi.sizeof(egs)
  10.  
  11.   egs.StringNumber=StringNumber-1
  12.  
  13.   if ec(EditorId,"ECTL_GETSTRING",0,egs)~=0 and Start<=egs.StringLength then
  14.  
  15.     Length=math.min(Length,egs.StringLength-Start+1)
  16.  
  17.     return ffi.string(egs.StringText+Start-1,Length*2)
  18.  
  19.   end
  20.  
  21. end
  22.  
  23.  
  24.  
  25. local function GetSubString(EditorId,StringNumber,Start,Length)
  26.  
  27.   local str=GetSubStringW(EditorId,StringNumber,Start,Length)
  28.  
  29.   return str and win.Utf16ToUtf8(str)
  30.  
  31. end

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by Shmuel » Tue 03 Jun, 2014 23:41

"ECTL_GETSTRING" с FFI не прокатит. Нужно целое число, а не строковый литерал.

User avatar
zg
zero-gravity
Posts: 5231
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by zg » Tue 03 Jun, 2014 23:52

Shmuel wrote:"ECTL_GETSTRING" с FFI не прокатит. Нужно целое число, а не строковый литерал.
код — рабочий.
Image

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by Shmuel » Wed 04 Jun, 2014 06:38

О, спасибо, не знал (век живи, век учись).

User avatar
John Doe
Бюрократ
Posts: 11078
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by John Doe » Wed 04 Jun, 2014 09:08

Shmuel wrote:"ECTL_GETSTRING" с FFI не прокатит. Нужно целое число, а не строковый литерал.
Я так понимаю, что оптимальнее всего ffi.C.ECTL_GETSTRING
zg wrote:получить подстроку из редактора без копирования всей строки:
[...]
Интересно теперь сравнить производительность.

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by AleXH » Wed 04 Jun, 2014 09:14

GetSubStringW() возвращает nil на пустых строках, исправил на
  1. ffi=require "ffi"
  2.  
  3.  
  4.  
  5. GetSubStringW=(EditorId,StringNumber,Start,Length)->
  6.  
  7.   ec=ffi.cast("struct PluginStartupInfo*",far.CPluginStartupInfo!).EditorControl
  8.  
  9.   egs=ffi.new "struct EditorGetString"
  10.  
  11.   egs.StructSize=ffi.sizeof egs
  12.  
  13.   egs.StringNumber=StringNumber-1
  14.  
  15.   if ec(EditorId-1,"ECTL_GETSTRING",0,egs)~=0 and Start<=egs.StringLength
  16.  
  17.     Length=math.min Length,egs.StringLength-Start+1
  18.  
  19.     return ffi.string egs.StringText+Start-1,Length*2
  20.  
  21.   else
  22.  
  23.     return ""
Код скрипта полностью На коротких строках работает, но не во всех файлах - почему, пока не понял.

User avatar
zg
zero-gravity
Posts: 5231
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by zg » Wed 04 Jun, 2014 09:58

EditorId-1 => EditorId.
также есть проблемы с табами, надо как-то так:

Code: Select all

RealLeft=editor.TabToReal ei.EditorID,ii,ei.LeftPos
и везде использовать RealLeft вместо ei.LeftPos. может привести к деградации производительности.
по хорошему ширину надо тоже конвертировать, но так как она может только уменьшится, то реально быстрее забить.
так же вызов два раза editor.GetStringW сводит на нет всю оптимизацию. StringLength можно вернуть из GetSubStringW вторым параметром.

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by AleXH » Wed 04 Jun, 2014 13:59

Не понимаю почему, но код не работает. Получаю значения
  1. line,ll=GetSubStringW ei.EditorID,ii,ei.LeftPos,ei.WindowSizeX
В результате ll=0

User avatar
zg
zero-gravity
Posts: 5231
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by zg » Wed 04 Jun, 2014 14:18

AleXH wrote:не работает.
вы присваиваете fLength значение egs.StringLength до того, как оно будет заполнено фаром.

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by AleXH » Wed 04 Jun, 2014 14:48

Понял. Изменение производительности оценивал так: создал файл из 30 строк по 11М символов. Включал раскраску, после отработки нажимал на курсор вправо и смотрел сколько символов он успеет пройти за 20 сек. Предыдущий вариант проползал 24 символа, новый 31. При наличии табуляций в тексте артефактов в раскраске не наблюдаю.

User avatar
zg
zero-gravity
Posts: 5231
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by zg » Wed 04 Jun, 2014 17:28

AleXH wrote:Изменение производительности оценивал так: создал файл из 30 строк по 11М символов. Включал раскраску, после отработки нажимал на курсор вправо и смотрел сколько символов он успеет пройти за 20 сек. Предыдущий вариант проползал 24 символа, новый 31.
как-то мало. я вот так пробовал:
  1. local start=Far.UpTime
  2.  
  3. for ii=1,10000 do
  4.  
  5.   editor.GetStringW(-1,1)
  6.  
  7. end
  8.  
  9. far.Show(Far.UpTime-start)
GetStringW: ~40000, GetSubStringW(...,1,200): ~30.
AleXH wrote:При наличии табуляций в тексте артефактов в раскраске не наблюдаю.
всего в начале строки 6 табов:
Image

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by AleXH » Wed 04 Jun, 2014 18:07

FAR3.0.3924x32 красит по коду из моего предыдущего сообщения абсолютно правильно независимо от сочетаний пробельных и обычных символов, их количества и последовательностей.

Ваш тест преобразованный к виду:
  1. Macro
  2.  
  3.   description:"Test"
  4.  
  5.   area:"Editor"
  6.  
  7.   key:"F3"
  8.  
  9.   action:->
  10.  
  11.     start=Far.UpTime
  12.  
  13.     for ii=1,10000
  14.  
  15.       editor.GetStringW(-1,1)
  16.  
  17.  
  18.  
  19.     far.Show(Far.UpTime-start)
На строке в 11M выдаёт - 75437.

User avatar
zg
zero-gravity
Posts: 5231
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by zg » Wed 04 Jun, 2014 18:29

AleXH wrote:FAR3.0.3924x32 красит по коду из моего предыдущего сообщения абсолютно правильно независимо от сочетаний пробельных и обычных символов, их количества и последовательностей.
это неправда. файл в аттаче. фар 80x25. открываете, жмёте энд, включаете свою раскраску, делаете скриншот и выкладываете здесь.
AleXH wrote:На строке в 11M выдаёт - 75437.
и что?
Attachments
test.7z
(122 Bytes) Downloaded 39 times

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by AleXH » Wed 04 Jun, 2014 18:48

Проверил. Сходу красит правильно, но если курсор подогнать к правой границе экрана и нажать 2 раза вправо, то раскраска с самого левого таба начинает "съезжать". Нажимая вправо далее, табы слева на право теряют раскраску.

User avatar
zg
zero-gravity
Posts: 5231
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by zg » Wed 04 Jun, 2014 19:02

AleXH wrote:Проверил. Сходу красит правильно, но если курсор подогнать к правой границе экрана и нажать 2 раза вправо, то раскраска с самого левого таба начинает "съезжать". Нажимая вправо далее, табы слева на право теряют раскраску.
да ладно? а как же:
AleXH wrote:При наличии табуляций в тексте артефактов в раскраске не наблюдаю.
AleXH wrote:FAR3.0.3924x32 красит по коду из моего предыдущего сообщения абсолютно правильно независимо от сочетаний пробельных и обычных символов, их количества и последовательностей.

AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

Re: [MoonScript] Подсветка кириллицы и пробельных символов

Post by AleXH » Wed 04 Jun, 2014 19:15

Левую границу экрана не двигал. Код скрипта поправил, разместил на первой странице как вариант 2.

Post Reply

Return to “Полезные макросы и скрипты”

Who is online

Users browsing this forum: No registered users and 3 guests