Thursday, September 18, 2014

Re: Syntax highlighting for identifier folowed by 3 numbers

On Thursday, September 18, 2014 6:39:03 AM UTC-5, RedX2501 wrote:
> Hello,
>
>
>
> I'm wondering what the proper way is to highlight an identifer
>
> followed by 3 numbers:
>
>
>
> syn cluset asapNumber=asapInteger,asapHex
>
>
>
> syn match 'MATRIX_DIM' nextgroup=asapNumber
>
>
>
> but the asapNumber following MATRIX_DIM must occurr exactly 3 times
>
> and it is not relevant if it is in the same line or not.
>
>
>
> What is the proper way of doing this?
>

You probably want the "skipwhite", "skipnl", and "skipempty" items as well, to allow multiple lines.

I don't know if there is a "proper" way; but to allow exactly three matches, one way is to use multiple asapNumber groups: asapNumber1, asapNumber2, and asapNumber3. 2 would be in the nextGroup of 1, and 3 would be in the nextGroup of 2. If you like, you could even make an asapNumberError that is the nextGroup of 3 to highlight when there are more than 3 numbers (since you say it MUST occur EXACTLY three times). You could likewise make a asapNoNumberError that matches things that are not a number and is the nextGroup of whatever you called your MATRIX_DIM match, and also asapNumber1 and asapNumber2. Then you also highlight when you have fewer than 3 numbers.

Example (not sure how well this works with clusters):

syn match startnums 'MATRIX_DIM' nextgroup=asapNumber1,asapErrNoNumber skipwhite skipnl skipempty
syn match asapErrNoNumber '[^0-9 ]\+' contained
syn match asapNumber1 '\d\+' contained nextgroup=asapNumber2,asapErrNoNumber skipwhite skipnl skipempty
syn match asapNumber2 '\d\+' contained nextgroup=asapNumber3,asapErrNoNumber skipwhite skipnl skipempty
syn match asapNumber3 '\d\+' contained nextgroup=asapErrNumber skipwhite skipnl skipempty
syn match asapErrNumber '\d\+' contained nextgroup=asapErrNumber skipwhite skipnl skipempty
hi def startnums guibg=blue
hi def asapNumber1 guibg=yellow
hi def asapNumber2 guibg=yellow
hi def asapNumber3 guibg=yellow
hi def link asapErrNumber Error
hi def link asapErrNoNumber Error

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: