mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	related: #14558 closes: #14561 ported from: https://github.com/wuelnerdotexe/vim-astro Signed-off-by: Philip H <47042125+pheiduck@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
		
			
				
	
	
		
			191 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " Vim syntax file.
 | |
| " Language:    Astro
 | |
| " Author:      Wuelner Martínez <wuelner.martinez@outlook.com>
 | |
| " Maintainer:  Wuelner Martínez <wuelner.martinez@outlook.com>
 | |
| " URL:         https://github.com/wuelnerdotexe/vim-astro
 | |
| " Last Change: 2022 Aug 22
 | |
| " Based On:    Evan Lecklider's vim-svelte
 | |
| " Changes:     See https://github.com/evanleck/vim-svelte
 | |
| " Credits:     See vim-svelte on github
 | |
| 
 | |
| " Quit when a (custom) syntax file was already loaded.
 | |
| if !exists('main_syntax')
 | |
|   if exists('b:current_syntax')
 | |
|     finish
 | |
|   endif
 | |
|   let main_syntax = 'astro'
 | |
| elseif exists('b:current_syntax') && b:current_syntax == 'astro'
 | |
|   finish
 | |
| endif
 | |
| 
 | |
| " Astro syntax variables are initialized.
 | |
| let g:astro_typescript = get(g:, 'astro_typescript', 'disable')
 | |
| let g:astro_stylus = get(g:, 'astro_stylus', 'disable')
 | |
| 
 | |
| let s:cpoptions_save = &cpoptions
 | |
| set cpoptions&vim
 | |
| 
 | |
| " Embedded HTML syntax.
 | |
| runtime! syntax/html.vim
 | |
| 
 | |
| " htmlTagName: expand HTML tag names to include mixed case and periods.
 | |
| syntax match htmlTagName contained "\<[a-zA-Z\.]*\>"
 | |
| 
 | |
| " astroDirectives: add Astro Directives to HTML arguments.
 | |
| syntax match astroDirectives contained '\<[a-z]\+:[a-z|]*\>' containedin=htmlTag
 | |
| 
 | |
| unlet b:current_syntax
 | |
| 
 | |
| if g:astro_typescript == 'enable'
 | |
|   " Embedded TypeScript syntax.
 | |
|   syntax include @astroJavaScript syntax/typescript.vim
 | |
| 
 | |
|   " javaScriptExpression: a javascript expression is used as an arg value.
 | |
|   syntax clear javaScriptExpression
 | |
|   syntax region javaScriptExpression
 | |
|         \ contained start=+&{+
 | |
|         \ keepend end=+};+
 | |
|         \ contains=@astroJavaScript,@htmlPreproc
 | |
| 
 | |
|   " javaScript: add TypeScript support to HTML script tag.
 | |
|   syntax clear javaScript
 | |
|   syntax region javaScript
 | |
|         \ start=+<script\_[^>]*>+
 | |
|         \ keepend
 | |
|         \ end=+</script\_[^>]*>+me=s-1
 | |
|         \ contains=htmlScriptTag,@astroJavaScript,@htmlPreproc,htmlCssStyleComment
 | |
| else
 | |
|   " Embedded JavaScript syntax.
 | |
|   syntax include @astroJavaScript syntax/javascript.vim
 | |
| endif
 | |
| 
 | |
| " astroFence: detect the Astro fence.
 | |
| syntax match astroFence contained +^---$+
 | |
| 
 | |
| " astrojavaScript: add TypeScript support to Astro code fence.
 | |
| syntax region astroJavaScript
 | |
|       \ start=+^---$+
 | |
|       \ keepend
 | |
|       \ end=+^---$+
 | |
|       \ contains=htmlTag,@astroJavaScript,@htmlPreproc,htmlCssStyleComment,htmlEndTag,astroFence
 | |
|       \ fold
 | |
| 
 | |
| unlet b:current_syntax
 | |
| 
 | |
| if g:astro_typescript == 'enable'
 | |
|   " Embedded TypeScript React (TSX) syntax.
 | |
|   syntax include @astroJavaScriptReact syntax/typescriptreact.vim
 | |
| else
 | |
|   " Embedded JavaScript React (JSX) syntax.
 | |
|   syntax include @astroJavaScriptReact syntax/javascriptreact.vim
 | |
| endif
 | |
| 
 | |
| " astroJavaScriptExpression: add {JSX or TSX} support to Astro expresions.
 | |
| execute 'syntax region astroJavaScriptExpression start=+{+ keepend end=+}+ ' .
 | |
|       \ 'contains=@astroJavaScriptReact, @htmlPreproc containedin=' . join([
 | |
|       \   'htmlArg', 'htmlBold', 'htmlBoldItalic', 'htmlBoldItalicUnderline',
 | |
|       \   'htmlBoldUnderline', 'htmlBoldUnderlineItalic', 'htmlH1', 'htmlH2',
 | |
|       \   'htmlH3', 'htmlH4', 'htmlH5', 'htmlH6', 'htmlHead', 'htmlItalic',
 | |
|       \   'htmlItalicBold', 'htmlItalicBoldUnderline', 'htmlItalicUnderline',
 | |
|       \   'htmlItalicUnderlineBold', 'htmlLeadingSpace', 'htmlLink',
 | |
|       \   'htmlStrike', 'htmlString', 'htmlTag', 'htmlTitle', 'htmlUnderline',
 | |
|       \   'htmlUnderlineBold', 'htmlUnderlineBoldItalic',
 | |
|       \   'htmlUnderlineItalic', 'htmlUnderlineItalicBold', 'htmlValue'
 | |
|       \ ], ',')
 | |
| 
 | |
| " cssStyle: add CSS style tags support in TypeScript React.
 | |
| syntax region cssStyle
 | |
|       \ start=+<style\_[^>]*>+
 | |
|       \ keepend
 | |
|       \ end=+</style\_[^>]*>+me=s-1
 | |
|       \ contains=htmlTag,@htmlCss,htmlCssStyleComment,@htmlPreproc,htmlEndTag
 | |
|       \ containedin=@astroJavaScriptReact
 | |
| 
 | |
| unlet b:current_syntax
 | |
| 
 | |
| " Embedded SCSS syntax.
 | |
| syntax include @astroScss syntax/scss.vim
 | |
| 
 | |
| " cssStyle: add SCSS style tags support in Astro.
 | |
| syntax region scssStyle
 | |
|       \ start=/<style\>\_[^>]*\(lang\)=\("\|''\)[^\2]*scss[^\2]*\2\_[^>]*>/
 | |
|       \ keepend
 | |
|       \ end=+</style>+me=s-1
 | |
|       \ contains=@astroScss,astroSurroundingTag
 | |
|       \ fold
 | |
| 
 | |
| unlet b:current_syntax
 | |
| 
 | |
| " Embedded SASS syntax.
 | |
| syntax include @astroSass syntax/sass.vim
 | |
| 
 | |
| " cssStyle: add SASS style tags support in Astro.
 | |
| syntax region sassStyle
 | |
|       \ start=/<style\>\_[^>]*\(lang\)=\("\|''\)[^\2]*sass[^\2]*\2\_[^>]*>/
 | |
|       \ keepend
 | |
|       \ end=+</style>+me=s-1
 | |
|       \ contains=@astroSass,astroSurroundingTag
 | |
|       \ fold
 | |
| 
 | |
| unlet b:current_syntax
 | |
| 
 | |
| " Embedded LESS syntax.
 | |
| syntax include @astroLess syntax/less.vim
 | |
| 
 | |
| " cssStyle: add LESS style tags support in Astro.
 | |
| syntax region lessStyle
 | |
|       \ start=/<style\>\_[^>]*\(lang\)=\("\|''\)[^\2]*less[^\2]*\2\_[^>]*>/
 | |
|       \ keepend
 | |
|       \ end=+</style>+me=s-1
 | |
|       \ contains=@astroLess,astroSurroundingTag
 | |
|       \ fold
 | |
| 
 | |
| unlet b:current_syntax
 | |
| 
 | |
| " Embedded Stylus syntax.
 | |
| " NOTE: Vim does not provide stylus support by default, but you can install
 | |
| "       this plugin to support it: https://github.com/wavded/vim-stylus
 | |
| if g:astro_stylus == 'enable'
 | |
|   try
 | |
|     " Embedded Stylus syntax.
 | |
|     syntax include @astroStylus syntax/stylus.vim
 | |
| 
 | |
|     " stylusStyle: add Stylus style tags support in Astro.
 | |
|     syntax region stylusStyle
 | |
|           \ start=/<style\>\_[^>]*\(lang\)=\("\|''\)[^\2]*stylus[^\2]*\2\_[^>]*>/
 | |
|           \ keepend
 | |
|           \ end=+</style>+me=s-1
 | |
|           \ contains=@astroStylus,astroSurroundingTag
 | |
|           \ fold
 | |
| 
 | |
|     unlet b:current_syntax
 | |
|   catch
 | |
|     echomsg "you need install a external plugin for support stylus in .astro files"
 | |
|   endtry
 | |
| endif
 | |
| 
 | |
| " astroSurroundingTag: add surround HTML tag to script and style.
 | |
| syntax region astroSurroundingTag
 | |
|       \ start=+<\(script\|style\)+
 | |
|       \ end=+>+
 | |
|       \ contains=htmlTagError,htmlTagN,htmlArg,htmlValue,htmlEvent,htmlString
 | |
|       \ contained
 | |
|       \ fold
 | |
| 
 | |
| " Define the default highlighting.
 | |
| " Only used when an item doesn't have highlighting yet.
 | |
| highlight default link astroDirectives Special
 | |
| highlight default link astroFence Comment
 | |
| 
 | |
| let b:current_syntax = 'astro'
 | |
| if main_syntax == 'astro'
 | |
|   unlet main_syntax
 | |
| endif
 | |
| 
 | |
| " Sync from start because of the wacky nesting.
 | |
| syntax sync fromstart
 | |
| 
 | |
| let &cpoptions = s:cpoptions_save
 | |
| unlet s:cpoptions_save
 | |
| " vim: ts=8
 |