Попытка выяснить, как обрабатывать синтаксические ошибки при использовании режима PHP в Ace Editor для коротких кодов (чтобы включить короткие коды в коде PHP). Подсветка уже выглядит / работает нормально, проблема в синтаксических ошибках PHP, показывающих, когда используются шорткоды.
Простой шорткод будет [shortcode]
в то время как расширенный будет иметь открытые и закрывающие скобки [shortcode]something[/shortcode]
function foo( $title ) {
// Example single shortcode (without closing shortcode), [...] will be replaced with "Some value entered by user"$site_name = [get_input type="text" desc="Please enter the site name"];
// Example with open closing shortcodes
[check_question question="Do you want to add period to the end of the title?"]
$title .= '.';
[/check_question]
$title = ucfirst( $title );
return $title;
}
Может ли кто-нибудь помочь мне выяснить, как расширить режим / рабочий режим PHP или что нужно сделать, чтобы предотвратить появление синтаксических ошибок PHP в редакторе при включении шорткодов? Все отлично работает, кроме простых синтаксических ошибок PHP на коротких кодах.
https://github.com/ajaxorg/ace/wiki/Creating-or-Extending-an-Edit-Mode
Пример скрипки:
http://jsfiddle.net/tripflex/crm4ywu0/
Регулярное выражение, которое используется в бэкэнде для замены [...]
с пользовательскими значениями / кодом:
\[(\[?)(get_input|check_question)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+)\[\/\2\])?)(\]?)
Что прямо из обработки коротких кодов WordPress:
https://github.com/WordPress/WordPress/blob/master/wp-includes/js/shortcode.js#L105
https://github.com/WordPress/WordPress/blob/master/wp-includes/shortcodes.php#L264
Вы можете использовать это регулярное выражение для замены скобок в https://github.com/ajaxorg/ace/blob/v1.2.6/lib/ace/mode/php_worker.js#L51, перед передачей значения в лексер php.
К сожалению, нет способа сделать это без непосредственного изменения исходного кода в файле worker-php.js.
Других решений пока нет …