vim-patch:9.1.0593: filetype: Asymptote files are not recognized

Problem:  filetype: Asymptote files are not recognized
Solution: detect '*.asy' files as asy filetype, include
          ftplugin and syntax plugin (AvidSeeker).

Reference: https://asymptote.sourceforge.io/

closes: vim/vim#15252

3088ef094d

Co-authored-by: AvidSeeker <avidseeker7@protonmail.com>
This commit is contained in:
Christian Clason 2024-07-16 22:29:39 +02:00
parent 498d9beed9
commit 8e590cae83
5 changed files with 278 additions and 0 deletions

View File

@ -489,6 +489,25 @@ For Visual Basic use: >
:let g:filetype_asa = "aspvbs"
:let g:filetype_asp = "aspvbs"
ASYMPTOTE *asy.vim* *ft-asy-syntax*
By default, only basic Asymptote keywords are highlighted. To highlight
extended geometry keywords: >
:let g:asy_syn_plain = 1
and for highlighting keywords related to 3D constructions: >
:let g:asy_syn_three = 1
By default, Asymptote-defined colors (e.g: lightblue) are highlighted. To
highlight TeX-defined colors (e.g: BlueViolet) use: >
:let g:asy_syn_texcolors = 1
or for Xorg colors (e.g: AliceBlue): >
:let g:asy_syn_x11colors = 1
BAAN *baan.vim* *baan-syntax*

14
runtime/ftplugin/asy.vim Normal file
View File

@ -0,0 +1,14 @@
" Vim filetype plugin
" Language: Asymptote
" Maintainer: AvidSeeker <avidseeker7@protonmail.com>
" Last Change: 2024 Jul 13
"
if exists("b:did_ftplugin")
finish
endif
let g:did_ftplugin = 1
setlocal commentstring=/*\ %s\ */
let b:undo_ftplugin = "setl commentstring<"

View File

@ -214,6 +214,7 @@ local extension = {
asn = 'asn',
asp = detect.asp,
astro = 'astro',
asy = 'asy',
atl = 'atlas',
as = 'atlas',
zed = 'authzed',

243
runtime/syntax/asy.vim Normal file
View File

@ -0,0 +1,243 @@
" Vim syntax file
" Language: Asymptote
" Maintainer: Avid Seeker <avidseeker7@protonmail.com>
" Andy Hammerlindl
" Last Change: 2022 Jan 05
" Hacked together from Bram Moolenaar's C syntax file, and Claudio Fleiner's
" Java syntax file.
if exists("b:current_syntax")
finish
endif
" useful C/C++/Java keywords
syn keyword asyStatement break return continue unravel
syn keyword asyConditional if else
syn keyword asyRepeat while for do
syn keyword asyExternal access from import include
syn keyword asyOperator new operator
" basic asymptote keywords
syn keyword asyConstant VERSION
syn keyword asyConstant true false default infinity inf nan
syn keyword asyConstant null nullframe nullpath nullpen
syn keyword asyConstant intMin intMax realMin realMax
syn keyword asyConstant realEpsilon realDigits
syn keyword asyPathSpec and cycle controls tension atleast curl
syn keyword asyStorageClass static public restricted private explicit
syn keyword asyStructure struct typedef
syn keyword asyType void bool bool3 int real string file
syn keyword asyType pair triple transform guide path pen frame
syn keyword asyType picture
" module specific keywords
if exists("asy_syn_plain")
syn keyword asyConstant currentpicture currentpen defaultpen
syn keyword asyConstant inch inches cm mm bp pt up down right left
syn keyword asyConstant E NE N NW W SW S SE
syn keyword asyConstant ENE NNE NNW WNW WSW SSW SSE ESE
syn keyword asyConstant I pi twopi
syn keyword asyConstant CCW CW
syn keyword asyConstant undefined sqrtEpsilon Align mantissaBits
syn keyword asyConstant identity zeroTransform invert
syn keyword asyConstant stdin stdout
syn keyword asyConstant unitsquare unitcircle circleprecision
syn keyword asyConstant solid dotted Dotted dashed dashdotted
syn keyword asyConstant longdashed longdashdotted
syn keyword asyConstant squarecap roundcap extendcap
syn keyword asyConstant miterjoin roundjoin beveljoin
syn keyword asyConstant zerowinding evenodd basealign nobasealign
syn keyword asyConstant black white gray red green blue Cyan Magenta
syn keyword asyConstant Yellow Black cyan magenta yellow palered
syn keyword asyConstant palegreen paleblue palecyan palemagenta
syn keyword asyConstant paleyellow palegray lightred lightgreen
syn keyword asyConstant lightblue lightcyan lightmagenta lightyellow
syn keyword asyConstant lightgray mediumred mediumgreen mediumblue
syn keyword asyConstant mediumcyan mediummagenta mediumyellow
syn keyword asyConstant mediumgray heavyred heavygreen heavyblue
syn keyword asyConstant heavycyan heavymagenta lightolive heavygray
syn keyword asyConstant deepred deepgreen deepblue deepcyan
syn keyword asyConstant deepmagenta deepyellow deepgray darkred
syn keyword asyConstant darkgreen darkblue darkcyan darkmagenta
syn keyword asyConstant darkolive darkgray orange fuchsia chartreuse
syn keyword asyConstant springgreen purple royalblue salmon brown
syn keyword asyConstant olive darkbrown pink palegrey lightgrey
syn keyword asyConstant mediumgrey grey heavygrey deepgrey darkgrey
if exists("asy_syn_texcolors")
syn keyword asyConstant GreenYellow Yellow Goldenrod Dandelion
syn keyword asyConstant Apricot Peach Melon YellowOrange Orange
syn keyword asyConstant BurntOrange Bittersweet RedOrange Mahogany
syn keyword asyConstant Maroon BrickRed Red OrangeRed RubineRed
syn keyword asyConstant WildStrawberry Salmon CarnationPink Magenta
syn keyword asyConstant VioletRed Rhodamine Mulberry RedViolet
syn keyword asyConstant Fuchsia Lavender Thistle Orchid DarkOrchid
syn keyword asyConstant Purple Plum Violet RoyalPurple BlueViolet
syn keyword asyConstant Periwinkle CadetBlue CornflowerBlue
syn keyword asyConstant MidnightBlue NavyBlue RoyalBlue Blue
syn keyword asyConstant Cerulean Cyan ProcessBlue SkyBlue Turquoise
syn keyword asyConstant TealBlue Aquamarine BlueGreen Emerald
syn keyword asyConstant JungleGreen SeaGreen Green ForestGreen
syn keyword asyConstant PineGreen LimeGreen YellowGreen SpringGreen
syn keyword asyConstant OliveGreen RawSienna Sepia Brown Tan Gray
syn keyword asyConstant Black White
endif
if exists("asy_syn_x11colors")
syn keyword asyConstant AliceBlue AntiqueWhite Aqua Aquamarine Azure
syn keyword asyConstant Beige Bisque Black BlanchedAlmond Blue
syn keyword asyConstant BlueViolet Brown BurlyWood CadetBlue
syn keyword asyConstant Chartreuse Chocolate Coral CornflowerBlue
syn keyword asyConstant Cornsilk Crimson Cyan DarkBlue DarkCyan
syn keyword asyConstant DarkGoldenrod DarkGray DarkGreen DarkKhaki
syn keyword asyConstant DarkMagenta DarkOliveGreen DarkOrange
syn keyword asyConstant DarkOrchid DarkRed DarkSalmon DarkSeaGreen
syn keyword asyConstant DarkSlateBlue DarkSlateGray DarkTurquoise
syn keyword asyConstant DarkViolet DeepPink DeepSkyBlue DimGray
syn keyword asyConstant DodgerBlue FireBrick FloralWhite ForestGreen
syn keyword asyConstant Fuchsia Gainsboro GhostWhite Gold Goldenrod
syn keyword asyConstant Gray Green GreenYellow Honeydew HotPink
syn keyword asyConstant IndianRed Indigo Ivory Khaki Lavender
syn keyword asyConstant LavenderBlush LawnGreen LemonChiffon
syn keyword asyConstant LightBlue LightCoral LightCyan
syn keyword asyConstant LightGoldenrodYellow LightGreen LightGrey
syn keyword asyConstant LightPink LightSalmon LightSeaGreen
syn keyword asyConstant LightSkyBlue LightSlateGray LightSteelBlue
syn keyword asyConstant LightYellow Lime LimeGreen Linen Magenta
syn keyword asyConstant Maroon MediumAquamarine MediumBlue
syn keyword asyConstant MediumOrchid MediumPurple MediumSeaGreen
syn keyword asyConstant MediumSlateBlue MediumSpringGreen
syn keyword asyConstant MediumTurquoise MediumVioletRed MidnightBlue
syn keyword asyConstant MintCream MistyRose Moccasin NavajoWhite
syn keyword asyConstant Navy OldLace Olive OliveDrab Orange
syn keyword asyConstant OrangeRed Orchid PaleGoldenrod PaleGreen
syn keyword asyConstant PaleTurquoise PaleVioletRed PapayaWhip
syn keyword asyConstant PeachPuff Peru Pink Plum PowderBlue Purple
syn keyword asyConstant Red RosyBrown RoyalBlue SaddleBrown Salmon
syn keyword asyConstant SandyBrown SeaGreen Seashell Sienna Silver
syn keyword asyConstant SkyBlue SlateBlue SlateGray Snow SpringGreen
syn keyword asyConstant SteelBlue Tan Teal Thistle Tomato Turquoise
syn keyword asyConstant Violet Wheat White WhiteSmoke Yellow
syn keyword asyConstant YellowGreen
endif
if exists("asy_syn_three")
syn keyword asyType path3 guide3 transform3
syn keyword asyType projection light material patch surface tube
syn keyword asyConstant currentprojection currentlight defaultrender
syn keyword asyConstant identity4 O X Y Z
syn keyword asyConstant nolight nullpens
syn keyword asyConstant unitsphere unithemisphere unitplane octant1
syn keyword asyConstant unitcone unitsolidcone unitcube unitcylinder
syn keyword asyConstant unitdisk unittube
endif
endif
" string constants
syn region asyCString start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=asyCSpecial
syn match asyCSpecial display contained +\\\(['"?\\abfnrtv]\|\o\{1,3}\)+
syn match asyCSpecial display contained +\\\(x[0-9A-F]\{1,2\}\|$\)+
" double quoted strings only special character is \"
syn region asyString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=asySpecial
syn match asySpecial display contained +\(\\\)\@1<!\(\\\\\)*\zs\\"+
" number constants
syn match asyNumbers display transparent "\<\d\|\.\d"
\ contains=asyNumber,asyNumberError
syn match asyNumber display contained "\d*\.\=\d*\(e[-+]\=\d\+\)\="
" highlight number constants with two '.' or with '.' after an 'e'
syn match asyNumberError display contained "\d*\.\(\d\|e[-+]\=\)*\.[0-9.]*"
syn match asyNumberError display contained "\d*e[-+]\=\d*\.[0-9.]*"
syn match asyNumberError display contained "\d*e[-+]\=\(e[-+]\=\)*\.[0-9.]*"
" comments and comment strings
syn keyword asyTodo contained TODO FIXME XXX
syn sync ccomment asyComment minlines=15
if exists("asy_comment_strings")
" A comment can contain asyString, asyCString, and asyNumber. But a "*/"
" inside a asy*String in a asyComment DOES end the comment! So we need to
" use a special type of asy*String: asyComment*String, which also ends on
" "*/", and sees a "*" at the start of the line as comment again.
" Unfortunately this doesn't very well work for // type of comments :-(
syn match asyCommentSkip contained "^\s*\*\($\|\s\+\)"
syn region asyCommentString contained start=+"+ skip=+\\\\\|\\"+ end=+"+
\ end=+\*/+me=s-1
\ contains=asySpecial,asyCommentSkip
syn region asyCommentCString contained start=+'+ skip=+\\\\\|\\'+ end=+'+
\ end=+\*/+me=s-1
\ contains=asyCSpecial,asyCommentSkip
syn region asyCommentLString contained start=+"+ skip=+\\\\\|\\"+ end=+"+
\ end="$" contains=asySpecial
syn region asyCommentLCString contained start=+'+ skip=+\\\\\|\\'+ end=+'+
\ end="$" contains=asyCSpecial
syn region asyCommentL start="//" skip="\\$" end="$" keepend
\ contains=asyTodo,asyCommentLString,
\ asyCommentLCString,asyNumbers
syn region asyComment matchgroup=asyComment start="/\*" end="\*/"
\ contains=asyTodo,asyCommentStartError,
\ asyCommentString,asyCommentCString,asyNumbers
else
syn region asyCommentL start="//" skip="\\$" end="$" keepend
\ contains=asyTodo
syn region asyComment matchgroup=asyComment start="/\*" end="\*/"
\ contains=asyTodo,asyCommentStartError
endif
" highlight common errors when starting/ending C comments
syn match asyCommentError display "\*/"
syn match asyCommentStartError display "/\*"me=e-1 contained
" delimiter matching errors
syn region asyCurly transparent start='{' end='}'
\ contains=TOP,asyCurlyError
syn region asyBrack transparent start='\[' end='\]' matchgroup=asyError
\ end=';' contains=TOP,asyBrackError
syn region asyParen transparent start='(' end=')' matchgroup=asyError
\ end=';' contains=TOP,asyParenError
syn match asyCurlyError display '}'
syn match asyBrackError display '\]'
syn match asyParenError display ')'
" for (;;) constructs are exceptions that allow ; inside parenthesis
syn region asyParen transparent matchgroup=asyParen
\ start='\(for\s*\)\@<=(' end=')'
\ contains=TOP,asyParenError
" Define the default highlighting.
hi def link asyCommentL asyComment
hi def link asyConditional Conditional
hi def link asyRepeat Repeat
hi def link asyNumber Number
hi def link asyNumberError asyError
hi def link asyCurlyError asyError
hi def link asyBracketError asyError
hi def link asyParenError asyError
hi def link asyCommentError asyError
hi def link asyCommentStartError asyError
hi def link asyOperator Operator
hi def link asyStructure Structure
hi def link asyStorageClass StorageClass
hi def link asyExternal Include
hi def link asyDefine Macro
hi def link asyError Error
hi def link asyStatement Statement
hi def link asyType Type
hi def link asyConstant Constant
hi def link asyCommentString asyString
hi def link asyCommentCString asyString
hi def link asyCommentLString asyString
hi def link asyCommentLCString asyString
hi def link asyCommentSkip asyComment
hi def link asyString String
hi def link asyCString String
hi def link asyComment Comment
hi def link asySpecial SpecialChar
hi def link asyCSpecial SpecialChar
hi def link asyTodo Todo
hi def link asyPathSpec Statement
let b:current_syntax = "asy"

View File

@ -108,6 +108,7 @@ func s:GetFilenameChecks() abort
\ 'asn': ['file.asn', 'file.asn1'],
\ 'asterisk': ['asterisk/file.conf', 'asterisk/file.conf-file', 'some-asterisk/file.conf', 'some-asterisk/file.conf-file'],
\ 'astro': ['file.astro'],
\ 'asy': ['file.asy'],
\ 'atlas': ['file.atl', 'file.as'],
\ 'authzed': ['schema.zed'],
\ 'autohotkey': ['file.ahk'],