Coder plugin (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »


И ещё вопрос:
Вот пример валидного .ahk кода:

Code: Select all

RegExReplace(value, "i)^.*\\|\.ahk[^\w]*")
Группой из круглых скобок здесь является первая и последняя, а вместо этого подсвечиваются левая и средняя.
i) - эта скобка в шаблонах регулярных выражений, использующаяся как непарная для того, чтобы слева от неё можно было перечислять настройки для шаблона.
Как это исправить?

Этот вопрос стоило задавать в теме плагина XBrackets.
Last edited by Drugmix on Sun Aug 04, 2013 10:04 pm, edited 1 time in total.

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

И ещё вопрос:
В .ahk у некоторых команд и функций есть некоторые параметры, которые ожидают не строку (string), а выражение или переменную (expression). Хотелось бы разукрасить атрибуты по их типу (отличать string от expression разными цветами). Как это сделать?

Code: Select all

IniRead, expression, string
И ещё вопрос про типы атрибутов: внутри атрибута всегда можно переключать тип с expression на string или в обратную сторону. Как в таком случае настроить правильную раскраску атрибута по типа?
Из expression в string переключение происходит добавлением кавычек: весь текст внутри этих кавычек будет string'ом.
Из string в expression можно переключить двумя способами:
1. поставить в начале атрибута знак процента с пробелом после него - тогда всё после них будет считаться expression (а обратно в string можно переключаться добавляя текст обрамлённый кавычками).
2. обрамить expression знаками процента. Текст внутри процентов - будет считаться expression'ом, а снаружи - string'ом. (Этот метод работает только для переменных, но переменные - это подмножество expression'ов.)
Вот пример валидного кода с переключением типа у кусков атрибутов:

Code: Select all

IniRead, expression "string" expression "string", % expression "string" expression "string"
IniRead, expression, %expression%string%expression%string

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Drugmix
1) Часть Ваших "почему" относится к работе совсем другого плагина (XBrackets). Например в его настройках есть опция автозавершения скобок "Даже если правая скобка уже существует" (правда это Вам поможет только со скобками, но не поможет в случае с кавычками).

2) Парность кавычек не всегда и не везде благо. Например, вот одинаковый по смыслу код на VB и на C#
VB: Const quote As String = """"
C#: const string quote = "\"";
Еще нужно учитывать, что иногда мы имеем дело с "вложенными" кавычками, а иногда с "соседствующими". Вон сколько в полиграфии разных ёлочек до лапок напридумывать пришлось (чтобы кавычки в тексте не сливались).

Вот так правильно:
«Пускай же говорят собаки: „Ай, Моська! Знать она сильна, что лает на Слона!“»
А вот так уже нет:
"Пускай же говорят собаки: "Ай, Моська! Знать она сильна, что лает на Слона!""
Поскольку есть правило, что "кавычки одного рисунка рядом не повторяются". Поэтому с машинописными кавычками фраза станет на один символ короче.
Вот так правильно:
"Пускай же говорят собаки: "Ай, Моська! Знать она сильна, что лает на Слона!"
Ну и как программа должна разобраться, где здесь парная кавычка :)


3) Вообще говоря, с инженерной точки зрения, "любые универсальные инструменты заведомо хуже специальных". Проводя аналогию с текстовым редактором, для кодоспецифичных задач лучше подыскать специализированный редактор (вот и универсальный NP++ Вас тоже ведь чем-то не устроил).

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

opk44
1. и 2. Спасибо. По моей логике - эти два плагина должны бы быть объединены, это позволило бы создавать более гибкие .coder правила: я посмотрел настройки XBrackets и увидел, что там есть 'Skip escaped bracket characters: \[, \} etc.', так вот escaping же зависит от языка, т. е. эта настройка должна быть тесно связана с .coder файлами.
Там же, кстати, увидел и настройку, отвечающую за подсветку скобок, что решило это проблему:
Image

3. Потому-то и придумали настройки. Т. е. гибкость и настраиваемость инструмента можно противопоставить универсальности инструмента.
Лично для меня NP++ (я его храню и периодически ещё использую) ещё пока конкурентоспособен AkelPad'у потому что АкелПад не умеет делать сравнение двух вкладок, например [и похоже, что не предвидится] или наличие безбаговых макросов).

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Drugmix wrote:3...АкелПад не умеет делать сравнение двух вкладок, например [и похоже, что не предвидится]...
Так ли это? winMergeTabs.js справляется с этим на ура. Кстати, с помощью "специальной" софтинки (это в продолжение разговора о специальном и универсальном). Поэтому АкелПад-у просто нет никакой надобности реализовывать эту функцию самостоятельно.

Отыщите массив путей (строки 63-72):

Code: Select all

var winMergePaths = paths 
и пропишите полный путь к WinMergePortable. Например так:

Code: Select all

...
       "C:\\TOOLS\\WinMergePortable\\WinMergePortable.exe",  
...

Offline
Posts: 24
Joined: Tue Nov 13, 2007 5:55 am
Location: Voronezh
Contact:

Post by saym101 »

Подскажите, почему не получается добавить расширение к подсветке? беру php.coder добавляю к нему расширение *.tpl и после открытия файла он не подсвечивается. Хотя в нем вся разметка как у php? Какие танцы нужны для этого? Или дабавьте это расширение по умолчанию что ли. Спасибо.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

saym101
You should remove the file: ...\AkelPad\AkelFiles\Plugs\Coder\cache

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

saym101
1. Как правило, достаточно обновить обновить кэш (файл "\AkelFiles\Plugs\Coder\cache"). Для этого проще всего предварительно руками его стереть. Кстати, проверьте, включена ли в настройке плагина опция "Использовать кэш".
2. Не лишне также будет посмотреть в сам файл 'cache'. Каким-либо coder-файлом '*.tpl' может УЖЕ использоваться. Ведь tpl это не формат, а всего лишь сокращение от 'template'(шаблон) и используется многими пакетами и программами (от Паскаля до Фотошопа) по своему разумению. Если ближе к AkelPad-у, то, например, tpl может использоваться нестандартными подсветками (Smarty.coder и Txt.coder Аверина Андрея и т.д.).
Т.е. включение Вами '*.tpl' в php.coder могло "подраться" с уже существующей привязкой к другому coder-файлу.
3. Из пункта 2 следует, что tpl вряд ли будет включен в php.coder "по умолчанию".
Upd:
4. Проверить включен ли режим highlight (ну а что, все бывает).

Offline
Posts: 24
Joined: Tue Nov 13, 2007 5:55 am
Location: Voronezh
Contact:

Post by saym101 »

Спасибо за ответы. Помогло. В моем случае tpl это как раз текстовый файл.

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

А ещё можете написать меню и включать по желанию.

Code: Select all

"&Типы подсветок"  Index(-1)
{
  "1С" Call("Coder::Settings", 1, "1S") Icon("%a\AkelFiles\Plugs\Toolbar\1S.ico")
  "AkelPad menu" Call("Coder::Settings", 1, "akelmenu")
  "Assembler" Call("Coder::Settings", 1, "asm") Icon("%a\AkelFiles\Plugs\Toolbar\asm.ico")
  "AutoHotkey" Call("Coder::Settings", 1, "ahk")  Icon("%a\AkelFiles\Plugs\Toolbar\ahk.ico")
  "AutoIt" Call("Coder::Settings", 1, "au3") Icon("%a\AkelFiles\Plugs\Toolbar\au3.ico")
  "Avisynth" Call("Coder::Settings", 1, "avs") Icon("%a\AkelFiles\Plugs\Toolbar\avisynth.ico")
  "AWK" Call("Coder::Settings", 1, "awk") Icon("%a\AkelFiles\Plugs\Toolbar\awk.ico")
  "Bat/Cmd" Call("Coder::Settings", 1, "bat") Icon("%a\AkelFiles\Plugs\Toolbar\bat.ico")
  "BBCode" Call("Coder::Settings", 1, "bbc") Icon("%a\AkelFiles\Plugs\Toolbar\BBCode.ico")
  "C++" Call("Coder::Settings", 1, "cpp") Icon("%a\AkelFiles\Plugs\Coder.dll", 4)
  "Coder Syntax" Call("Coder::Settings", 1, "coder") Icon("%a\AkelFiles\Plugs\Coder.dll", 2)
  "CSS" Call("Coder::Settings", 1, "css") Icon("%a\AkelFiles\Plugs\Toolbar\css.ico")
  "diff" Call("Coder::Settings", 1, "diff")
  "fb2" Call("Coder::Settings", 1, "fb2") Icon("%a\AkelFiles\Plugs\Toolbar\fb2.ico")
  "Fortran" Call("Coder::Settings", 1, "ftn") Icon("%a\AkelFiles\Plugs\Toolbar\for.ico")
  "Hash" Call("Coder::Settings", 1, "md5")
  "HTML" Call("Coder::Settings", 1, "html") Icon("%a\AkelFiles\Plugs\Toolbar\html.ico")
  "Ini" Call("Coder::Settings", 1, "ini") Icon("%a\AkelFiles\Plugs\Toolbar\css.ico")
  "Inno" Call("Coder::Settings", 1, "iss") Icon("%a\AkelFiles\Plugs\Toolbar\iss.ico")
  "Java" Call("Coder::Settings", 1, "java")
  "JScript" Call("Coder::Settings", 1, "js") Icon("%a\AkelFiles\Plugs\Toolbar\js.ico")
  "Log" Call("Coder::Settings", 1, "log")
  "LSS" Call("Coder::Settings", 1, "lss") Icon("%a\AkelFiles\Plugs\Toolbar\lss.ico")
  "Lua" Call("Coder::Settings", 1, "lua") Icon("%a\AkelFiles\Plugs\Toolbar\lua.ico")
  "Mnu" Call("Coder::Settings", 1, "mnu") Icon("%a\AkelFiles\Plugs\Toolbar\Mnu.ico")
  "Msg" Call("Coder::Settings", 1, "msg")
  "NSIS" Call("Coder::Settings", 1, "nsi") Icon("%a\AkelFiles\Plugs\Toolbar\nsi.ico")
  "Pascal" Call("Coder::Settings", 1, "dpr") Icon("%a\AkelFiles\Plugs\Toolbar\Pascal.ico")
  "Perl" Call("Coder::Settings", 1, "pl")  Icon("%a\AkelFiles\Plugs\Toolbar\Perl.ico")
  "PHP" Call("Coder::Settings", 1, "php") Icon("%a\AkelFiles\Plugs\Toolbar\PHP.ico")
  "Powershell" Call("Coder::Settings", 1, "ps1")
  "PRG" Call("Coder::Settings", 1, "prg") Icon("%a\AkelFiles\Plugs\Toolbar\prg.ico")
  "Python" Call("Coder::Settings", 1, "py")  Icon("%a\AkelFiles\Plugs\Toolbar\Python.ico")
  "Resource" Call("Coder::Settings", 1, "rc") Icon("%a\AkelFiles\Plugs\Toolbar\rc.ico")
  "RDF" Call("Coder::Settings", 1, "rdf")
  "Sharp" Call("Coder::Settings", 1, "cs") Icon("%a\AkelFiles\Plugs\Toolbar\Sharp.ico")
  "Smarty" Call("Coder::Settings", 1, "tpl") Icon("%a\AkelFiles\Plugs\Toolbar\smarty.ico")
  "SQL" Call("Coder::Settings", 1, "sql")  Icon("%a\AkelFiles\Plugs\Toolbar\sql.ico")
  "Text" Call("Coder::Settings", 1, "txt") Icon("notepad.exe",0)
  "Unix shell" Call("Coder::Settings", 1, "sh")
  "VB / VBScript" Call("Coder::Settings", 1, "vbs") Icon("%a\AkelFiles\Plugs\Toolbar\vbs.ico")
  "XBL" Call("Coder::Settings", 1, "xbl")
  "XML / DXL" Call("Coder::Settings", 1, "xml") Icon("%a\AkelFiles\Plugs\Toolbar\xml.ico")
  "XUL" Call("Coder::Settings", 1, "xul")
  SEPARATOR
 "Без типа" Call("Coder::Settings", 1, "?")
  SEPARATOR
  -"Обновить кэш" Call("Coder::Settings", 2) Icon("%a\AkelFiles\Plugs\Toolbar.dll", 3)
  "Редактировать типы подсветок"
  {
    "AkelPad menu" OpenFile("%a\AkelFiles\Plugs\Coder\akelmenu.coder")
    "Assembler" OpenFile("%a\AkelFiles\Plugs\Coder\asm.coder") Icon("%a\AkelFiles\Plugs\Toolbar\asm.ico")
    "AutoHotkey" OpenFile("%a\AkelFiles\Plugs\Coder\ahk.coder") Icon("%a\AkelFiles\Plugs\Toolbar\ahk.ico")
    "AutoIt" OpenFile("%a\AkelFiles\Plugs\Coder\au3.coder") Icon("%a\AkelFiles\Plugs\Toolbar\au3.ico")
    "Avisynth" OpenFile("%a\AkelFiles\Plugs\Coder\avs.coder") Icon("%a\AkelFiles\Plugs\Toolbar\avisynth.ico")
    "AWK" OpenFile("%a\AkelFiles\Plugs\Coder\awk.coder")
    "Bat/Cmd" OpenFile("%a\AkelFiles\Plugs\Coder\bat.coder") Icon("%a\AkelFiles\Plugs\Toolbar\bat.ico")
    "BBCode" OpenFile("%a\AkelFiles\Plugs\Coder\Bbc.coder") Icon("%a\AkelFiles\Plugs\Toolbar\BBCode.ico")
    "C++" OpenFile("%a\AkelFiles\Plugs\Coder\cpp.coder") Icon("%a\AkelFiles\Plugs\Coder.dll", 4)
    "Coder Syntax" OpenFile("%a\AkelFiles\Plugs\Coder\coder.coder") Icon("%a\AkelFiles\Plugs\Coder.dll", 2)
    "CSS" OpenFile("%a\AkelFiles\Plugs\Coder\css.coder") Icon("%a\AkelFiles\Plugs\Toolbar\css.ico")
    "diff" OpenFile("%a\AkelFiles\Plugs\Coder\diff.coder")
    "fb2" OpenFile("%a\AkelFiles\Plugs\Coder\fb2.coder")
    "Fortran" OpenFile("%a\AkelFiles\Plugs\Coder\fortran.coder")
    "Hash" OpenFile("%a\AkelFiles\Plugs\Coder\hashsum.coder")
    "HTML" OpenFile("%a\AkelFiles\Plugs\Coder\html.coder") Icon("%a\AkelFiles\Plugs\Toolbar\html.ico")
    "Ini" OpenFile("%a\AkelFiles\Plugs\Coder\ini.coder") Icon("%a\AkelFiles\Plugs\Toolbar\css.ico")
    "Inno" OpenFile("%a\AkelFiles\Plugs\Coder\inno.coder") Icon("%a\AkelFiles\Plugs\Toolbar\iss.ico")
    "Java" OpenFile("%a\AkelFiles\Plugs\Coder\_java.coder")
    "JScript" OpenFile("%a\AkelFiles\Plugs\Coder\js.coder") Icon("%a\AkelFiles\Plugs\Toolbar\js.ico")
    "Log" OpenFile("%a\AkelFiles\Plugs\Coder\_log.coder")
    "LSS" OpenFile("%a\AkelFiles\Plugs\Coder\lss.coder")
    "Lua" OpenFile("%a\AkelFiles\Plugs\Coder\lua.coder") Icon("%a\AkelFiles\Plugs\Toolbar\lua.ico")
    "Mnu" OpenFile("%a\AkelFiles\Plugs\Coder\mnu.coder")
    "Msg" OpenFile("%a\AkelFiles\Plugs\Coder\msg.coder")
    "NSIS" OpenFile("%a\AkelFiles\Plugs\Coder\nsis.coder") Icon("%a\AkelFiles\Plugs\Toolbar\nsi.ico")
    "Pascal" OpenFile("%a\AkelFiles\Plugs\Coder\pascal.coder") Icon("%a\AkelFiles\Plugs\Toolbar\Pascal.ico")
    "Perl" OpenFile("%a\AkelFiles\Plugs\Coder\perl.coder") Icon("%a\AkelFiles\Plugs\Toolbar\Perl.ico")
    "PHP" OpenFile("%a\AkelFiles\Plugs\Coder\php.coder") Icon("%a\AkelFiles\Plugs\Toolbar\PHP.ico")
    "Powershell" OpenFile("%a\AkelFiles\Plugs\Coder\ps1.coder")
    "PRG" OpenFile("%a\AkelFiles\Plugs\Coder\prg.coder") Icon("%a\AkelFiles\Plugs\Toolbar\prg.ico")
    "Python" OpenFile("%a\AkelFiles\Plugs\Coder\python.coder") Icon("%a\AkelFiles\Plugs\Toolbar\Python.ico")
    "Resource" OpenFile("%a\AkelFiles\Plugs\Coder\rc.coder") Icon("%a\AkelFiles\Plugs\Toolbar\rc.ico")
    "RDF" OpenFile("%a\AkelFiles\Plugs\Coder\rdf.coder")
    "Sharp" OpenFile("%a\AkelFiles\Plugs\Coder\cs.coder") Icon("%a\AkelFiles\Plugs\Toolbar\Sharp.ico")
    "Smarty" OpenFile("%a\AkelFiles\Plugs\Coder\smarty.coder") Icon("%a\AkelFiles\Plugs\Toolbar\smarty.ico")
    "SQL" OpenFile("%a\AkelFiles\Plugs\Coder\sql.coder") Icon("%a\AkelFiles\Plugs\Toolbar\sql.ico")
    "Text" OpenFile("%a\AkelFiles\Plugs\Coder\txt.coder") Icon("notepad.exe",0)
    "Unix shell" OpenFile("%a\AkelFiles\Plugs\Coder\sh.coder")
    "VB / VBScript" OpenFile("%a\AkelFiles\Plugs\Coder\vbs.coder") Icon("%a\AkelFiles\Plugs\Toolbar\vbs.ico")
    "XBL" OpenFile("%a\AkelFiles\Plugs\Coder\xbl.coder")
    "XML / DXL" OpenFile("%a\AkelFiles\Plugs\Coder\xml.coder") Icon("%a\AkelFiles\Plugs\Toolbar\xml.ico")
    "XUL" OpenFile("%a\AkelFiles\Plugs\Coder\xul.coder")
  }
  "Настроить темы" Call("Coder::Settings")  Icon("%a\AkelFiles\Plugs\Toolbar\coder.ico")
   SEPARATOR
  -"Редактировать меню..." Call("ContextMenu::Main", 1, 1, "&Типы подсветок")
}

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

Post by Instructor »

opk44 wrote:P.S. При использовании WinMergePortable вероятно придется подправить скрипт согласно выбранному Вами пути установки.
Там же есть аргумент "-path=".

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Instructor wrote:Там же есть аргумент "-path=".
Разумеется, но вызов с аргументами предполагает некие дополнительные телодвижения (прописывание скрипта в меню или на кнопку). Я же исходил из того, что скрипт вероятно будет вызываться наипростейшим образом, т.е. вызовом самого плагина и выбором скрипта из списка либо назначением горячей клавиши. Как тут аргумент передать? Поэтому мне показалось (возможно только "показалось"), что разумнее будет показать как и где в самом скрипте путь прописать. Это может и плохо в долгосрочной перспективе (проблемы с обновлением версий скрипта), но зато в краткосрочном плане дает выигрыш - можно сразу воспользоваться скриптом и убедиться в его эффективности, ничего не зная даже о настройке тулбара и контекстного меню. Аргументами можно будет заниматься потом, когда скрипт осядет в коллекции постоянно используемого инструментария.
Вот так как-то.

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

Post by Instructor »

opk44
Ясно.

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

Post by Instructor »

Drugmix wrote:Срабатывает только для случая, когда все эти кавычки идут подряд: """""", а я подразумевал, что между этими кавычками может находиться или отсутствовать какой-то текст.

Code: Select all

`(")("").*("")(")`

Offline
Posts: 2
Joined: Wed Jul 31, 2013 11:44 pm

Выделение в тексте цветовых кодов соответствующим цветом

Post by thhor »

Знатоки! Подскажите, существует ли плагин который подсвечивает (выделяет) в тексте цветовые коды соответствующим им (кодам) цветом?
Например в строке типа:
"color: #f5f5f5;"
#f5f5f5 было бы выделено соответствующим этому коду цветом!
Locked