Mercurial > vim
changeset 35719:1be117f0a0a7 v9.1.0593
patch 9.1.0593: filetype: Asymptote files are not recognized
Commit: https://github.com/vim/vim/commit/3088ef094da721dac8c0363a6c9e14eaf9313929
Author: AvidSeeker <avidseeker7@protonmail.com>
Date: Tue Jul 16 21:39:07 2024 +0200
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: #15252
Signed-off-by: AvidSeeker <avidseeker7@protonmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 17 Jul 2024 08:14:02 +0200 |
parents | d572d128da45 |
children | 2f9521c4bcf8 |
files | .github/MAINTAINERS runtime/doc/syntax.txt runtime/doc/tags runtime/filetype.vim runtime/ftplugin/asy.vim runtime/syntax/asy.vim src/testdir/test_filetype.vim src/version.c |
diffstat | 8 files changed, 289 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -113,6 +113,7 @@ runtime/ftplugin/antlr4.vim @jiangyinzu runtime/ftplugin/apache.vim @dubgeiser runtime/ftplugin/arduino.vim @k-takata runtime/ftplugin/astro.vim @romainl +runtime/ftplugin/asy.vim @avidseeker runtime/ftplugin/awk.vim @dkearns runtime/ftplugin/basic.vim @dkearns runtime/ftplugin/bst.vim @tpope @@ -382,6 +383,7 @@ runtime/syntax/asm.vim @dkearns runtime/syntax/asmh8300.vim @dkearns runtime/syntax/asterisk.vim @jaunis runtime/syntax/astro.vim @wuelnerdotexe +runtime/syntax/asy.vim @avidseeker runtime/syntax/autohotkey.vim @mmikeww runtime/syntax/awk.vim @dkearns runtime/syntax/basic.vim @dkearns
--- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -958,6 +958,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*
--- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -6065,6 +6065,7 @@ assert_notmatch() testing.txt /*assert_n assert_report() testing.txt /*assert_report()* assert_true() testing.txt /*assert_true()* astro.vim syntax.txt /*astro.vim* +asy.vim syntax.txt /*asy.vim* at motion.txt /*at* atan() builtin.txt /*atan()* atan2() builtin.txt /*atan2()* @@ -7253,6 +7254,7 @@ ft-asmh8300-syntax syntax.txt /*ft-asmh8 ft-aspperl-syntax syntax.txt /*ft-aspperl-syntax* ft-aspvbs-syntax syntax.txt /*ft-aspvbs-syntax* ft-astro-syntax syntax.txt /*ft-astro-syntax* +ft-asy-syntax syntax.txt /*ft-asy-syntax* ft-awk-plugin filetype.txt /*ft-awk-plugin* ft-bash-syntax syntax.txt /*ft-bash-syntax* ft-basic-syntax syntax.txt /*ft-basic-syntax* @@ -7299,7 +7301,9 @@ ft-fortran-syntax syntax.txt /*ft-fortra ft-freebasic-plugin filetype.txt /*ft-freebasic-plugin* ft-freebasic-syntax syntax.txt /*ft-freebasic-syntax* ft-fvwm-syntax syntax.txt /*ft-fvwm-syntax* +ft-gdscript-plugin filetype.txt /*ft-gdscript-plugin* ft-gitcommit-plugin filetype.txt /*ft-gitcommit-plugin* +ft-go-plugin filetype.txt /*ft-go-plugin* ft-gprof-plugin filetype.txt /*ft-gprof-plugin* ft-groff-syntax syntax.txt /*ft-groff-syntax* ft-gsp-syntax syntax.txt /*ft-gsp-syntax* @@ -7335,6 +7339,7 @@ ft-markdown-syntax syntax.txt /*ft-markd ft-masm-syntax syntax.txt /*ft-masm-syntax* ft-mathematica-syntax syntax.txt /*ft-mathematica-syntax* ft-matlab-indent indent.txt /*ft-matlab-indent* +ft-mediawiki-syntax syntax.txt /*ft-mediawiki-syntax* ft-metafont ft_mp.txt /*ft-metafont* ft-metafont-intro ft_mp.txt /*ft-metafont-intro* ft-metafont-mappings ft_mp.txt /*ft-metafont-mappings*
--- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -111,6 +111,9 @@ au BufNewFile,BufRead *.ino,*.pde setf " Ash of busybox au BufNewFile,BufRead .ash_history setf sh +" Asymptote +au BufNewFile,BufRead *.asy setf asy + " Apache config file au BufNewFile,BufRead .htaccess,*/etc/httpd/*.conf setf apache au BufNewFile,BufRead */etc/apache2/sites-*/*.com setf apache
new file mode 100644 --- /dev/null +++ b/runtime/ftplugin/asy.vim @@ -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<"
new file mode 100644 --- /dev/null +++ b/runtime/syntax/asy.vim @@ -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"
--- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -107,6 +107,7 @@ def s:GetFilenameChecks(): dict<list<str 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'],