purebasic.info

PureBasic forum
Текущее время: Вт ноя 13, 2018 11:45 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Сб июл 07, 2018 7:09 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 231
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Пётр
В той теме N++ мне дали ссылку на пример, я попробовал пока не получается.
Код:
1
2
3
4
5
6
7
Procedure Privet()
        Protected res, which = 0
        res = SendMessage_(NppData\_nppHandle, #NPPM_GETCURRENTSCINTILLA, 0, which)
       
        AddGadgetItem(#Button_Added , -1 , Str(which) + "-" + Str(res))
        ; ProcedureReturn which
EndProcedure


там есть SCI_UNUSED, хотя компилятор и ругается на отсутствие константы, по описанию, говорят что <unused> не используемый параметр на будущее, а пока вместо него ставим 0.

На счёт предыдущего поста поправлю.


Вложения:
Notepad++ plugin12.pb [27.37 KiB]
Скачиваний: 36
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Сб июл 07, 2018 8:04 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
В примере передается указатель на переменную.
Код:
1
SendNpp(NPPM_GETCURRENTSCINTILLA, SCI_UNUSED, (LPARAM)&which);

Т. е. должно быть.
Код:
1
res = SendMessage_(NppData\_nppHandle, #NPPM_GETCURRENTSCINTILLA, 0, @which)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Вт июл 10, 2018 11:42 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 231
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Я тут прикрутил изменение цвета индикатора... Давно пора спать на работу, но под впечатлением хоть чуть-чуть сделал :lol:
Допустим применяем цвет к коду PureBasic, выбрать цвет в комбо и можно ползунками настраивать цвет индикатора, будет менятся прямо в Scintilla.

Обновил 1 раз.
Изображение


Вложения:
Highlight12.zip [211.69 KiB]
Скачиваний: 19
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Ср июл 18, 2018 7:13 am 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 168
Благодарил (а): 92 раз.
Поблагодарили: 5 раз.
Пункты репутации: 0
Цитата:
И где-то ближе к DataSection не помешало бы добавить строку.
- для поиска папки конфиг.
Открыл (для себя!) помимо scintilla множество сообщений и функций npp. Путь к своей папке "конфиг" npp укажет сам:
; *sc3=@sc2.s{260}
; SendMessage_(NppData\_nppHandle,#NPPM_GETPLUGINSCONFIGDIR,#MAX_PATH,*sc3); путь к папке plugins\Config; "#NPPM_GETPLUGINSCONFIGDIR=#WM_USER+1046" - в десятичном формате
; MessageRequester("", PeekS(*sc3))
Захотелось (наконец-то!) написать плагин автокомлита к npp, чтобы поддерживал готовые списки функций от RadASM, выглядел и работал примерно так же, как автокомплит RadASM. Вот этот пример:
http://purebasic.info/phpBB3ex/viewtopic.php?f=1&t=4396&p=84167&hilit=!%40Lister%40!#p84167
я видел, и он удачно прикрутился к npp. На данном этапе возникли некоторые вопросы.
1. подозреваю, что стандартных возможностей автокомплита scintillы не хватит (подсветка параметров, цвет фона, шрифт, гибкость появления-исчезновения). В исходниках автокомплита RadASM более 1000 строк на асме без комментариев, что пока меня пугает. Там используется сабклассированное окно.. Может, лучше как-то использовать ListViewGadget или GadgetToolTip? Или заюзать ToolTip на winapi, так как он гибче настраивается? Или разбираться с готовым автокомплитом RadASMа (десяток функций), который уже в виде dll собран?
2. Они (функции PB) требуют "#Gadget" - его можно получить имея хэндл? (п.с. обратное получается через WindowID(), если ничего не перепутал)
3. в теме http://purebasic.info/phpBB3ex/viewtopic.php?f=7&t=4890
было найдено решение через "SetWindowData". У меня в плагине будут некоторые настройки: чекбокс включения/выключения, список доступных языков для автокомплита и т.п. То есть, надо передавать в процедуру обработки гаджетов несколько параметров, а SetWindowData позволяет передавать только один, последующие вызовы перезаписывают предыдущие. Как это реализовать?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Ср июл 18, 2018 5:57 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 231
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
bizdon
Так создай тему и будем туда писать.Кстати пример на автозавершение слов есть у eddy. Всего у него 6 примеров.
Ссылки
Notepad++ plugin плагин-пример
https://www.purebasic.fr/english/viewto ... 12&t=65680

Scintilla: multi-cursors editing like eclipse / sublimetext мульти-выбор
https://www.purebasic.fr/english/viewto ... 12&t=60931

Scintilla regex search With groups поиск с помощью рег.выр. с группами
https://www.purebasic.fr/english/viewto ... 12&t=60455

Scintilla not changeable text area не редактируемая область
https://www.purebasic.fr/english/viewto ... 22#p455622

Scintilla multiple views два окна
https://www.purebasic.fr/english/viewto ... 33#p271933

Scintilla autocompletion Автозавершение
https://www.purebasic.fr/english/viewto ... 48#p457848


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Вс июл 22, 2018 5:25 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 231
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
bizdon писал(а):
Захотелось (наконец-то!) написать плагин автокомлита к npp, чтобы поддерживал готовые списки функций от RadASM, выглядел и работал примерно так же, как автокомплит RadASM

Можно выбрать язык похожий по структуре на RadASM, далее заменить набор ключевых слов на свой в langs.xml для выбранного языка. Далее в "Notepad++\plugins\APIs" проверить наличие файла с именем языка, если его нет, то создать его посмотрев формат файлов находящихся в этой папке. Далее в настройках стиля указать расширение файла к которому применить выбранный язык, чтобы работали подсветка и автозавершение. Вот и всё.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Вс июл 22, 2018 6:53 am 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 168
Благодарил (а): 92 раз.
Поблагодарили: 5 раз.
Пункты репутации: 0
AZJIO писал(а):
далее заменить набор ключевых слов на свой в langs.xml для выбранного языка... Вот и всё.

У RadASM (и EasyCode) есть файлы автокомплита для многих языков. Это обычные текстовые файлы со строками: "имя функции, параметр1, параметр2,.." или "#константа". Переделка в xml не пошла. Так как файлы получаюся огромными (добавляется на каджую функцию строк 10). NPP требует, чтобы xml был вообще без ошибок и правильно отсортирован. У меня возникли сложности с исправлением ошибок файла в 7000 функций (или 70000 строк). Переделывал автозаменой Word'а, но идеально не получилась. Я вообще не уверен, что npp будет поддерживать такие большие файлы. Кроме того, готовые языковые файлы уже есть - они стандартны для многих IDE, не хотелось бы переделывать (с ручным отловом ошибок) каждый файл.
п.с. процесс идёт (там всего-то два десятка "нужных" строк). Пока нахожусь на этапе обработки символа разделителя конца строки: то ли надо #CR$ использовать, то ли #CRLF$, или заменить эти символы на "|", сохранив ноль конца строки? А также сомнения на предмет сохранения файла при чтении: то ли в одну строку его сохранять (string.s=ReadString(#hfile,#PB_UTF8,#PB_File_IgnoreEOL)) или в список каждую строку (как при этом будут сохранятся концы строк: только ноль или с возвратом каретки)? Уже "почти работает" на тестовых коротких файлах. Если scintilla не сможет быстро обрабатывать и отображать такие большие файлы, тогда буду пытаться прикрутить список..

п.с. может, и надо парсер писать по переделке в xml - тогда и параметры функции подсвечиваться будут.. Теперь мне это кажется более простой задачей:).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Пн июл 23, 2018 12:55 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 231
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
bizdon
Дай файл автозавершения посмотреть как я понял у тебя их 2. И ссылку на EasyCode, а то в гугле странные ссылки и на play.google пару вариантов.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Пн июл 23, 2018 8:48 pm 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 168
Благодарил (а): 92 раз.
Поблагодарили: 5 раз.
Пункты репутации: 0
файл вот:https://yadi.sk/d/ynXIxvvJ3ZVFHH
fasmApiCall.api положить на диск С. Он из комплекта RadAsm.
Имеется куча багов:
1. работает только при отключенном автодополнении в самом npp в настройках (наверное, это можно пофиксить через сообщения npp)
2. прикрутить оригинальный файл не получается - не могу настроить разделение по символам #CR #LF, поэтому заменил его на '|'
3. целый файл (на 7000строк) Scintill'а не тянет, пришлось обрезать, соответственно автодополнение работает для букв a,b..
4. сообщение #SCI_AUTOCSETMAXHEIGHT - ограничить ширину что-то тоже не работает
Сайт EasyCode на месте: http://www.easycode.cat/
Там автодополнение хорошо работает после слова invoke.
5. прикрутить список Apiwords() вместо одной строки тоже не получается. Я хотел, чтобы PB самостоятельно сортировал список слов, из найденных слов формировал небольшую строку и подсовывал её Scintillе..


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Вт июл 24, 2018 10:20 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 231
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
bizdon

1. Как бы странно, если бы работало совместно, он же не может 2 конт меню показать одновременно. Пофиксить наверно можно, если NPP распознавая файл по расширению временно отключит свою, а потом при выборе другого документа включит.
2. Используешь сразу 2? попробуй использовать один из них. Во вторых в NPP оно вообще в формате XML, то есть можно сделать с #CR #LF а при загрузке в NPP заменить #CR #LF на "|".
3. Можно написать собственную программу, но без автоматической работы, а по горячей клавише, например вызываешь хоткей, прога берёт текст слева от курсора до пробела или знака препинания и начинаешь сравнивать его со своим списком/
4. SCI_AUTOCSETMAXHEIGHT(int rowCount) - Получить или установить максимальное количество строк, которые будут видны в списке автозавершения. Если в списке больше строк, чем установлено, то отображается вертикальная полоса прокрутки. По умолчанию используется значение 5.
5. Кстати в SciTE в AutoIt3 при автозавершении как раз таки предлагает укороченный список, то есть там видимо создано 26 списков по количеству букв, вводишь "f", показывает список только начинающиеся с "f", и далее двигается по списку, в то время как NPP показывает весь список. Вдобавок в SciTE (AutoIt3) цветная иконка позволяет нагляднее видеть тип ключевого слова. На счёт сортировки, думаю сразу надо сортировать, а не заставлять на каждое слово выполнять сортировку.

_______________
В свой плагин добавил комментарии, а то как то непонятно было
Цитата:
[color_regexp]
11=(?# HTML Link Label )(?<=>)[^<>]+?(?=</a>)
12=(?# HTML Link )(?<=href=").+?(?=")
3=.+
4=(?# e-mail )[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
5=(?# Link )https?://[\w.:]+/?(?:[\w/?&=.~;\+!*_#%-]+)
6=(?# шестнадц. число)\b[\dA-Fa-f]{3,}\b
7=(?# IP )(?:(?:2(?:[0-4]\d|5[0-5])|1?\d{1,2})\.){3}(?:(?:2(?:[0-4]\d|5[0-5])|1?\d{1,2}))
8=(?# число )(\d+)(((.|,)\d+)+)?
9=(?# операторы )["&()*/\\:|+<=>,.!%?^~{};\[\]-]+
10=(?# повтор слова )(?<![^\s\A])([А-яЁё]+)[\h]+\1
11=(?# заглавные подряд )[A-ZА-ЯЁ]{2,}

в сэмпл путь, подсветить путь в тексте
Цитата:
[Path]
; без кавычек
5=(?i)[a-z]:\\(?:[^\/:*?"<>|\v]+\\)*(?:[^\/:*?"<>|\s]+)?
; в кавычках
11=(?i)(?<=")[a-z]:\\[^\/:*?"<>|\v]*(?=")


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Вт июл 24, 2018 9:41 pm 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 168
Благодарил (а): 92 раз.
Поблагодарили: 5 раз.
Пункты репутации: 0
написал конвертор файлов функций автодополнения (Radasm и EasyCode) в xml
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Enumeration
  #hfileread
  #hfilewhrite
EndEnumeration
NewList Apiwords.s()
StandardFile$ = "C:\" ; задаём начальный файл+путь для отображения
Pattern$ = "Api(*.api)|*.api|Все файлы (*.*)|*.*"
Pattern = 0    
File$ = OpenFileRequester("Выберите файл для конвертации в xml", StandardFile$, Pattern$, Pattern)
filename$=GetFilePart(File$, #PB_FileSystem_NoExtension)
If File$
  filename$=GetFilePart(File$, #PB_FileSystem_NoExtension)
  filepath$=GetPathPart(File$)
  If ReadFile(#hfileread,File$ )
    While Eof(#hfileread)=0
      string.s=ReadString(#hfileread)
      AddElement(Apiwords())
      Apiwords()=string.s
    Wend
  EndIf
      If CreateFile(#hfilewhrite,filepath$+filename$+".xml")
        ForEach Apiwords()
          string.s=Apiwords.s()
          count=CountString(string.s,",")
          If count=0
            WriteString(#hfilewhrite,"<KeyWord name="+Chr(34) +string.s+ Chr(34)+" />"+Chr(13)+Chr(10))
          Else
            i=1
              position=FindString(string.s,",")
              function.s=Left(string.s,position-1)
              WriteString(#hfilewhrite,"<KeyWord name="+Chr(34)+ function.s+ Chr(34)+" func="+Chr(34)+"yes"+Chr(34)+">"+Chr(13)+Chr(10))
              WriteString(#hfilewhrite,"<Overload retVal="+Chr(34)+Chr(34)+" >"+Chr(13)+Chr(10))
              While i<count
                string.s=Mid(string.s,position+1)
                position=FindString(string.s,",")
                param.s= Left(string.s,position-1)
                 WriteString(#hfilewhrite,"<Param name="+Chr(34) +param.s+ Chr(34)+" />"+Chr(13)+Chr(10))
              i=i+1
              Wend
              param.s= Mid(string.s,position+1)
            WriteString(#hfilewhrite,"<Param name="+Chr(34) +param.s+ Chr(34)+" />"+Chr(13)+Chr(10))
            WriteString(#hfilewhrite,"</Overload>"+Chr(13)+Chr(10))
            WriteString(#hfilewhrite,"</KeyWord>"+Chr(13)+Chr(10))
          EndIf
        Next
         CloseFile(#hfilewhrite)
         MessageRequester("Информация", "Файл "+filename$+".xml"+" создан")
      EndIf
Else
    MessageRequester("Информация", "Запрос был отменён.", 0)
  EndIf
  CloseFile(#hfileread)



файл для файлов с расширением *.asm, помещать в папку npp\plugins\APIs. В самом npp должно быть выбрано "автозавершение функций" - только верхний пункт!


Вложения:
asm.rar [91.29 KiB]
Скачиваний: 21
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Вт июл 24, 2018 10:04 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
https://www.purebasic.com/documentation/xml/index.html

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Ср июл 25, 2018 10:56 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 231
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Как то лень, но ближайшая идея которую вынашиваю, чего не хватает к плагу - создание базы рег.выров. То есть по разделам (пути, текст-ошибки, интернет и т.д), а в них связка "имя_рег-выра"-"сам_регвыр". Опять же думаю, то ли в плаг встроить, то ли сделать отдельный плаг-библиотеку. Как известно в NPP многие просят связать регвыр с заменяемой частью. Вот тут эта проблема бы решилась, нажал "Добавить" - оба поля копируются в связку в базу, выбрал из базы, нажал "Использовать" (или вставить или двойной клик) и оба поля заполняются в окне поиска.
Часто ловил себя на том что после использования рег выров хочется ещё раз использовать а он уже ушёл внебытиё.
Сделал запрос функции


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3, 4

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB