Coder plugin (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Drugmix
---(1)---
Не указано с каким именно языком "воюете", но, похоже, Вы избрали тупиковый путь.
a) Не следует забывать, что блоки текста вставляются в ответ на "Abbreviations". Следует ли напоминать, что такое аббревиатура (и часто ли Вы встречали в аббревиатурах пробелы)? :)
b) Не следует забывать, что аббревиатура не обязана в точности совпадать с началом подставляемого блока. Т.е. в ответ на "тратата" Вы можете подставить "все равно что".
Здесь могут быть разные подходы, но прежде следует поразмыслить над тем, почему в cpp.coder, например, в дополнение к

Code: Select all

$~if
if ($[])
{
${AutoComplete_Indent}$[]
}
не добавлено еще и

Code: Select all

$~ife
if ($[])
{
${AutoComplete_Indent}$[]
}
else
{
${AutoComplete_Indent}$[]
}

Это будет очень полезное размышление на тему "разумного-достаточного".
c) Не следует забывать, что в выражении "else if", сам "if" является вложенной конструкцией и потому вполне себе самостоятелен. Т.е. сейчас, ничего не меняя, "else" комплитится как отдельное слово, а дописываемый "if" раскрывается в правильную форму и без проблем с умножением скобок. На мой субъективный взгляд такая "спартанская" форма выгодно отличается (от разных добавок в виде ~ife, ~ifei...) тем, что не связывает рук заранее определенным в автокомплитере количеством вложенных "элсе-ифов".
P.S. Кстати, можете еще посмотреть подсветку lss.coder (автор VladSh). В ней применен иной подход к "аббревиатурам" (ИМХО не вполне экономный, хотя и более наглядный).

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

Post by Lenchik »

Не следует забывать, что блоки текста вставляются в ответ на "Abbreviations". Следует ли напоминать, что такое аббревиатура (и часто ли Вы встречали в аббревиатурах пробелы)?
А ещё, когда начинаешь набирать, то выпадает список начинающийся с этой "аббревиатуры", и вот тут уже можно использовать "аббревиатуры" для полноценной иллюстрации вставляемого, как раз с пробелами (см. viewtopic.php?p=22270#p22270).
AVSPmod (редактор файлов Avisynth), к примеру, вставляет по автокомплиту самый расширенный блок записи функции и по мере продвижения между запятыми, отделяющими параметры, пишет какой параметр и какого типа туда вписывать надо. у нас такого нельзя, но в теории можно делать подсказки через выпадающий список автокомплита.

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

Post by Drugmix »

Lenchik
что же Вы сразу не сказали про трюк с неразрывным пробелом-то?
Это же как раз то, что нужно, этого вполне достаточно.

Offline
Posts: 122
Joined: Sat Mar 19, 2011 10:20 pm

Post by DrakonHaSh »

как можно добавить в Folds строку, начинающуюся с символа ! ?

делаю для навигации по тексту. если бы в качестве конца блока можно было ставить "\n" задача была бы решена. но т.к. "\n" не воспринимается как конец строки, то никак не получается у меня задуманное :(

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

Post by opk44 »

DrakonHaSh
У меня получилось вот так:

Code: Select all

;428=4+8+32+128+256
428	0	0	0	"!"	"!"	" 	"
Образец я "честно украл" из файла coder.coder. Только добавил флаг "4" (т.е. форсированного получения имени справа от начала блока). Есть один эффект (не знаю хорошо это или плохо) - если воскл.знак будет даже не в первой позиции, но перед ним будут стоять только пробелы, то все равно фолдится.

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

Post by Lenchik »

Для Акельпада — нет. Для других редакторов бывает, можете теми темами воспользоваться, чтобы создать тему подсветки для Акеля. Например, https://github.com/ajaxorg/ace/blob/mas ... t_rules.js

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

Post by Instructor »

Lenchik wrote:А с $= непонятно как работать и подсветка синтаксиса самих кодер-файлов тоже не даёт подсказки. :(
$= используется в случае, если есть потребность использовать разделители в аббревиатуре. Но конструкция $= требует полного совпадения (а не частичного как с $~). Например:
$=w.e
while ()
{
}
В данном случае только после полного набора "w.e" и нажатия горячей клавиши дополнения можно развернуть аббревиатуру.

Offline
Posts: 122
Joined: Sat Mar 19, 2011 10:20 pm

Post by DrakonHaSh »

opk44 wrote:DrakonHaSh
У меня получилось вот так:

Code: Select all

;428=4+8+32+128+256
428	0	0	0	"!"	"!"	" 	"
Образец я "честно украл" из файла coder.coder. Только добавил флаг "4" (т.е. форсированного получения имени справа от начала блока). Есть один эффект (не знаю хорошо это или плохо) - если воскл.знак будет даже не в первой позиции, но перед ним будут стоять только пробелы, то все равно фолдится.
Спасибо! именно то, чего хотелось.

ps мне как-то в голову не приходил вариант поставить в качестве окончания блока ! - стереотипность мышления подвела - как единичный символ [в одной и той же позиции] будет и началом и сразу концом блока :)

Offline
Posts: 5
Joined: Sun Jul 14, 2013 5:53 pm

Post by die_klaster »

Настраиваю подсветку для своего типа файла. В файле нужно подсветить вхождения "4Gb", "4 Gb" (без кавычек). Настраиваю секцию WORDS

Code: Select all

;--Storage--
0	0	${OP}	0	4Gb
0	0	${OP}	0	4 Gb
0	0	${OP}	0	4Гб
0	0	${OP}	0	4 Гб
Проблема в том, что во вхождениях с пробелом "4 GB" подсвечивается только четвёрка. А также, если есть вхождение типа ROM4Gb, то оно не подсвечивается.
Как бы эти два момента устранить?

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

Post by opk44 »

die_klaster
1. Проблема не в этом, а в том что у Вас престранное представление (или отсутствие такового) о словах и разделителях. Во фрагменте "4 GB" я насчитал аж 2 слова. AkelPad, похоже, тоже. И кому придет в голову в слове "ROM4Gb" искать еще какие-то "слова"... Это ж не шарада.
2. Как Вы собираетесь, например, красить накопители 64Гб, особенно в ситуациях схожих с ROM4Gb?
3. Пока Вы четко не осмыслили, что именно Вам требуется от файла-подсветки и как он работает, можете попробовать раскрашивать "вручную", т.е. скриптом. Делаете, например, на тулбаре две кнопочки. На первую вешаете вызов скрипта-раскраски, на вторую - снятие всех отметок.

Code: Select all

-"Красим" Call("Scripts::Main", 1, "storage.js") Icon("%a\AkelFiles\Plugs\Coder.dll", 6)
-"Отмываем" Call("Coder::HighLight", 3, 0) Icon("%a\AkelFiles\Plugs\Coder.dll", 11)
Пример скрипта раскраски ("storage.js"):

Code: Select all

// файл "storage.js" -"отметить в тексте емкость накопителей в 4Гб"
AkelPad.Call("Coder::HighLight", 2, "#000000", "#9BFF9B", 0, 3, 1, "4Gb");
AkelPad.Call("Coder::HighLight", 2, "#000000", "#9BFF9B", 0, 3, 2, "4 Gb");
AkelPad.Call("Coder::HighLight", 2, "#000000", "#9BFF9B", 0, 3, 3, "4Гб");
AkelPad.Call("Coder::HighLight", 2, "#000000", "#9BFF9B", 0, 3, 4, "4 Гб");
// ...
При таком подходе Вы вправе оперировать понятием "фрагмент" или "вхождение". Но, конечно, такая раскраска "мертвая", т.е. при добавлении нового текста все каждый раз придется перекрашивать заново.

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

Post by VladSh »

Instructor
Сейчас приходится работать с огромными xml'ями, и очень нехватает функционала сворачивания блоков Ctrl+<цифра-номер уровня>, как есть в Notepad++. Можно ли такое реализовать?

Добавлено 1: Может быть можно как-то сворачивать текущий уровень по всему файлу? Тогда проблему с отсутствием Ctrl+<цифра-номер уровня> можно было бы как-то отодвинуть.

Добавлено 2: Можно ли сделать сворачивание текущего уровня со всеми вложенными подуровнями сразу? Лучше отдельной командой, но можно и параметром в ini.
Last edited by VladSh on Tue Jul 16, 2013 3:24 pm, edited 2 times in total.

Offline
Posts: 5
Joined: Sun Jul 14, 2013 5:53 pm

Post by die_klaster »

opk44
Ну вопрос не в том, какое у меня представление, а в том, что это нужно сделать.
Про ROM4Gb:
Поиск по тексту ведь находит "4Gb" в этом сочетании. Почему бы и Akelpad'у с плагином этого не сделать?
В какую секцию файла .coder мне впихнуть нужные слова, чтобы они всё-таки подсвечивались?

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

Post by VladSh »

Instructor
Ещё. Можно ли опцию в ini для неотображения завершающей части свёрнутого блока?

Offline
Posts: 122
Joined: Sat Mar 19, 2011 10:20 pm

Post by DrakonHaSh »

DrakonHaSh wrote:
opk44 wrote:DrakonHaSh
У меня получилось вот так:

Code: Select all

;428=4+8+32+128+256
428	0	0	0	"!"	"!"	" 	"
Образец я "честно украл" из файла coder.coder. Только добавил флаг "4" (т.е. форсированного получения имени справа от начала блока). Есть один эффект (не знаю хорошо это или плохо) - если воскл.знак будет даже не в первой позиции, но перед ним будут стоять только пробелы, то все равно фолдится.
Спасибо! именно то, чего хотелось.

ps мне как-то в голову не приходил вариант поставить в качестве окончания блока ! - стереотипность мышления подвела - как единичный символ [в одной и той же позиции] будет и началом и сразу концом блока :)
рано я обрадовался. подобный фокус нормально не срабатывает :(
мне нужно чтобы блок начинался и заканчивался на одной строке, а так - он заканчивается либо в конце текста либо на следующем ! в начале строки

Instructor
помоги пожалуйста решить это вопрос:
как можно добавить в Folds строку (только ее одну! - чтоб блок начинался и сразу заканчивался в этой строке), начинающуюся с символа ! ?

делаю для навигации по тексту. если бы в качестве конца блока можно было ставить "\n" задача была бы решена. но т.к. "\n" не воспринимается как конец строки, то никак не получается у меня задуманное :(

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

Post by Drugmix »

Вопрос решён.
Last edited by Drugmix on Sun Aug 04, 2013 12:47 am, edited 1 time in total.
Locked