mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	runtime(misc): announce adoption of various runtime files
f9ca139e3a
Co-authored-by: Christian Brabandt <cb@256bit.org>
		
	
		
			
				
	
	
		
			191 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
" Vim syntax file
 | 
						|
" Language:	Lex and Flex
 | 
						|
" Maintainer:	This runtime file is looking for a new maintainer.
 | 
						|
" Former Maintainer:	Charles E. Campbell
 | 
						|
" Contributor:	Robert A. van Engelen <engelen@acm.org>
 | 
						|
" Version:	18
 | 
						|
" Last Change:	Apr 24, 2020
 | 
						|
"   2024 Feb 19 by Vim Project (announce adoption)
 | 
						|
 | 
						|
" quit when a syntax file was already loaded
 | 
						|
if exists("b:current_syntax")
 | 
						|
  finish
 | 
						|
endif
 | 
						|
 | 
						|
" Read the C++ syntax to start with
 | 
						|
let s:Cpath= fnameescape(expand("<sfile>:p:h")."/cpp.vim")
 | 
						|
if !filereadable(s:Cpath)
 | 
						|
 for s:Cpath in split(globpath(&rtp,"syntax/cpp.vim"),"\n")
 | 
						|
  if filereadable(fnameescape(s:Cpath))
 | 
						|
   let s:Cpath= fnameescape(s:Cpath)
 | 
						|
   break
 | 
						|
  endif
 | 
						|
 endfor
 | 
						|
endif
 | 
						|
exe "syn include @lexCcode ".s:Cpath
 | 
						|
 | 
						|
" --- ========= ---
 | 
						|
" --- Lex stuff ---
 | 
						|
" --- ========= ---
 | 
						|
 | 
						|
" 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();
 | 
						|
" }   
 | 
						|
 | 
						|
" Definitions Section with initial code blocks, abbreviations, options, states
 | 
						|
if has("folding")
 | 
						|
 syn region lexAbbrvBlock	fold	start="^\S"	end="^\ze%%"	skipnl	nextgroup=lexPatBlock	contains=lexOptions,lexAbbrv,lexInitialCodeBlock,lexInclude,lexAbbrvComment,lexStartState
 | 
						|
else
 | 
						|
 syn region lexAbbrvBlock		start="^\S"	end="^\ze%%"	skipnl	nextgroup=lexPatBlock	contains=lexOptions,lexAbbrv,lexInitialCodeBlock,lexInclude,lexAbbrvComment,lexStartState
 | 
						|
endif
 | 
						|
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
 | 
						|
if has("folding")
 | 
						|
 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
 | 
						|
else
 | 
						|
 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
 | 
						|
endif
 | 
						|
 | 
						|
" Rules Section with patterns and actions
 | 
						|
if has("folding")
 | 
						|
 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
 | 
						|
else
 | 
						|
 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
 | 
						|
endif
 | 
						|
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
 | 
						|
 | 
						|
if has("folding")
 | 
						|
 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
 | 
						|
else
 | 
						|
 syn region lexPatTagZoneStart		matchgroup=lexPatTag		start='{'	end='^}'	skipnl	skipwhite	contained	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatSep,lexPatInclude
 | 
						|
 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
 | 
						|
endif
 | 
						|
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
 | 
						|
syn match  lexSlashQuote	+\(\\\\\)*\\"+				contained
 | 
						|
syn match  lexSlashBrace	+\(\\\\\)*\\\[+				contained
 | 
						|
if has("folding")
 | 
						|
 syn region lexPatCode		fold	matchgroup=Delimiter	start="{"	end="}"	skipnl	contained	contains=@lexCcode,lexCFunctions
 | 
						|
else
 | 
						|
 syn region lexPatCode			matchgroup=Delimiter	start="{"	end="}"	skipnl	contained	contains=@lexCcode,lexCFunctions
 | 
						|
endif
 | 
						|
 | 
						|
" User Code Section with final code block
 | 
						|
syn region lexFinalCodeBlock	matchgroup=Todo	start="^%%"	end="\%$"	contained	contains=@lexCcode
 | 
						|
 | 
						|
" 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
 | 
						|
 | 
						|
" <c.vim> includes several ALLBUTs; these have to be treated so as to exclude lex* groups
 | 
						|
syn cluster cParenGroup		add=lex.*
 | 
						|
syn cluster cDefineGroup	add=lex.*
 | 
						|
syn cluster cPreProcGroup	add=lex.*
 | 
						|
syn cluster cMultiGroup		add=lex.*
 | 
						|
 | 
						|
" Synchronization
 | 
						|
syn sync clear
 | 
						|
syn sync minlines=500
 | 
						|
syn sync match lexSyncPat	grouphere  lexPatBlock	"^%[a-zA-Z]"
 | 
						|
syn sync match lexSyncPat	groupthere lexPatBlock	"^<$"
 | 
						|
syn sync match lexSyncPat	groupthere lexPatBlock	"^%%"
 | 
						|
 | 
						|
" The default highlighting.
 | 
						|
if !exists("skip_lex_syntax_inits")
 | 
						|
 hi def link lexAbbrvComment	lexPatComment
 | 
						|
 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
 | 
						|
 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
 | 
						|
 hi def link lexSlashBrace	lexPat
 | 
						|
 hi def link lexStartState	lexPatTag
 | 
						|
 hi def link lexStartStateCmd	Special
 | 
						|
endif
 | 
						|
 | 
						|
let b:current_syntax = "lex"
 | 
						|
 | 
						|
" vim:ts=8
 |