Scripts discussion (1)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

VladSh
Значит если нужно именно в окне редактирования, то прямая дорога к его сообщениям AEM_*
В данном случае Вам нужно сообщение AEM_FINDTEXT - собственно оно и выполняет поиск(получает указания что искать, и возвращает место), только сам редактор ещё и отмечает выделение и скроллит окно, а Вы будете делать что Вам нужно. Подробнее смотрите исходники файлы edit.c edit.h akeledit.c akeledit.h

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

VladSh
Или EM_FINDTEXTEXW.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Instructor wrote:Так и передавать. А на принимающей стороне обрабатывать esc-последовательности.
Не пойму, как это сделать..
Если текст = "\r", то просто заменять его на \r?

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

VladSh
Кусок кода из

Code: Select all

      else if (bEscSequences)
      {
        //Esc-sequences
        pReplaceWithEsc=pReplaceWithEsc.replace(/\\\\/g, "\0");
        if (pReplaceWithEsc.search(/\\[^rnt]/g) != -1)
        {
          AkelPad.MessageBox(hWndDialog, GetLangString(STRID_SYNTAXERROR), pScriptName, 16 /*MB_ICONERROR*/);
          return 0;
        }
        pReplaceWithEsc=pReplaceWithEsc.replace(/\\r\\n|\\r|\\n/g, "\n");
        pReplaceWithEsc=pReplaceWithEsc.replace(/\\t/g, "\t");
        pReplaceWithEsc=pReplaceWithEsc.replace(/\0/g, "\\");
      }
.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Instructor wrote:Кусок кода из SearchReplace.js [...]
Спасибо, завернул в

Code: Select all

function escSequencesProcessing(pText)
{
	if (pText)
	{
		pText = pText.replace(/\\\\/g, "\0");
	//	if (pText.search(/\\[^rnt]/g) != -1)
	//	{
			pText = pText.replace(/\\r\\n|\\r|\\n/g, "\r");
			pText = pText.replace(/\\t/g, "\t");
			pText = pText.replace(/\0/g, "\");
	//	}
	}
	return pText;
}
.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Столкнулся с такой проблемой. Необходимо выделить "стилем" в тексте определенное слово. Но слово это в тексте встречается в разных формах: name, NAME, Namе, ... Пытался сделать разными способами... получается следующее - выделяется слово "name", но когда доходит очередь до выделения "NAME" предыдущее выделение сбрасывается... может я иду не по тому путю?

Code: Select all

With AkelPad
pName = "name"
    Call .SetSel(0, -1)
    SumText = AkelPad.GetSelText()
   If InStr(SumText, pName) > 0 Then Call StrColor(pName,"#94FEFE", "#000000")
   If InStr(SumText, UCase(pName)) > 0 Then Call StrColor(UCase(pName), "#FFFF00", "#000000")
End With

Function StrColor(cName, cl1, cl2)
  With AkelPad
    cSelStart = InStr(Replace(SumText, vbNewLine, "1"), cName)
    Call .SetSel(cSelStart - 1, cSelStart + Len(cName) - 1)
    Call .Call("Coder::HighLight", 2, cl1, cl2 , 1, 0, 1)
  End With
End Function
попробуйте на тексте

Code: Select all

1111name1111
1111NAME1111
хотелось бы чтобы выделилось и "name" и "NAME"

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Andrey_A_A
Call("Coder::HighLight", 2, "#000000", "#9BFF9B", 0, 0, 1)

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Спасибо всё оказалось просто, хотя Coder-Rus.txt читал, перечитал, а НОЛИК-то и не приметил

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

На прошлой неделе затеял изменение своих скриптов... Поменялось почти всё; хотелось бы отметить те скрипты, в которых добавились какие-либо важные или удобные штуки, и в которых были устранены досадные мелочи:
OpenHelpString.js - добавлена поддержка автоматического определения слова, на котором установлен курсор, соответственно этот функционал распространяется на все использующие скрипты;
InsertInetStyleQuote.js в связи с расширением функционала был переименован в InsertBefore.js - вставка пункта параграфа теперь может производиться и по выделенному тексту; вставляемый текст может настраиваться в аргументах;
CreateSubParagraph.js - наконец-то правильно сделан перенос части строки, расположенной справа от каретки, на новую строку;
HTMLul.js -> XMLStructure.js; структура настраивается в аргументах;
HTMLDelBlock.js -> XMLDelBlock.js; кроме указания конкретных удаляемых тэгов в аргументах добавлена возможность автоматического определения удаляемого тэга по позиции, установленной пользователем, каретки;
BlockSelect.js сильно изменился, - теперь тэги можно передавать в аргументах; скрипт очень помогает, - см. примеры вызовов в теле скрипта;
OpenByLSC.js - теперь поддерживается и директория ..\Scripts\Include\.

Добавились скрипты:
RecalcLineNumbers.js - пересчёт номеров пунктов; при перепросчёте учитывается уровень вложенности; поддерживается пересчёт номеров с определённой строки либо только для выделенных строк;
ScriptNameCopyAsBBCode.js - копирует название скрипта в BBCode, подставляя в URL первую найденную в окне редактирования ссылку (нужно для быстрого составления BBCode текущего скрипта для выкладки в сообщения форума).

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

изменение своих скриптов...
Вопрос или просьба ко всем скринописателем. Можно ли как-то одинаково указывать в комментариях позиции: Атор, Версия
Дело в том, что скрипты частенько изменяются\улучшаются и не всегда помнишь что обновлял, а что нет.Я написал скрипт (позже выложу) где в пользовательских колонках Total Commander можно просматривать Автора, Версию, ссылку, е-майл. Но трудность заключается (и не только со скриптами на этом форуме) в том, что не все записывают хотя бы два параметра - Автора и Версию или дату изменения.
Кстати предложение к первому посту "Scripts collection"(где список авторов и их скриптов) Указывать версию, или дату изменения. Или Сделать отдельную страницу, показывающую список всех изменённых скриптов с определённой даты. (в поиске например)
Я понимаю, что ряду писателей всё равно, но всё же хотя бы версию... ведь всё что здесь делается - это экономия времени...

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Instructor
Есть старая добрая функция SelCompleteLine, но я заметил, что некоторые скрипты работают не совсем так, как хотелось бы...
А хотелось бы чтобы они работали не по "строкам", которые отображает редактор, а по целым строкам-предложениям, т.е. хотелось бы ещё функцию SelCompleteПредложение, по аналогии с тройным кликом на предложении.

P.S. Кстати, тройной клик опять почему-то стал глючить.. - вроде бы выделяется, но после третьего клика сбрасывается. Иногда (где-то 20-30%) работает нормально (не сбрасывается).

Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »


Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

VladSh wrote:OpenHelpString.js

Code: Select all

   pContent = AkelPad.ReadFile(pFile); 
    if (pContent)
pContent больше нигде не используется - не сильно халатно? :)
VladSh wrote:ScriptNameCopyAsBBCode.js

Code: Select all

var pURL = AkelPad.GetTextRange(0, -2);      //берём до конца файла
Если в тексте нет перевода строки на последней строке, то последний символ не захватится - используем "AkelPad.GetTextRange(0, -1)".
VladSh wrote:P.S. Кстати, тройной клик опять почему-то стал глючить.. - вроде бы выделяется, но после третьего клика сбрасывается. Иногда (где-то 20-30%) работает нормально (не сбрасывается).
Отключаем "SmartSel::NoSelOEL".
Andrey_A_A wrote:Кстати предложение к первому посту "Scripts collection"(где список авторов и их скриптов) Указывать версию, или дату изменения...
Это ручная работа, меняем по мере возможности: я и VladSh. На той странице есть архивы тех людей, которые наиболее часто менят скрипты. В архивах фиксируется дата скрипта.

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Infocatcher
Спасибо за наводку, попробую разобраться :)


Instructor
Спасибо за замечания! Скрипты откорректировал.
Instructor wrote:Отключаем "SmartSel::NoSelOEL".
:lol:
Надеюсь, с выходом новой версии проги, с этим будет лучше..

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

VladSh wrote: Скрипты откорректировал.

Code: Select all

if (AkelPad.ReadFile(pFile))
Видимо предполагается, что что-то изменилось :) Для чего делается ReadFile? Это одна из самых ресурсоемких операций.
Locked