Coder plugin (3)

Discuss and announce AkelPad plugins
  • Author
  • Message
YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

beotiger wrote: А вот как ещё определение переменных в двойных кавычках добавить:

Code: Select all

echo "Hello $name";
Coder-Rus.txt wrote:
- Внутри оформленного блока ("Folds:"), правило из "Folds:" обрабатывается, из остальных секций игнорируется.

Offline
Posts: 53
Joined: Wed Dec 09, 2015 6:33 pm

Post by beotiger »

YuS, Skiff_off
Да, использовать секцию Foldes наверное не стоит, тем более вылезли другие глюки.

А можно ли заставить правила в секции Quotes обрабатывать несколько строк, то есть добавить типа символ EOL в игнор?

Offline
Posts: 269
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Instructor
Я попробовал присвоить этому правилу минусовой Parent ID:

Code: Select all

1	'(?<=\[c\x20)(?<!\\\[c\x20)[a-z]+?(?=\])'	'\0=(0,0,0)'	0	71
Это повергло AkelPad в бесконечный цикл, который завершился сообщением о критической ошибке (Critical error) :(

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

Post by Instructor »

yozhic wrote:В продолжение этого случая.
Объединение правил с одинаковым началом диапазона не происходит, если RuleID отличаются.
Условия объединения правил с одинаковым началом диапазом из секции "Quotes:"
AkelEdit.c wrote: if (lpQuoteStart->nQuoteStartLen == lpQuoteItem->nQuoteStartLen &&
lpQuoteStart->dwFlags == lpQuoteItem->dwFlags &&
lpQuoteStart->chEscape == lpQuoteItem->chEscape &&
lpQuoteStart->nParentID == lpQuoteItem->nParentID &&
lpQuoteStart->nRuleID == lpQuoteItem->nRuleID &&
//AEQUOTEITEMs with filter flags should not be merged
!(lpQuoteStart->dwFlags & (AEHLF_QUOTEINCLUDE|AEHLF_QUOTEEXCLUDE|AEHLF_QUOTEEMPTY|AEHLF_QUOTEWITHOUTDELIMITERS)))
{
...
clever_man wrote:... буду ждать.
Это можно отнести и к последующему вопросу :)
yozhic wrote:Это повергло AkelPad в бесконечный цикл...
На разрабатываемой версии не воспроизводится. Оповестите, если это будет продолжаться после релиза 4.9.7.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

beotiger wrote:YuS, Skiff_off
Да, использовать секцию Foldes наверное не стоит, тем более вылезли другие глюки.
Почему не стоит и какие глюки?

Offline
Posts: 53
Joined: Wed Dec 09, 2015 6:33 pm

Post by beotiger »

Skif_off wrote:
beotiger wrote:YuS, Skiff_off
Да, использовать секцию Foldes наверное не стоит, тем более вылезли другие глюки.
Почему не стоит и какие глюки?
Смотрите:
Мои шаги: добавил в секцию Folds: для файла php.coder такие строки:

Code: Select all

; для двойных кавычек
3408385   3   ${STR}   0   `(?<!\\)"`   `(?<!\\)"`   ""   0   0
; для одинарных кавычек
3408385   3   ${STR}   0   `(?<!\\)'`   `(?<!\\)'`   ""   0   0
Вроде всё отлично, я радовался как младенец, строки в кавычках отображались нормально даже если они расположены в несколько строк!
Но потом берём и открываем такой скрипт:

Code: Select all

<?php
function golosMail($message, $subject, $to, $from, $toname = '', $fromname = '', $type = 'html')
{
	if($toname != '')
		$to = '=?utf-8?B?'.base64_encode($toname)."?= <{$to}>";
	if($fromname != '')
		$from = '=?utf-8?B?'.base64_encode($fromname)."?= <{$from}>";
	$subject = trim(preg_replace('#[\n\r]+#s', '', $subject));
	$subject = '=?utf-8?B?'.base64_encode($subject).'?=';

	$headers = 'From: ' . $from."\r\n".'Date: ' . date('r') . "\r\n" . 'MIME-Version: 1.0' . "\r\n" . 'Content-transfer-encoding: 8bit' . "\r\n" . 'Content-type: text/' . $type . '; charset=utf-8' . "\r\n" . 'X-Mailer: Ьн Mailer';

	// Change the linebreaks used in the headers according to OS
	if (strtoupper(substr(PHP_OS, 0, 3)) == 'MAC')
		$headers = str_replace("\r\n", "\r", $headers);
	else if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN')
		$headers = str_replace("\r\n", "\n", $headers);

	return @mail($to, $subject, $message, $headers);
}

И AkelPad падает без сохранения всех изменённых документов.
Беда где-то с одинарными кавычками видимо. Может для них другой RegExp нужен?

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

beotiger wrote:Беда где-то с одинарными кавычками видимо. Может для них другой RegExp нужен?
По идее - нет, разница между одинарными и двойными только в том, как показывать содержимое. С правилами по отдельности тоже падает? Если попробовать удалять в скрипте строки по одной, можно найти глючную?
AkelPad у вас 4.9.6/4.9.7? У меня обе разрядности первой и х86 второй не падают.

Offline
Posts: 53
Joined: Wed Dec 09, 2015 6:33 pm

Post by beotiger »

Skif_off
Да, падает только с одинарными кавычками.
Методом исключения я вывел строки, на которых AkelPad падает:
(в моём случае при применении Ваших RegExp'ов)

Code: Select all

$headers = 'From: ' . $from."\r\n".'Date: ' . date('r') . "\r\n" . 'MIME-Version: 1.0' . "\r\n" . 'Content-transfer-encoding: 8bit' . "\r\n" . 'Content-type: text/' . $type . '; charset=utf-8' . "\r\n" . 'X-Mailer: Ьн Mailer';
Моя система: Windows 10 Home 64bit, AkelPad x86

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

beotiger
Проверял на Win7x64, может быть, у кого-нибудь ещё вылезет проблема. Вообще, Win10 - та ещё поделка...
php.coder и html.coder уже содержат какие-нибудь ваши модификации?

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

Post by Lenchik »

Не отследил, когда поменялось поведение, но ранее код

Code: Select all

Folds:
;===================================================================================
;Flags  Font    Color   Color   Fold      Fold      Deli        Parent  Rule    Rule
;       style   text    bkgrnd  start     end       miters      ID      ID      file
;===================================================================================
;513=1+512
513	3	${COMM}	0	"__END__"	""	""	0	0
вызывал отображение закомментированным всего до конца файла после указания "__END__".
Сейчас же он комментирует только сам себя (Акель 4.9.6, Кодер 19.1).
Как теперь сделать то же самое поведение, как было раньше?
EDIT:
Сам спросил, сам отвечаю.
Срабатывает

Code: Select all

;2097665=1+512+2097152
2097665	3	${COMM}	0	"__END__"	"\Z"	""	0	0

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

Post by Drugmix »

Instructor
у QuotesRE правил раскраска групп идёт через конструкцию типа \4=(0,${COMM},#ff0000), в связи с не так давно появившейся взаимосвязью правил (Rule ID && Parent ID), хочется иметь возможность "проброса" значения от родительского правила.
Например, можно было бы ввести значение -1, которое бы означало такой проброс.

Если не очень понятно про что я, то вот пример:

Code: Select all

QuotesRE:
0	`(")((?:[^"]|"")*+)(")` `\1=(0,${DEL1},0) \2=(0,${STR},0) \3=(0,${DEL1},0)`	-3	0	; literal strings.
0	'^(Command)(?:(?:\s*+,\s*+|\s++)((?:[^;,\s"]|"[^"]*?"|(?<=`),|(?<!\s);|\s++(?![,;\s]))++))\s*+$' "\1=(2,${AREA},0) \2=(0,0,${NUM})"	0	1
Первое правило окрашивает цвет текста у дословных строк.
Второе правило окрашивает цвет фона первого аргумента у команды Command. Аргумент может состоять из любого сочетания (или единичного употребления) переменных и дословных строк.
Вот скриншот работы этих правил на паре примеров:
Image
Как видно, на второй строке у дословных строк нет синего фона, который характерен для первого аргумента команды Command, хотя эти строки и являются его составной частью.

Хотелось бы, чтобы я мог в одном правиле задать изменение только цвета фона текста, а в другом - цвета текста, и чтобы при срабатывании в документе обоих правил был окрашен цветом и текст, и его фон.


p.s.: ура, наконец-то долгожданный 4.9.7!

Offline
Posts: 9
Joined: Sat Dec 28, 2013 2:43 am

Post by kuchkan »

Instructor wrote:
kuchkan wrote:С последними css.coder перестала нормально работать автоматическая подсветка выделенного, если в выделенном есть пробел или двоеточие (возможно, другие символы). В версии от 18.09.2014 всё нормально.
Не воспроизводится. Оповестите, если это будет продолжаться после релиза 4.9.7.
В 4.9.7 с автоподсветкой выделенного в css и json всё отлично. Спасибо!

Offline
Posts: 53
Joined: Wed Dec 09, 2015 6:33 pm

Post by beotiger »

Skif_off, удалось ошибку воспроизвести и на Win7.

После продолжительной серии тестов удалось выяснить следующее:
Эта ошибка проявляется когда ширина Code::Fold панели определенной толщины, и включен перенос строк по словам (по символам не проверял)
и отрывается файл с длинной строкой в кавычках, котрая должна подсвечиваться таким RegExp'ом в секции Folds: файла php.coder

Code: Select all

3408385   3   ${STR}   0   `(?<!\\)"`   `(?<!\\)"`   ""   0   0
Причём если размер строки меняется, ошибка может не проявляться. Также она не проявляется, если отключен перенос по словам в настройках Вида или изменена ширина панели CodeFold'а или размер окна программы.
Ошибка проявляется, если открыт ещё хоть один файл, режим окон - PseudoMDI.

Пример кода, который может заставить вылететь AkelPad:

Code: Select all

<?php
			header("Location: http://www.rodosobraz.ru/setpar.php?ref=http://rodoslogos.ru/1sept.php&parid={$aff}&href={$href}&link={$link}");	
Посмотреть скриншот с упавшим AkelPad можно по ссылке:
http://beotiger.com/inc/img/scr_akelpad.jpg

Может это сообщение следует поместить в ветку Bugs / Найденные баги?

Offline
Posts: 53
Joined: Wed Dec 09, 2015 6:33 pm

CodeFold в JS и HTML

Post by beotiger »

У меня в JS файлах не подсвечиваются другим цветом общие методы языка (типа replace, substring, search и т.п.). Я пользуюсь AkelPad'ом недавно, версия 4.9.6

Как исправить? В js.coder для, например, replace указано такое правило в секции Words (тема стандартная из плагина Coder, скачанного по адресу http://akelpad.sourceforge.net/files/plugs/Coder.zip):

Code: Select all

1	0	0	0	replace
а для parseFloat также к примеру такое правило:

Code: Select all

1	0	${OP}	0	parseFloat
И, как можно догадаться, parseFloat подсвечивается, а replace - нет. Почему у replace и десятков других команд было убрано ${OP} в третьем параметре?
Мне что, теперь вручную их добавлять, если я хочу видеть подсветку таких слов в файлах? :D

Также для JS файлов почему-то комментарии /* ... */ попадали в панель CodeFold. Это я исправил изменением правила для /* */ в секции Folds.
Было:

Code: Select all

;513=1+512
513	3	${COMM}	0	"/*"      "*/"      ""          0	0
Я исправил так:

Code: Select all

; 262657 = 1 + 512 + 262144
262657 3	${COMM}	0	"/*"      "*/"      ""          0	0
Магическая константа 262144 - не показывать fold в списке.

Я пользуюсь темой <Solarized Dark>, в ней также не подсвечивались атрибуты в HTML файлах, но я относительно легко исправил ручным редактированием переменной ATTR в Coder::Settings.

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

Post by Instructor »

beotiger wrote:Эта ошибка проявляется когда ширина Code::Fold панели определенной толщины, и включен перенос строк по словам ...
См. Coder 19.3.
beotiger wrote:У меня в JS файлах не подсвечиваются другим цветом общие методы языка (типа replace, substring, search и т.п.).
Копируете "js.coder" под именем, например, "_js.coder". Делаете правки, удаляете "cache" файл.
Post Reply