1
0
Fork 0
mirror of https://github.com/vim/vim synced 2025-03-31 15:06:43 +02:00
vim/runtime/syntax/lex.vim

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

191 lines
8.5 KiB
VimL
Raw Permalink Normal View History

2004-06-13 20:20:40 +00:00
" Vim syntax file
2020-05-01 16:07:38 +02:00
" Language: Lex and Flex
" Maintainer: This runtime file is looking for a new maintainer.
" Former Maintainer: Charles E. Campbell
2020-05-01 16:07:38 +02:00
" Contributor: Robert A. van Engelen <engelen@acm.org>
" Version: 18
" Last Change: Apr 24, 2020
" 2024 Feb 19 by Vim Project (announce adoption)
2004-06-13 20:20:40 +00:00
" quit when a syntax file was already loaded
if exists("b:current_syntax")
2004-06-13 20:20:40 +00:00
finish
endif
2020-05-01 16:07:38 +02:00
" Read the C++ syntax to start with
let s:Cpath= fnameescape(expand("<sfile>:p:h")."/cpp.vim")
2012-11-15 21:28:22 +01:00
if !filereadable(s:Cpath)
2020-05-01 16:07:38 +02:00
for s:Cpath in split(globpath(&rtp,"syntax/cpp.vim"),"\n")
2012-11-15 21:28:22 +01:00
if filereadable(fnameescape(s:Cpath))
let s:Cpath= fnameescape(s:Cpath)
break
2004-06-13 20:20:40 +00:00
endif
2012-11-15 21:28:22 +01:00
endfor
2004-06-13 20:20:40 +00:00
endif
2012-11-15 21:28:22 +01:00
exe "syn include @lexCcode ".s:Cpath
2004-06-13 20:20:40 +00:00
2004-09-02 19:12:26 +00:00
" --- ========= ---
2004-06-13 20:20:40 +00:00
" --- Lex stuff ---
2004-09-02 19:12:26 +00:00
" --- ========= ---
2004-06-13 20:20:40 +00:00
2020-05-01 16:07:38 +02:00
" Definitions
" %%
" Rules
" %%
" User Code
"
" --- ======= ---
" --- Example ---
" --- ======= ---
"
" // this is a valid lex file
" // indented initial code block
" #include <stdlib.h>
" %{
" // initial code block
" #include <stdio.h>
" const char *sep = "";
" %}
" %option outfile="scanner.c" noyywrap nodefault
" %x COMMENT
" id [A-Za-z_][A-Za-z0-9_]*
" %%
" // indented initial action code block
" printf("BEGIN");
" {id} printf("%s%s", sep, yytext); sep = "";
" . |
" \n { sep = "\n"; }
" "/*" { BEGIN COMMENT; }
" "//".* { }
" <COMMENT>{
" "*/" { BEGIN INITIAL; }
" .|\n
" }
" <*><<EOF>> { // end of file
" printf("\nEND\n");
" yyterminate();
" }
" %%
" void scan()
" {
" while (yylex())
" continue;
" }
" /* main program */
" int main()
" {
" scan();
" }
2010-12-10 20:35:50 +01:00
2020-05-01 16:07:38 +02:00
" Definitions Section with initial code blocks, abbreviations, options, states
2010-01-06 20:54:52 +01:00
if has("folding")
2020-05-01 16:07:38 +02:00
syn region lexAbbrvBlock fold start="^\S" end="^\ze%%" skipnl nextgroup=lexPatBlock contains=lexOptions,lexAbbrv,lexInitialCodeBlock,lexInclude,lexAbbrvComment,lexStartState
2010-01-06 20:54:52 +01:00
else
2020-05-01 16:07:38 +02:00
syn region lexAbbrvBlock start="^\S" end="^\ze%%" skipnl nextgroup=lexPatBlock contains=lexOptions,lexAbbrv,lexInitialCodeBlock,lexInclude,lexAbbrvComment,lexStartState
2010-01-06 20:54:52 +01:00
endif
2020-05-01 16:07:38 +02:00
syn match lexOptions "^%\a\+\(\s.*\|[^{]*\)$" contains=lexOptionsEq,lexPatString,lexSlashQuote,lexBrace,lexSlashBrace
syn match lexOptionsEq "=" skipwhite contained
syn match lexAbbrv "^\I\i*\s"me=e-1 skipwhite contained nextgroup=lexAbbrvPat
syn match lexAbbrvPat "\s\S.*$"lc=1 contained contains=lexPatAbbrv,lexPatString,lexSlashQuote,lexBrace,lexSlashBrace nextgroup=lexAbbrv,lexInclude
syn match lexStartState "^%\(xs\?\|s\)\(t\(a\(t\(e\?\)\?\)\?\)\?\)\?\(\s\+\I\i*\)\+\s*$" contained contains=lexStartStateCmd
syn match lexStartStateCmd '^%\(xs\?\|s\)\(t\(a\(t\(e\?\)\?\)\?\)\?\)\?' contained
2010-01-06 20:54:52 +01:00
if has("folding")
2020-05-01 16:07:38 +02:00
syn region lexInitialCodeBlock fold start="^\s\+" end="^\S"me=e-1 contains=@lexCcode
syn region lexInclude fold matchgroup=lexSep start="^%\a*{" end="^%\?}" contained contains=@lexCcode,lexCFunctions
syn region lexAbbrvComment fold start="^\s*//" end="$" contains=@Spell
syn region lexAbbrvComment fold start="^\s*/\*" end="\*/" contains=@Spell
2010-01-06 20:54:52 +01:00
else
2020-05-01 16:07:38 +02:00
syn region lexInitialCodeBlock start="^\s\+" end="^\S"me=e-1 contains=@lexCcode
syn region lexInclude matchgroup=lexSep start="^%\a*{" end="^%\?}" contained contains=@lexCcode,lexCFunctions
syn region lexAbbrvComment start="^\s*//" end="$" contains=@Spell
syn region lexAbbrvComment start="^\s*/\*" end="\*/" contains=@Spell
2010-01-06 20:54:52 +01:00
endif
2004-06-13 20:20:40 +00:00
2020-05-01 16:07:38 +02:00
" Rules Section with patterns and actions
2010-01-06 20:54:52 +01:00
if has("folding")
2020-05-01 16:07:38 +02:00
syn region lexPatBlock fold matchgroup=Todo start="^%%" matchgroup=Todo end="^\ze%%" skipnl skipwhite nextgroup=lexFinalCodeBlock contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatSep,lexPatInclude
syn region lexPat fold start="\S" skip="\\\\\|\\\s" end="\ze\(\s*$\|\s\+\(\h\|{\W\|{$\|[-+*]\|//\|/\*\)\)" skipwhite contained nextgroup=lexMorePat,lexPatSep,lexPatEnd contains=lexPatTag,lexPatString,lexSlashQuote,lexPatAbbrv,lexBrace,lexSlashBrace
syn region lexPatInclude fold matchgroup=lexSep start="^%{" end="^%}" contained contains=@lexCcode
syn region lexBrace fold matchgroup=Character start="\[" skip="\\.\|\[:\a\+:\]\|\[\.\a\+\.\]\|\[=.=\]" end="\]" contained
syn region lexPatString fold matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained
2010-01-06 20:54:52 +01:00
else
2020-05-01 16:07:38 +02:00
syn region lexPatBlock matchgroup=Todo start="^%%" matchgroup=Todo end="^\ze%%" skipnl skipwhite nextgroup=lexFinalCodeBlock contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatSep,lexPatInclude
syn region lexPat start="\S" skip="\\\\\|\\\s" end="\ze\(\s*$\|\s\+\(\h\|{\W\|{$\|[-+*]\|//\|/\*\)\)" skipwhite contained nextgroup=lexMorePat,lexPatSep,lexPatEnd contains=lexPatTag,lexPatString,lexSlashQuote,lexPatAbbrv,lexBrace,lexSlashBrace
syn region lexPatInclude matchgroup=lexSep start="^%{" end="^%}" contained contains=@lexCcode
syn region lexBrace matchgroup=Character start="\[" skip="\\.\|\[:\a\+:\]\|\[\.\a\+\.\]\|\[=.=\]" end="\]" contained
syn region lexPatString matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained
2010-01-06 20:54:52 +01:00
endif
2020-05-01 16:07:38 +02:00
syn match lexPatAbbrv "{\I\i*}"hs=s+1,he=e-1 contained
syn match lexPatTag "^<\^\?\(\I\i*\|\*\)\(,\^\?\(\I\i*\|\*\)\)*>" contained nextgroup=lexPat,lexMorePat,lexPatSep,lexPatEnd
syn match lexPatTagZone "^<\^\?\(\I\i*\|\*\)\(,\^\?\(\I\i*\|\*\)\)*>\s*{$"me=e-1 contained nextgroup=lexPatTagZoneStart
2012-11-15 21:28:22 +01:00
2010-01-06 20:54:52 +01:00
if has("folding")
2020-05-01 16:07:38 +02:00
syn region lexPatTagZoneStart fold matchgroup=lexPatTag start='{$' end='^}' skipnl skipwhite contained contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatSep,lexPatInclude
syn region lexPatComment fold start="//" end="$" skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
syn region lexPatComment fold start="/\*" end="\*/" skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
2010-01-06 20:54:52 +01:00
else
2020-11-29 14:36:24 +01:00
syn region lexPatTagZoneStart matchgroup=lexPatTag start='{' end='^}' skipnl skipwhite contained contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatSep,lexPatInclude
2020-05-01 16:07:38 +02:00
syn region lexPatComment start="//" end="$" skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
syn region lexPatComment start="/\*" end="\*/" skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
2010-01-06 20:54:52 +01:00
endif
2020-05-01 16:07:38 +02:00
syn match lexPatEnd "\s*$" skipnl contained
syn match lexPatCodeLine "[^{\[].*" contained contains=@lexCcode,lexCFunctions
syn match lexMorePat "\s*|\s*$" skipnl contained nextgroup=lexPat,lexPatTag,lexPatComment
syn match lexPatSep "\s\+" contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine
2004-06-13 20:20:40 +00:00
syn match lexSlashQuote +\(\\\\\)*\\"+ contained
2020-05-01 16:07:38 +02:00
syn match lexSlashBrace +\(\\\\\)*\\\[+ contained
2010-01-06 20:54:52 +01:00
if has("folding")
2020-05-01 16:07:38 +02:00
syn region lexPatCode fold matchgroup=Delimiter start="{" end="}" skipnl contained contains=@lexCcode,lexCFunctions
2010-01-06 20:54:52 +01:00
else
2020-05-01 16:07:38 +02:00
syn region lexPatCode matchgroup=Delimiter start="{" end="}" skipnl contained contains=@lexCcode,lexCFunctions
2010-01-06 20:54:52 +01:00
endif
2004-06-13 20:20:40 +00:00
2020-05-01 16:07:38 +02:00
" User Code Section with final code block
syn region lexFinalCodeBlock matchgroup=Todo start="^%%" end="\%$" contained contains=@lexCcode
2004-06-13 20:20:40 +00:00
2020-05-01 16:07:38 +02:00
" Lex macros which may appear in C/C++ code blocks
syn keyword lexCFunctions BEGIN ECHO REJECT yytext YYText yyleng YYLeng yymore yyless yywrap yylook
syn keyword lexCFunctions yyrestart yyterminate yylineno yycolumno yyin yyout
syn keyword lexCFunctions input unput output winput wunput woutput
syn keyword lexCFunctions yyinput yyunput yyoutput yywinput yywunput yywoutput
2012-11-15 21:28:22 +01:00
2004-06-13 20:20:40 +00:00
" <c.vim> includes several ALLBUTs; these have to be treated so as to exclude lex* groups
2020-05-01 16:07:38 +02:00
syn cluster cParenGroup add=lex.*
2004-06-13 20:20:40 +00:00
syn cluster cDefineGroup add=lex.*
syn cluster cPreProcGroup add=lex.*
2020-05-01 16:07:38 +02:00
syn cluster cMultiGroup add=lex.*
2004-06-13 20:20:40 +00:00
" Synchronization
syn sync clear
2012-11-15 21:28:22 +01:00
syn sync minlines=500
2004-06-13 20:20:40 +00:00
syn sync match lexSyncPat grouphere lexPatBlock "^%[a-zA-Z]"
syn sync match lexSyncPat groupthere lexPatBlock "^<$"
2020-05-01 16:07:38 +02:00
syn sync match lexSyncPat groupthere lexPatBlock "^%%"
2004-06-13 20:20:40 +00:00
" The default highlighting.
if !exists("skip_lex_syntax_inits")
hi def link lexAbbrvComment lexPatComment
2020-05-01 16:07:38 +02:00
hi def link lexAbbrvPat lexPat
hi def link lexAbbrv Special
hi def link lexBrace lexPat
hi def link lexCFunctions PreProc
hi def link lexMorePat Special
hi def link lexOptions PreProc
hi def link lexOptionsEq Operator
hi def link lexPatComment Comment
hi def link lexPat Function
2020-05-01 16:07:38 +02:00
hi def link lexPatString lexPat
hi def link lexPatAbbrv Special
hi def link lexPatTag Statement
hi def link lexPatTagZone lexPatTag
hi def link lexSep Delimiter
hi def link lexSlashQuote lexPat
2020-05-01 16:07:38 +02:00
hi def link lexSlashBrace lexPat
hi def link lexStartState lexPatTag
hi def link lexStartStateCmd Special
endif
2004-06-13 20:20:40 +00:00
let b:current_syntax = "lex"
2020-05-01 16:07:38 +02:00
" vim:ts=8