XBrackets plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

XBrackets v.4.0
* четвёртая годовщина XBrackets :)
* для AkelPad 4.5.0+
* убрано: параметр 'hlt_bkgnd' (больше не нужен)
+ добавлено: настройка как цвета скобок, так и фона
+ другие мелкие улучшения/исправления
+ добавлена иконка (спасибо se7h)

XBrackets v.4.1
* обновлена иконка (спасибо se7h)

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

DV
Такая не понятка у меня.
Запущен XBrackets::Main
В настройках отмечен "Підсвічувати дужки", галки против цветов не стоят.
Вопрос: каким цветом должна работать подсветка в такой конфигурации? Если хотя бы одну из птичек ставлю - сразу видно что подсветка заработала.

ЗЫ: в Украинской локализации огромная просьба исправить "Колір фона" на "Колір тла"

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

FeyFre wrote:Если хотя бы одну из птичек ставлю - сразу видно что подсветка заработала.
Тут мы наблюдаем некоторую избыточность интерфейса в результате перехода от подсветки только скобок или фона к подсветке того и другого. Настройка "Подсвечивать скобки" является верхнеуровневой, но результат её действия зависит от поднастроек "Цвет скобок" и "Цвет фона".

Code: Select all

int IsBracketsHighlight(UINT uBrHglt)
{
  if (uBrHglt & BRHLF_ENABLED)  // "Подсвечивать скобки"
  {
    if ((uBrHglt & BRHLF_TEXT)    // "Цвет скобок"
     || (uBrHglt & BRHLF_BKGND))  // "Цвет фона"
      return 1;
  }
  return 0;
}
Поясняя: если не стоит ни одна из галочек "Цвет", то скобки не подсвечиваются.
FeyFre wrote:"Колір тла"
Начебто в українській мові обидва і "тло" і "фон" є рівноправними, хіба ні?
фон (рус -> укр)
(основной цвет, тон и т. п.) фон, тло, поле
на фоне — на тлі, на фоні

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Начебто в українській мові обидва і "тло" і "фон" є рівноправними, хіба ні?
Воно то так, але тло більш літературне, і само воно використовується у ЗМІ.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Тут мы наблюдаем некоторую избыточность интерфейса в результате перехода от подсветки только скобок или фона к подсветке того и другого.
Радиокнопками можно сделать: "выкл", "цвет", "фон", "оба"

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

Post by VladSh »

офф
FeyFre wrote:Воно то так, але тло більш літературне, і само воно використовується у ЗМІ.
Другими словами "більш літературне" - это чтобы по максимуму отличалось от русского ))) всё точно также, как и в истории 100-летней давности...

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

Post by Instructor »

DV
Вот реализовал сегодня:
Image


Но данный функционал подходит больше для XBrackets. Если появится заинтересованность, ниже примерное описание алгоритма:

Code: Select all

else if (((NMHDR *)lParam)->code == AEN_SELCHANGED)
{
  AENSELCHANGE *aensc=(AENSELCHANGE *)lParam;
  AEMARKRANGEITEM mri;
  HANDLE hThemeHandle;
  AEHMARKRANGE hFirst;
  AEHMARKRANGE hSecond;
  AEHMARKRANGE hThird;
  AECHARANGE crBegin;
  AECHARANGE crEnd;
  AECHARINDEX ciCaret;
  int nCaretOffset;

  hThemeHandle=(HANDLE)SendMessage(hWndEdit, AEM_HLGETTHEMEW, 0, (LPARAM)NULL);
  SendMessage(hWndEdit, AEM_GETINDEX, AEGI_CARETCHAR, (LPARAM)&ciCaret);
  nCaretOffset=SendMessage(hWndEdit, AEM_INDEXTORICHOFFSET, 0, (LPARAM)&ciCaret);

  //Пример HTML: "<t|r tag=123>text</tr>"
  //Определяем находися каретка между <tr ...> или </tr>

  //Алгоритм:
  //1. Движемся влево находим crBegin.ciMin "<"
  //2. Определяем имя: "tr"
  //3. Движемся вправо находим crBegin.ciMax ">"
  //4. Движемся вправо ищем </tr>

  //Подсвечиваем с помощью AEM_HLADDMARKRANGE "<tr"
  mri.nIndex=-1;
  mri.crMarkRange.cpMin=SendMessage(hWndEdit, AEM_INDEXTORICHOFFSET, 0, (LPARAM)&crBegin.ciMin);
  mri.crMarkRange.cpMax=mri.crMarkRange.cpMin + lstrlenW(L"tr");
  mri.dwFlags=0;
  mri.dwFontStyle=AEHLS_FONTBOLD;
  mri.crText=(DWORD)-1;
  mri.crBk=RGB(0xBF, 0x8D, 0xFF);
  hFirst=(AEHMARKRANGE)SendMessage(hWndEdit, AEM_HLADDMARKRANGE, (WPARAM)hThemeHandle, (LPARAM)&mri);
  if (ciCaret.nLine != crBegin.ciMin.nLine)
    SendMessage(hWndEdit, AEM_REDRAWLINERANGE, crBegin.ciMin.nLine, crBegin.ciMin.nLine);

  //Подсвечиваем с помощью AEM_HLADDMARKRANGE ">"
  mri.nIndex=-1;
  mri.crMarkRange.cpMin=SendMessage(hWndEdit, AEM_INDEXTORICHOFFSET, 0, (LPARAM)&crBegin.ciMax);
  mri.crMarkRange.cpMax=mri.crMarkRange.cpMin + lstrlenW(L">");
  mri.dwFlags=0;
  mri.dwFontStyle=AEHLS_FONTBOLD;
  mri.crText=(DWORD)-1;
  mri.crBk=RGB(0xBF, 0x8D, 0xFF);
  hSecond=(AEHMARKRANGE)SendMessage(hWndEdit, AEM_HLADDMARKRANGE, (WPARAM)hThemeHandle, (LPARAM)&mri);
  if (ciCaret.nLine != crBegin.ciMax.nLine)
    SendMessage(hWndEdit, AEM_REDRAWLINERANGE, crBegin.ciMax.nLine, crBegin.ciMax.nLine);

  //Подсвечиваем с помощью AEM_HLADDMARKRANGE "</tr>"
  mri.nIndex=-1;
  mri.crMarkRange.cpMin=SendMessage(hWndEdit, AEM_INDEXTORICHOFFSET, 0, (LPARAM)&crEnd.ciMin);
  mri.crMarkRange.cpMax=mri.crMarkRange.cpMin + lstrlenW(L"</tr>");
  mri.dwFlags=0;
  mri.dwFontStyle=AEHLS_FONTBOLD;
  mri.crText=(DWORD)-1;
  mri.crBk=RGB(0xBF, 0x8D, 0xFF);
  hThird=(AEHMARKRANGE)SendMessage(hWndEdit, AEM_HLADDMARKRANGE, (WPARAM)hThemeHandle, (LPARAM)&mri);
  if (ciCaret.nLine != crEnd.ciMin.nLine)
    SendMessage(hWndEdit, AEM_REDRAWLINERANGE, crEnd.ciMin.nLine, crEnd.ciMin.nLine);
}

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

Post by Infocatcher »

Instructor wrote:Вот реализовал сегодня
Шикааарно! ^_^
Кстати, это одна из двух вещей, которыми я более или менее часто пользуюсь в Notepad++ (особенно если это особо кривые чужие HTML'ки). Вторая – hex-редактор.

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

DV
просим добавить эту фичу

Instructor
спасибо

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

Post by Instructor »

DV
Конечно, если оценивать по критерию производительности эта вещь уместнее в Coder::CodeFold (так как все диапазоны уже обработаны), а по концепции в XBrackets.

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Instructor wrote:по критерию производительности эта вещь уместнее в Coder::CodeFold
Да, потому что в XBrackets это выльется в ещё один огромный цикл, пробегающий по всему тексту, с учётом обработки как конструкции <tag ... />, так и пар <tag ...> ... </tag>, между которыми нужно пропускать как вложенные теги, так и возможные комментарии. Плюс ещё оптимизация, чтобы не искать каждый раз заново, двигая каретку внутри одного и того же тега. Короче, работы невпроворот.
Если бы можно было запрашивать у Coder диапазоны парных скобок/тегов, тогда XBrackets мог бы вызывать подсветку этих диапазонов. Однако, такой подход в какой-то мере противоречит самому себе:
Шаг 1) XBrackets запрашивает у Coder диапазоны парных тегов;
Шаг 2) XBrackets просит Coder подсветить парные теги.
Спрашивается: а зачем тут вообще посредничество XBrackets, если Coder фактически всё делает сам?

Развивая эту тему дальше, можно предложить фактическую интеграцию XBrackets в Coder. Что для этого нужно? Да в принципе немного:
1) Добавить в Coder механизм и схему подсветки Default, которая бы отвечала за подсветку парных скобок в любых типах файлов. Это бы убрало необходимость в той части XBrackets, которая отвечает за подсветку парных скобок. Половина настроек XBrackets сразу стала бы не нужна, поскольку тип файла уже известен, а его содержимое предварительно обработано.
2) Добавить в Coder возможность закрывать парные скобки и теги (опционально). Это бы убрало необходимость в оставшейся части XBrackets. Вся работа по поддержке парных скобок легла бы на схему подсветки Default.
Last edited by DV on Tue Nov 09, 2010 9:48 am, edited 2 times in total.

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

Instructor
наверно, это тот случай, когда производительность важнее красивой и слаженной концепции

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Идея о слиянии разумна. Правда, тогда Coder придется дергать для всех типов файлов, либо мириться с отсутствием XBRackets функционала в не поддерживаемых Coder-ом типах файлов.

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

Post by VladSh »

Fr0sT wrote:тогда Coder придется дергать для всех типов файлов, либо мириться с отсутствием XBRackets функционала в не поддерживаемых Coder-ом типах файлов.
если учесть это:
DV wrote:1) Добавить в Coder механизм и схему подсветки Default, которая бы отвечала за подсветку парных скобок в любых типах файлов.
то, по моему, не о чем будет переживать..

Идею слияния поддерживаю! Будет и производительность и красивая и слаженная концепция :)

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »

DV wrote:Развивая эту тему дальше, можно предложить фактическую интеграцию XBrackets в Coder.
хорошая мысль, что тут говорить
Post Reply