purebasic.info

PureBasic forum
Текущее время: Сб сен 22, 2018 2:48 am

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




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

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 199
Благодарил (а): 20 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Пётр
Попробовал с одним параметром setInfo(*Npp.NppData) плаг выдал ошибку. Кстати, я не понимаю, почему на 7 должна работать, а на 8-ке не должна. Если бы была ошибка в коде с OSVersion(), но там верно.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Сб июн 23, 2018 12:24 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
AZJIO писал(а):
Попробовал с одним параметром setInfo(*Npp.NppData) плаг выдал ошибку.
С Notepad++ x64?

AZJIO писал(а):
не понимаю, почему на 7 должна работать, а на 8-ке не должна.
Дело не в версии винды, а в разрядности Notepad++. Похоже что в x86 структура передается по значению, а в x64 по ссылке. Код должен быть таким.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
 
  ProcedureCDLL setInfo(*NppHandle, *ScintillaMainHandle, *ScintillaSecondHandle)
    NppData\_nppHandle=*NppHandle
    NppData\_scintillaMainHandle=*ScintillaMainHandle
    NppData\_scintillaSecondHandle=*ScintillaSecondHandle
    ;
    ;<< Когда инфа Notepad++ изменилась >>
    ; Ваш код здесь
  EndProcedure
 
CompilerElse
 
  ProcedureCDLL setInfo(*Npp.NppData)
   
    CopyStructure(*Npp, NppData, NppData)
    ;
    ;<< Когда инфа Notepad++ изменилась >>
    ; Ваш код здесь
  EndProcedure
 
CompilerEndIf


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


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

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 199
Благодарил (а): 20 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Пётр
Вроде нашёл причину не поиска в ANSI, там код
Код:
1
regex=MakeScintillaText(regex1$, @regexLength)

который возвращает указатель на строку и его длину и преобразует строку в UTF-8. Как его не преобразовывать?
я попробовал изменить:
Код:
1
2
3
Color(@regex1$, Len(regex1$), n)
 
Procedure Color(*regex, regexLength, n)


но это вызвало ошибку. Там regexLength был как @regexLength, но в описании указано что просто должна быть передана длина с типом int


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Сб июн 23, 2018 5:08 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
AZJIO писал(а):
который возвращает указатель на строку и его длину и преобразует строку в UTF-8. Как его не преобразовывать?
Какая кодировка должна быть? UCS2?

AZJIO писал(а):
я попробовал изменить:
В плагине выложенном на форуме в архиве Highlight_10-.zip процедура имеет вид.
Код:
1
Procedure Color(regex1$, n)

Что было изменено за это время мне не известно.

AZJIO писал(а):
это вызвало ошибку
Какую?

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


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

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 199
Благодарил (а): 20 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Пётр писал(а):
Какая кодировка должна быть? UCS2?
оставаться такой, какая она преобразуется функцией SCI_ENCODEDFROMUTF8

Пётр писал(а):
Какую?
Ошибка вызова в строке 266 - функция ScintillaMsg, видимо, всвязи с неправильными параметрами

Пётр писал(а):
Что было изменено за это время мне не известно.
приаттачил


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Сб июн 23, 2018 6:39 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
AZJIO писал(а):
оставаться такой, какая она преобразуется функцией SCI_ENCODEDFROMUTF8
Тогда не нужно преобразовывать в строку, ведь в документации не написано в какой кодировке будет текст.

AZJIO писал(а):
Ошибка вызова в строке 266 - функция ScintillaMsg
Код:
1
ProcedureReturn Scintilla(*point, msg, param1, param2)

Во время компиляции в этой строке нет ошибок. Если речь об ошибке во время работы плагина, то вероятно сбой происходит не в плагине, а в редакторе Scintilla.

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


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

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 199
Благодарил (а): 20 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Пётр
там до этого длина определялась не символами, а байтами.
Код:
1
StringByteLength(text, #TextEncoding)


но тут указана длина текста в байтах для указанной кодировки. Кодировки нет, но данные же можно измерить в байтах? С другой стороны даже если мы указали длину короче реальной, то он должен подсветить допустим пол-слова. И у меня подозрение, что если ранее кодировалось в UTF-8 и искалось в UTF-8, то хотя бы это работало, сейчас непонятно в какой кодировке, да ещё и ошибку выдаёт.

я не понимаю это
Код:
1
2
3
4
5
6
7
8
9
Procedure MakeScintillaText(text.s, *sciLength.Integer=0)
        Static sciLength : sciLength=StringByteLength(text, #TextEncoding)
        Static sciText.s : sciText = Space(sciLength)
        If *sciLength : *sciLength\i=sciLength : EndIf ;<--- Возвращает длину буфера scintilla  (требуется для определенной команды scintilla)
        PokeS(@sciText, text, -1, #TextEncoding)
        ProcedureReturn @sciText
EndProcedure
 
regex=MakeScintillaText(regex1$, @regexLength)

далее по тексту используется regexLength

делаю аналог
Код:
1
2
3
4
5
6
7
8
9
Num = 135
 
Procedure Name(*Num.Integer)
        Num = 5
        *Num\i=Num
EndProcedure
 
Name(@Num)
Debug Num


переделал, заработало

в справке
Код:
1
2
*Pointer.String
*Pointer\s

откуда берутся тексты "String" и "s" не одно и тоже


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
AZJIO писал(а):
Кодировки нет, но данные же можно измерить в байтах?
Длина в байтах зависит от кодировки.
Код:
1
2
3
4
text.s = "Строка текста StringByteLength"
Debug StringByteLength(text, #PB_Ascii)
Debug StringByteLength(text, #PB_UTF8)
Debug StringByteLength(text, #PB_Unicode)

Не зная ее вычислить можно разве что по завершающему нулевому байту (или байтам). Есть функция MemoryStringLength, но кодировка должна быть известна.

AZJIO писал(а):
откуда берутся тексты "String" и "s" не одно и тоже
String это структура которая объявлена так.
Код:
1
2
3
Structure String
  s.s
EndStructure

Ее можно увидеть, поместив текстовый курсор на слово String и открыв окно "Просмотр структур" (меню Инструменты --> Просмотр структур).

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


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

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 199
Благодарил (а): 20 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Пётр
Добил!
тут вместо regex там же был указатель из функции, поэтому *regex
Код:
1
firstMatchPos=ScintillaMsg(*sciptr, #SCI_SEARCHINTARGET, regexLength, *regex)


сразу заработал ANSI, но не UTF-8
поэтому предыдущую функцию подстроил для вызова в UTF-8
Код:
1
Color(MakeScintillaText(regex1$, @regexLength), @regexLength, n)


то есть MakeScintillaText возвращает указатель, как мне нужно и одновременно конвертирует в UTF-8.


______________
ещё одна подсветка для Highlight_Sample.ini, непосредственно подсветка функций SCI_... Скопировать функции в Notepad++ и подсветить
Цитата:
[SCI_]
3=(?m)(?<=SCI_)\w+?\b
5=\bSCI_
14=(?<=SCI_)SET
10=(?<=SCI_)GET
7=(?<=\bint) \w+
8=\bint\b
7=(?<=\bbool) \w+
12=\bbool\b
11=\*\w+
5=(const )?char(?= \*)
9=[()→,]
6=<unused>


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

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 199
Благодарил (а): 20 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Пётр
1. Я тут нашёл пример на AutoIt3 с использованием не индикаторов а собственного лексера с использованием SCN_STYLENEEDED, для необходимости стилизовать изменённую строку. там же он даёт ссылку, что переделал оригинальный пример под AutoIt3.

2. Также я пока пытаюсь понять способ определения второго окна скинтиллы на AutoIt3
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Func _npp_GetCtrlInstance()
        Local $HndCtrl_1 = ControlGetHandle('[CLASS:Notepad++]', "", "[CLASSNN:Scintilla1]")
        Local $HndCtrl_2 = ControlGetHandle('[CLASS:Notepad++]', "", "[CLASSNN:Scintilla2]")
        If Not $HndCtrl_1 Then Return ''
        Local $state1 = BitAnd(WinGetState($HndCtrl_1), 2)
        Local $state2 = BitAnd(WinGetState($HndCtrl_2), 2)
        If Not $state2 Then
                Return 1
        ElseIf Not $state1 Then
                Return 2
        ElseIf $state1 And $state2 Then
                Local $size1 = WinGetPos($HndCtrl_1)
                Local $size2 = WinGetPos($HndCtrl_2)
                If IsArray($size1) And IsArray($size2) Then
                        If $size1[1] < $size2[1] Then
                                Return 1
                        Else
                                Return 2
                        EndIf
                EndIf
        EndIf
        Return ''
EndFunc


Пока хоть и работает но нет зацепки. Суть получили 2 хендла, если первого нет, то выпрыг (ошибка), далее берём с обоих статус видимости, если нет второго окна, то очевидно 1-й, если нет 1-го, то очевидно второй (неужели видимость подразумевается активность, они оба видимы), далее "иначе" если оба видимы (что естественно) берём с обоих позиции и размер и далее если Y-позиция второго больше 1-го, тогда первой окно иначе второе. Опять же окна можно делить горизонтально и вертикально, значит надо сравнивать суммы координат X и Y, у кого больше тот второй, и тут опять непонятки - это не определяет активность окна, а только расположение, они оба могут существовать но выбор разный. Надо потестить, и получить все значения в консоль, чтобы разгадать.

Хватило времени только почитать справку скинтиллы и сделать чёрный стиль, чтобы читать в телефоне на работе.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: плагин подсветки для Notepad++
СообщениеДобавлено: Чт июл 05, 2018 9:16 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
AZJIO писал(а):
Я тут нашёл пример на AutoIt3 с использованием не индикаторов а собственного лексера
Для отображения измененных, но не сохраненных строк, индикаторы более подходящие.

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


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

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 199
Благодарил (а): 20 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Тут мне ответили, что надо использовать NPPM_GETCURRENTSCINTILLA, попробовал, пока не работает. Константы взял из nppUDF.au3


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Про смене редактора отправляется сообщение с кодом 5.

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


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

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 199
Благодарил (а): 20 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
По крайней мере я сделал типа консоль, просто делаю вывод результата в EditorGadget.
В итоге при смене окна Scintilla присылаемые цифры не меняются
5.0.61080832
5.0.61080832
5.0.61080832
5.0.61080832


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
AZJIO писал(а):
сделал типа консоль
Проще было использовать стандартную консоль. В AttachProcess добавить строку OpenConsole() и где нужно выводить текст функцией PrintN.
Этот код.
Код:
1
2
3
4
5
6
                If OSVersion() < #PB_OS_Windows_7 ; а что у нас с Vista?, может перенаправление сработает
                        PathConfig$ = GetHomeDirectory() + "Application Data\Notepad++\plugins\config"
                Else
                        PathConfig$ = GetHomeDirectory() + "AppData\Roaming\Notepad++\plugins\config"
                        ;               MessageRequester("Сообщение", "AppData" + #CRLF$ + doLocalConf$)
                EndIf

Можно упростить.
Код:
1
PathConfig$ = GetUserDirectory(#PB_Directory_ProgramData)+"Notepad++\plugins\config"

И где-то ближе к DataSection не помешало бы добавить строку.
Код:
1
IncludePath "..\Config"

Исходник находится в папке Source и необходимо задать путь к папке Config где находятся ini файлы.

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


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

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


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

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


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

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