mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
runtime(astro): Add filetype, syntax and indent plugin
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>
This commit is contained in:
committed by
Christian Brabandt
parent
b09fa35a04
commit
d3ff129ce8
190
runtime/syntax/astro.vim
Normal file
190
runtime/syntax/astro.vim
Normal file
@@ -0,0 +1,190 @@
|
||||
" 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
|
Reference in New Issue
Block a user