подсветка: разные типы меток в ассемблере - разным цветом

и другие vi-подобные редакторы

Модератор: /dev/random

Аватара пользователя
ivanr
Сообщения: 166
Статус: эblan
ОС: Debian 4.0

подсветка: разные типы меток в ассемблере - разным цветом

Сообщение ivanr »

Здравствуйте Уважаемые.
Подскажите пожалуйста такую вещь.
Вот решил тут создать файл синтаксиса для одного языка программирования, сравнительно простого ассемблера.
Все в общем заработало примерно так, как я хотел, но есть один вопрос, довольно долго сидел, но так и не понял, как это сделать.
В общем, в синтаксисе есть два типа меток

Одна вот такая, в начале строки, а за идут некоторые команды

1-9\{4}H
то есть четыре или меньше цифры(минимум одна) и одна заглавная буква "H", за буквой пробел или TAB, за пробелом команды.
Это специальная метка

А вот вторая такого типа
[0-9A-Z]
То есть любое количество цифр и/или букв(буквы заглавные), но не включая предыдущую метку, за меткой идут пробел или TAB, за пробелом следуют команды.
Это стандартная метка

Нужно отделить эти две метки, таким образом, чтобы они подсвечивались разным цветом.
При этом метки не должны подсвечиваться, если они не подходят под тип меток для этого синтаксиса. То есть если одна из букв не заглавная или (в первом типе меток) за буквой "H" есть еще какие-то буквы или цифры.

Вот то что я наваял, но не работает

Код: Выделить всё

syn match mixalSpecialLabel /^[0-9]\{,4}\(H\)                                    специальная метка
syn region mixalLabel start=/^[0-9A-Z]/ keep=/^[0-9]\{,4}\(H\) end=/ \|    /     стандартная метка

Подскажите пожалуйста, как это можно реализовать?
Debian GNU/Linux 4.0
Спасибо сказали:

Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: подсветка: разные типы меток в ассемблере - разным цветом

Сообщение Luinnar »

ivanr писал(а):
18.02.2008 00:54
Подскажите пожалуйста такую вещь.
Вот решил тут создать файл синтаксиса для одного языка программирования, сравнительно простого ассемблера.
Все в общем заработало примерно так, как я хотел, но есть один вопрос, довольно долго сидел, но так и не понял, как это сделать.
...
Вот то что я наваял, но не работает

Код: Выделить всё

syn match mixalSpecialLabel /^[0-9]\{,4}\(H\)                                    специальная метка
syn region mixalLabel start=/^[0-9A-Z]/ keep=/^[0-9]\{,4}\(H\) end=/ \|    /     стандартная метка

Подскажите пожалуйста, как это можно реализовать?


Вот держи, должно работать:

Код: Выделить всё

syn match  mixalSpecialLabel "\<[0-9][0-9]\?[0-9]\?[0-9]\?H\>"
syn match  mixalLabel "\<[0-9A-GI-Z]*\>"
syn match  mixalLabel "\<[0-9A-Z]*H[0-9A-Z]\+\>"
syn match  mixalLabel "\<[0-9A-Z]*[A-GI-Z][0-9A-Z]*\>"
syn match  mixalLabel "\<[0-9][0-9][0-9][0-9][0-9]\+H\>"


PS: надеюсь, что ничего там не упустил... :)
Спасибо сказали:

Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: подсветка: разные типы меток в ассемблере - разным цветом

Сообщение Luinnar »

Luinnar писал(а):
11.03.2008 21:47
Вот держи, должно работать:

Код: Выделить всё

syn match  mixalSpecialLabel "\<[0-9][0-9]\?[0-9]\?[0-9]\?H\>"
syn match  mixalLabel "\<[0-9A-GI-Z]*\>"
syn match  mixalLabel "\<[0-9A-Z]*H[0-9A-Z]\+\>"
syn match  mixalLabel "\<[0-9A-Z]*[A-GI-Z][0-9A-Z]*\>"
syn match  mixalLabel "\<[0-9][0-9][0-9][0-9][0-9]\+H\>"


PS: надеюсь, что ничего там не упустил... :)


Оказывается, всё намного проще. Нужно просто сначала определить обычную метку, а затем специальную: :)

Код: Выделить всё

syn match  mixalLabel "\<[0-9A-Z]*\>"
syn match  mixalSpecialLabel "\<[0-9][0-9]\?[0-9]\?[0-9]\?H\>"
Спасибо сказали: