purebasic.info

PureBasic forum
Текущее время: Вт мар 26, 2019 11:52 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Плагин Notepad++ обработка теста
СообщениеДобавлено: Ср фев 13, 2019 3:27 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 422
Благодарил (а): 32 раз.
Поблагодарили: 46 раз.
Пункты репутации: 0
Ковыряю плаг, чтобы скопировать текст, выполнить с ним некие действия и вставить обратно. Вроде как даст мощные возможности.

Добавил "Вставить HTML-таблицу..."
Добавил "Выделенное в поле замены" и "Вставка текста в концы строк".
Добавил "Вставить дату" с форматированной строкой в ini.
Добавил "Уникальные строки, которых нет в буфере обмена".
Добавил "Вставить имя файла".

Исходник в комплекте
NPP_TextA

Для даты не использовал GetLocaleInfo, может быть в будущем, но пока нет, хотя есть и примеры её использования.

Изображение


Последний раз редактировалось AZJIO Пт мар 08, 2019 10:07 am, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 3:51 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 422
Благодарил (а): 32 раз.
Поблагодарили: 46 раз.
Пункты репутации: 0
В шаблоне плага присутствует следующий код:
Код:
1
2
3
4
5
\_pShortcutKey=AllocateStructure(ShortcutKey)
\_pShortcutKey\_isCtrl=#True
\_pShortcutKey\_isShift=#True
\_pShortcutKey\_isAlt=#True
\_pShortcutKey\_key=#VK_NEXT


Очевидно что это назначение горячих клавиш, это не работает. В интерфейсе программы используется галка для клавиш модификаторов и комбо для выбора, собственно и структура так построена, выбор #True или #False для 3-х модификаторов и собственно клавиша. Пробовал менять, нашёл таблицу кодов клавиш, допустим D = $44, учитывая что комбинации с 2-мя и 3-мя модификаторам скорее всего не заняты, то есть конфликта не создал, не пытался регистрировать клавишу на уже созданную допустим самим Notepad++ и постоянно не работает, не отображается в меню и нет реакции на нажатие.

Смотрю структуру в официальном шаблоне плагина
Код:
1
2
3
4
5
6
7
struct ShortcutKey
{
        bool _isCtrl;
        bool _isAlt;
        bool _isShift;
        UCHAR _key;
};


Он имеет тип bool, смотрю размер, в C++ гугл пишет не определён, смотрю в AutoIt3, где размеры задаются такие же как в C++ там указан "BOOL 32 битное целое", а в примере для PureBasic указано в структуре тип b = 1 байт (_isCtrl.b). Может в этом дело?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 4:39 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 780
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
AZJIO писал(а):
В шаблоне плага присутствует следующий код:
Код:
1
2
3
4
5
\_pShortcutKey=AllocateStructure(ShortcutKey)
\_pShortcutKey\_isCtrl=#True
\_pShortcutKey\_isShift=#True
\_pShortcutKey\_isAlt=#True
\_pShortcutKey\_key=#VK_NEXT


Очевидно что это назначение горячих клавиш, это не работает. В интерфейсе программы используется галка для клавиш модификаторов и комбо для выбора, собственно и структура так построена, выбор #True или #False для 3-х модификаторов и собственно клавиша. Пробовал менять, нашёл таблицу кодов клавиш, допустим D = $44, учитывая что комбинации с 2-мя и 3-мя модификаторам скорее всего не заняты, то есть конфликта не создал, не пытался регистрировать клавишу на уже созданную допустим самим Notepad++ и постоянно не работает, не отображается в меню и нет реакции на нажатие.

Смотрю структуру в официальном шаблоне плагина
Код:
1
2
3
4
5
6
7
8
struct ShortcutKey
 
{
        bool _isCtrl;
        bool _isAlt;
        bool _isShift;
        UCHAR _key;
};


Он имеет тип bool, смотрю размер, в C++ гугл пишет не определён, смотрю в AutoIt3, где размеры задаются такие же как в C++ там указан "BOOL 32 битное целое", а в примере для PureBasic указано в структуре тип b = 1 байт (_isCtrl.b). Может в этом дело?

Всё может быть а типа размер офф. структуры в мессагу вывести из плагина можно и посмотреть размер? :roll:
PS:Если так сделано то топорно как то использовать по 4 байта для #True с #False. :D


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 5:40 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 422
Благодарил (а): 32 раз.
Поблагодарили: 46 раз.
Пункты репутации: 0
Сергейчик писал(а):
Всё может быть а типа размер офф. структуры в мессагу вывести из плагина можно и посмотреть размер? :roll:
PS:Если так сделано то топорно как то использовать по 4 байта для #True с #False. :D
Никак. Я пробовал задавать .i и .c тоесть 4 байта и 2, вместо 1, результата нет. И вместо .u попробовал .i, там он закомментирован, не зря наверено. Результат 0.
Там структура получается в конце и если она не совпадает с размером/разметкой затребованной, то можем получить отсутствие, но при этом остальное всё работает. Ещё попробовал убрать \_pShortcutKey=AllocateStructure(ShortcutKey), подумав что если мы создаём экземпляр структуры не выделяем данные, то почему выделяем на составную часть структуры, но в итоге сбой Notepad++. Метод тыка не помог.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 6:00 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 780
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
AZJIO писал(а):
Сергейчик писал(а):
Всё может быть а типа размер офф. структуры в мессагу вывести из плагина можно и посмотреть размер? :roll:
PS:Если так сделано то топорно как то использовать по 4 байта для #True с #False. :D
Никак. Я пробовал задавать .i и .c тоесть 4 байта и 2, вместо 1, результата нет. И вместо .u попробовал .i, там он закомментирован, не зря наверено. Результат 0.
Там структура получается в конце и если она не совпадает с размером/разметкой затребованной, то можем получить отсутствие, но при этом остальное всё работает. Ещё попробовал убрать \_pShortcutKey=AllocateStructure(ShortcutKey), подумав что если мы создаём экземпляр структуры не выделяем данные, то почему выделяем на составную часть структуры, но в итоге сбой Notepad++. Метод тыка не помог.

Что то странно выделяешь память под структуру,может так надо? :roll:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
Structure ShortcutKey
         _isCtrl.i;
        _isAlt.l;
        _isShift.i;
         _key.u
EndStructure
 
*pShortcutKey.ShortcutKey=AllocateStructure(ShortcutKey)
*pShortcutKey\_isCtrl=#True
*pShortcutKey\_isShift=#True
*pShortcutKey\_isAlt=#True
*pShortcutKey\_key=#VK_NEXT
 
 
FreeStructure(*pShortcutKey)
 


или так
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
Structure ShortcutKey
         _isCtrl.i;
        _isAlt.l;
        _isShift.i;
         _key.u
EndStructure
 
_pShortcutKey.ShortcutKey=AllocateStructure(ShortcutKey)
_pShortcutKey\_isCtrl=#True
_pShortcutKey\_isShift=#True
_pShortcutKey\_isAlt=#True
_pShortcutKey\#VK_NEXT
 
 
FreeStructure(_pShortcutKey)
 


или она как бы условно статическая(постоянно место под данные в проге)?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Structure ShortcutKey
         _isCtrl.i;
        _isAlt.l;
        _isShift.i;
         _key.u
EndStructure
 
_pShortcutKey.ShortcutKey
_pShortcutKey\_isCtrl=#True
_pShortcutKey\_isShift=#True
_pShortcutKey\_isAlt=#True
_pShortcutKey\#VK_NEXT
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 6:46 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 780
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
Посмотрел бегло плаг textA(да даже несмотрел)
Ненравится мне эта процедура. :roll:
Код:
1
2
3
4
5
6
7
8
9
 
; какой то аналог предыдущей процедуры
Procedure TextToAscii(text.s)
        Static sciLength : sciLength=StringByteLength(text, #PB_UTF8) ; вычисляем длину текста в файтах для #PB_UTF8
        Static sciText.s : sciText = Space(sciLength) ; Создаём переменную нужной длины
        PokeS(@sciText, text, -1, #PB_Ascii)              ; Вставляем текст в область памяти, определяемой указателем в кодировке #PB_UTF8
        ProcedureReturn @sciText
EndProcedure
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 6:51 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 422
Благодарил (а): 32 раз.
Поблагодарили: 46 раз.
Пункты репутации: 0
Сергейчик
Глянь исходник чтобы не гадать, тем более я в твоих вариантах не вижу логики.

Вот тебе полноценно все что надо для понимания
Код:
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
Structure ShortcutKey Align #PB_Structure_AlignC
        _isCtrl.b
        _isAlt.b
        _isShift.b
        _key.u ;i
EndStructure
 
Structure FuncItem Align #PB_Structure_AlignC
        _itemName.s{64}
        *_pFunc
        _cmdID.i
        _init2Check.b
        *_pShortcutKey.ShortcutKey
EndStructure
 
        With FuncsArray(0)                                      ; 1) пункт меню с быстрой клавишой
                \_itemName=aLng(2)                              ; пункт в меню плагинов
                \_pFunc=@Item1()                                ; имя функции вызываемой пунктом меню
                \_pShortcutKey=AllocateStructure(ShortcutKey)
                \_pShortcutKey\_isCtrl=#True
                \_pShortcutKey\_isShift=#False
                \_pShortcutKey\_isAlt=#True
;               \_pShortcutKey\_key=#VK_NEXT
                \_pShortcutKey\_key=#VK_F7
        EndWith    ;2) разделитель в меню


Видишь в конце *_pShortcutKey.ShortcutKey указатель на структуру? То есть структура ShortcutKey является частью сструктуры FuncItem. То есть это нормально что если в структуре даёшь указатель на структуру, то надо выделить ей память? А может попробовать структуру ShortcutKey вставить в FuncItem и убрать указатель?

Сергейчик писал(а):
Ненравится мне эта процедура.
главное что работает


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 6:56 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 780
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
В той функции сам подумай щитать байты utf8(с разной длинной байт на символ обсурдно)
для этого и делал на фасме подсчёт посимвольно. :D
Код:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
Procedure Len_UTF8R(*stroka)
  !push esi
  !mov esi,[esp+8]
  !xor eax,eax
  !uu:
 !cmp byte[esi],0h
  !jz ecssit;если конец строки выходим
  !add dword eax,1
  ;;=============проверка на 1 байт
  !cmp byte[esi],127
  !ja @f ;больше чем 1 байтный символ,переходим на проверку 2 байтного символа utf-8
  ;;====это 1 байтный символ
  ;1
  !add esi,1
  !jmp uu;смотрим следущий символ
  ;;===============проверка на 2 байта
  !@@:
  !cmp byte[esi],223
  !ja @f;больше чем 2 байтный символ
  ;2
  !add esi,2
  ;Debug 2
  !jmp uu
  ;
  ;;===============проверка на 3 байта
  !@@:;>3
  !cmp byte[esi],239
  !ja @f
  ;3
  !add esi,3
  ;Debug 3
  !jmp uu
  ;;===============проверка на 4 байта
  !@@:
  !cmp byte[esi],247
  !ja @f
  ;4
  !add esi,4
  ;Debug 4
  !jmp uu
  ;;;===============проверка на 5 байта
  !@@:
  !cmp byte[esi],251
  !ja @f
  ;5
  !add esi,5
  ;Debug 5
  !jmp uu
  ;;;===============проверка на 6 байта
  !@@:
  !cmp byte[esi],253
  !ja @f
  ;6
  !add esi,6
  !jmp uu
  ;;;===============проверка на 7 байта
  !@@:
  !cmp byte[esi],254
  !ja @f
  ;7
  !add esi,7
  !jmp uu
  ;;;===============проверка на 8 байта
  !@@:
  ;8
  !add esi,8
  !jmp uu
  ;
  !ecssit:
 !pop esi
  ;
  !retn 4
EndProcedure
 
; какой то аналог предыдущей процедуры
Procedure TextToAscii(text.s)
        Static sciLength=Len_UTF8R(@text) ; вычисляем длину текста в символах для #PB_UTF8
        Static sciText.s = Space(sciLength) ; Создаём переменную нужной длины тут бы гарантированно создать под ascii(ато может делить нужно пополам если выделит под ytf16)
        PokeS(@sciText, text, -1, #PB_Ascii)              ; Вставляем текст в область памяти, определяемой указателем в кодировке #PB_UTF8
        ProcedureReturn @sciText
EndProcedure
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 7:14 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 422
Благодарил (а): 32 раз.
Поблагодарили: 46 раз.
Пункты репутации: 0
Сергейчик писал(а):
В той функции сам подумай щитать байты utf8(с разной длинной байт на символ обсурдно)
Ну я посчитал байты чтобы задаваемая ширина была явно шире, хотя да, зачем делать шире если можно взять Len и вычислить идеально. С этим Space у меня куча вопросов, куда девается оставшаяся неиспользуемая часть? Утечка памяти? Во вторых я выделил память в локальной области функции, а передал указатель в родительскую, в родительской данные прочитались и обычно я должен освободить память. И кстати как память освобождается? указатель это число начала, если я загнал в память шириной на 100 символов строку на 10 символов, освобождать будет до Null? То есть 10 символов? А 90 куда?

AZJIO писал(а):
А может попробовать структуру ShortcutKey вставить в FuncItem и убрать указатель?
это проверил не помогло, даже Notepad++ выдал ошибку.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 7:15 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 780
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
AZJIO писал(а):
Сергейчик
Глянь исходник чтобы не гадать, тем более я в твоих вариантах не вижу логики.

Вот тебе полноценно все что надо для понимания
Код:
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
Structure ShortcutKey Align #PB_Structure_AlignC
        _isCtrl.b
        _isAlt.b
        _isShift.b
        _key.u ;i
EndStructure
 
Structure FuncItem Align #PB_Structure_AlignC
        _itemName.s{64}
        *_pFunc
        _cmdID.i
        _init2Check.b
        *_pShortcutKey.ShortcutKey
EndStructure
 
        With FuncsArray(0)                                      ; 1) пункт меню с быстрой клавишой
                \_itemName=aLng(2)                              ; пункт в меню плагинов
                \_pFunc=@Item1()                                ; имя функции вызываемой пунктом меню
                \_pShortcutKey=AllocateStructure(ShortcutKey)
                \_pShortcutKey\_isCtrl=#True
                \_pShortcutKey\_isShift=#False
                \_pShortcutKey\_isAlt=#True
;               \_pShortcutKey\_key=#VK_NEXT
                \_pShortcutKey\_key=#VK_F7
        EndWith    ;2) разделитель в меню


Видишь в конце *_pShortcutKey.ShortcutKey указатель на структуру? То есть структура ShortcutKey является частью сструктуры FuncItem. То есть это нормально что если в структуре даёшь указатель на структуру, то надо выделить ей память? А может попробовать структуру ShortcutKey вставить в FuncItem и убрать указатель?

Сергейчик писал(а):
Ненравится мне эта процедура.
главное что работает



Да если *то скорее будет переменная под адрес памяти и соответственно нужно будет её выделить записать в неё адрес.
непонятно что то _itemName.s{64} может []
а это что FuncsArray(0) массив какой?
Вот что подумал _pShortcutKey\_isCtrl=#True 32 бита наверное для 2-х парных символов utf16. :roll:
Память freememory(указатель начала выделения)удалить должно всё что выделено
PS:вобщем смысла не вижу создавать массив структур где в первой структуре переменная под указатель на другую структуру так как придётся для её использования каждый раз выделять под неё память на каждый индекс(поле) массива первой,проще если эта структура не динамическая убрать * и использовать как полноценное поле в нутри первой структуры,а если уж хочется её динамичиски иметь то вынести как отдельную единицу к тому же освободится переменная под указатель на неё. :roll:


Последний раз редактировалось Сергейчик Чт фев 21, 2019 7:48 am, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 7:23 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 422
Благодарил (а): 32 раз.
Поблагодарили: 46 раз.
Пункты репутации: 0
Сергейчик писал(а):
непонятно что то _itemName.s{64} может []

Это было в шаблоне, могу изменить и посмотреть что будет, явно должно [] ограничение длины строки, но ведь компилятор молчит.

Сергейчик писал(а):
а это что FuncsArray(0) массив какой?

Да массив пунктов меню смотри ниже куча
Код:
1
2
3
4
With FuncsArray(1)
        \_itemName=aLng(3)
        \_pFunc=@Item2()
EndWith


Это массив структур, где элементы меню, связанная функция и хоткей отправляются в NPP по адресу памяти.
Сергейчик писал(а):
Вот что подумал _pShortcutKey\_isCtrl=#True 32 бита наверное для 2-х парных символов utf16. :roll:
Константа #True является скорее всего числом .i

Сергейчик писал(а):
Память freememory(указатель начала выделения)удалить должно всё что выделено
Откуда он знает ширину выделения если известен только адрес?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 8:00 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 780
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
Так с указателем и без. :roll:
Сергейчик писал(а):
Память freememory(указатель начала выделения)удалить должно всё что выделено
Откуда он знает ширину выделения если известен только адрес?[/quote]
Там всякие типа магические словечки могут быть в конце. :D
Вобще это процедуры операционки и что она там пишит и куда?но делает так и создаёт и расширяет и удаляет. :roll:


Вложения:
Комментарий к файлу: картинка
пример.png [11.24 KiB]
Скачиваний: 0


Последний раз редактировалось Сергейчик Чт фев 21, 2019 8:06 am, всего редактировалось 1 раз.
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 8:04 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 422
Благодарил (а): 32 раз.
Поблагодарили: 46 раз.
Пункты репутации: 0
Сергейчик писал(а):
Так с указателем и без. :roll:

не лень же тебе картинки рисовать, я уже ответил на этот вопрос, может структура и рабочая, но не для NPP, он там в коде освобождает горячие клавиши с помощью очистки выделенной памяти
Код:
1
2
3
For i=0 To ArraySize(FuncsArray())
        FreeStructure(FuncsArray(i)\_pShortcutKey)
Next


Я закоментировал эти строки, встроил структуру вместо указателя, укоротил вложенные пути, проверил, сбой, вернул назад. В теории не должно, я же поля не менял, размер тот же, только указателя не было а он возможно имеет значение для NPP.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 8:39 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 780
Благодарил (а): 2 раз.
Поблагодарили: 37 раз.
Пункты репутации: 9
:D
Код:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
Procedure Len_UTF8R(*stroka)
  !push esi
  !mov esi,[esp+8]
  !xor eax,eax
  !uu:
 !cmp byte[esi],0h
  !jz ecssit;если конец строки выходим
  !add dword eax,1
  ;;=============проверка на 1 байт
  !cmp byte[esi],127
  !ja @f ;больше чем 1 байтный символ,переходим на проверку 2 байтного символа utf-8
  ;;====это 1 байтный символ
  ;1
  !add esi,1
  !jmp uu;смотрим следущий символ
  ;;===============проверка на 2 байта
  !@@:
  !cmp byte[esi],223
  !ja @f;больше чем 2 байтный символ
  ;2
  !add esi,2
  ;Debug 2
  !jmp uu
  ;
  ;;===============проверка на 3 байта
  !@@:;>3
  !cmp byte[esi],239
  !ja @f
  ;3
  !add esi,3
  ;Debug 3
  !jmp uu
  ;;===============проверка на 4 байта
  !@@:
  !cmp byte[esi],247
  !ja @f
  ;4
  !add esi,4
  ;Debug 4
  !jmp uu
  ;;;===============проверка на 5 байта
  !@@:
  !cmp byte[esi],251
  !ja @f
  ;5
  !add esi,5
  ;Debug 5
  !jmp uu
  ;;;===============проверка на 6 байта
  !@@:
  !cmp byte[esi],253
  !ja @f
  ;6
  !add esi,6
  !jmp uu
  ;;;===============проверка на 7 байта
  !@@:
  !cmp byte[esi],254
  !ja @f
  ;7
  !add esi,7
  !jmp uu
  ;;;===============проверка на 8 байта
  !@@:
  ;8
  !add esi,8
  !jmp uu
  ;
  !ecssit:
 !pop esi
  ;
  !retn 4
EndProcedure
Procedure MakeScintillaText(text.s, Integer.i=-1)
Static sciLength.i
Static sciText.s
if Integer=-1;размер явно не задаётся то считаем размер нового текста автоматом
Integer=Len_UTF8R(@text)
endif
;в пративном случае размер явно задаётся от 0 и выше записываемых символов нового текста
If Integer>0;если количество символов нового текста не ноль символов
  If sciLength<>Integer;смотрим предыдущее количество символов и есле не равны
    sciLength=Integer;записываем новое количество символов
    sciText = Space(sciLength) ; Создаём буфер под новую строку
  EndIf
;если количество символов равно предыдущему буферу то оставляем его как есть
        PokeS(@sciText, text, -1, #TextEncoding) ; пишем текст в область памяти, определяемой указателем на статический буфер
        ProcedureReturn @sciText ; возвращаем указатель на текст
Else ;новая строка без символов то очищаем строку из статического буфера и ставим длинну 0 символов
  sciText=""
  sciLength=0
ProcedureReturn @sciText
EndIf
EndProcedure
; какой то аналог предыдущей процедуры
Procedure TextToAscii(text.s);не какой то а подсчёт нового буфера под текст чтобы его записать  основывается на подсчёте количества символов  тексте на авто подсчёте и задать его динну из вне процедуры нельзя.:)
Static sciText.s
Static sciLength=Len_UTF8R(@text) ; вычисляем длину текста в символах для #PB_UTF8
if  sciLength>0 ;если новый текст больше 0 символов
sciText = Space(sciLength) ; Создаём переменную нужной длины тут бы гарантированно создать под ascii(ато может делить нужно пополам если выделит под ytf16)
        PokeS(@sciText, text, -1, #PB_Ascii)              ; Вставляем текст в область памяти, определяемой указателем в кодировке #PB_UTF8
        ProcedureReturn @sciText
else
        sciText=""
        ProcedureReturn @sciText
endif
EndProcedure
 


Только два текста при статических переменных в процедурах как 2-ва отдельных работают а не единое целое. :roll:


Последний раз редактировалось Сергейчик Чт фев 21, 2019 4:55 pm, всего редактировалось 9 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Плагин Notepad++ обработка теста
СообщениеДобавлено: Чт фев 21, 2019 11:20 am 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 422
Благодарил (а): 32 раз.
Поблагодарили: 46 раз.
Пункты репутации: 0
Сергейчик писал(а):
непонятно что то _itemName.s{64} может []

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


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

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


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

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


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

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