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

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

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

Postby AleXH » Tue 03 Jun, 2014 19:06

Latest post of the previous page:

Гуид поменяйте

Поменял, описание исправил.

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

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

Postby zg » Tue 03 Jun, 2014 23:11

zg wrote:фар отдаёт ссылку на внутренние данные, колорер работает с ними, луафар — копирует себе. в принципе было бы логично расширить.

получить подстроку из редактора без копирования всей строки:
  1. local ffi=require("ffi")
  2. local function GetSubStringW(EditorId,StringNumber,Start,Length)
  3.   local ec=ffi.cast("struct PluginStartupInfo*",far.CPluginStartupInfo()).EditorControl
  4.   local egs=ffi.new("struct EditorGetString")
  5.   egs.StructSize=ffi.sizeof(egs)
  6.   egs.StringNumber=StringNumber-1
  7.   if ec(EditorId,"ECTL_GETSTRING",0,egs)~=0 and Start<=egs.StringLength then
  8.     Length=math.min(Length,egs.StringLength-Start+1)
  9.     return ffi.string(egs.StringText+Start-1,Length*2)
  10.   end
  11. end
  12.  
  13. local function GetSubString(EditorId,StringNumber,Start,Length)
  14.   local str=GetSubStringW(EditorId,StringNumber,Start,Length)
  15.   return str and win.Utf16ToUtf8(str)
  16. end

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

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

Postby Shmuel » Tue 03 Jun, 2014 23:41

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

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

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

Postby zg » Tue 03 Jun, 2014 23:52

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

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

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

Postby Shmuel » Wed 04 Jun, 2014 06:38

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

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

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

Postby 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] Подсветка кириллицы и пробельных символов

Postby AleXH » Wed 04 Jun, 2014 09:14

GetSubStringW() возвращает nil на пустых строках, исправил на
  1. ffi=require "ffi"
  2.  
  3. GetSubStringW=(EditorId,StringNumber,Start,Length)->
  4.   ec=ffi.cast("struct PluginStartupInfo*",far.CPluginStartupInfo!).EditorControl
  5.   egs=ffi.new "struct EditorGetString"
  6.   egs.StructSize=ffi.sizeof egs
  7.   egs.StringNumber=StringNumber-1
  8.   if ec(EditorId-1,"ECTL_GETSTRING",0,egs)~=0 and Start<=egs.StringLength
  9.     Length=math.min Length,egs.StringLength-Start+1
  10.     return ffi.string egs.StringText+Start-1,Length*2
  11.   else
  12.     return ""


Код скрипта полностью На коротких строках работает, но не во всех файлах - почему, пока не понял.

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

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

Postby 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] Подсветка кириллицы и пробельных символов

Postby 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: 5187
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 40 times
Contact:

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

Postby 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] Подсветка кириллицы и пробельных символов

Postby AleXH » Wed 04 Jun, 2014 14:48

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

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

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

Postby zg » Wed 04 Jun, 2014 17:28

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

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

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

Postby AleXH » Wed 04 Jun, 2014 18:07

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

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

На строке в 11M выдаёт - 75437.

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

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

Postby zg » Wed 04 Jun, 2014 18:29

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

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

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

Postby AleXH » Wed 04 Jun, 2014 18:48

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

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

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

Postby 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] Подсветка кириллицы и пробельных символов

Postby AleXH » Wed 04 Jun, 2014 19:15

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


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

Who is online

Users browsing this forum: No registered users and 2 guests