LINUX.ORG.RU

Подскажите регулярку для подсветки синтаксиса для mcedit

 ,


0

1

Какую либу для регулярных выражений использует mcedit? Есть подозрение, что у него что-то свое, но в man mcedit очень мало про это написано.

Я делаю подсветку синтаксиса для rust: https://github.com/chabapok/mc-rust-lang и столкнулся с проблемой

Есть строка:

let v = 42u16;

Как написать регулярку чтобы подсветило цветом u16? При этом, 42 и ; не должны подсвечиваться. При этом, если строка выглядит так:

let mumu16 = 27;

то в ней окончание переменной u16 подсвечиваться не должно.

Ответ на: комментарий от Virtuos86

Не прокатило

У меня, вообще, подозрение, что он \D не понимает. Как и \d. У него какие-то свои регэкспы. Например, \d не матчит числа, как и \\d и \\\d.

chabapok ()
Последнее исправление: chabapok (всего исправлений: 1)
Ответ на: комментарий от chabapok

Вообще я поискал и нашел описание БНФ грамматики Раста: https://doc.rust-lang.org/grammar.html. Определение чисел там есть, и, мне кажется, лучше самому не придумывать его :). Но там не описаны суффиксы для указания типа числа. В принципе, если тебе нужно подсвечивать только эти суффиксы, то так и напиши тупым перебором несколько регулярок:

[0-9]i|u|f8
[0-9]i|u|f16
[0-9]i|u|f32
[0-9]i|u|f64
[0-9]i|u|f128
[0-9]usize
То есть суффикс должен идти после хотя бы одной цифры. Не совсем корректное, конечно, определение.

Надеюсь, диапазон чисел mcedit понимает?

Virtuos86 ★★★★★ ()
Последнее исправление: Virtuos86 (всего исправлений: 2)
Ответ на: комментарий от Virtuos86

не понимает, но можно так:

keyword \[0123456789\]u16 yellow

Но это вызовет то, что подкрасится не только u16, но и все числа перед ним. Хочется отделить их визуально.

chabapok ()
Ответ на: комментарий от Virtuos86

То есть проблема не в том, что я не в состоянии составить регулярку, и не в том, что я не знаю как можно писать в раст (хотя за идею глянуть в доку - спасибо :)) )

Но на самом деле, основная проблема в том, что mc для подсветки использует свои регулярки, по всей видимости - ради быстрого парсинга. Я посмотрел репу mc https://github.com/MidnightCommander/mc и там есть такой https://github.com/MidnightCommander/mc/blob/master/src/editor/syntax.c который, по всей видимости, является парсером. И, вобщем, суть в том, что там нет никаких #include <pcre.h> или чего-либо похожего на внешний стандартный парсер.

Если бы оно поддерживало стандартные регулярки - скорей всего мне помощь не понадобилась бы.

chabapok ()

нашел! как-то так:

keyword whloeright u8 yellow
chabapok ()
Ответ на: комментарий от chabapok

И, вобщем, суть в том, что там нет никаких #include <pcre.h> или чего-либо похожего на внешний стандартный парсер.

В mc используется GLib, которая сама использует libpcre.

akk ★★★★★ ()
Последнее исправление: akk (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Ха, я посмотрел эту репу, но не нашел, где там определение регулярок. ТС же написал, что проблема заключается в том, чтобы разобраться, какие регэкспы использует редактор mc.

Virtuos86 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.