boxes/boxes.vim

227 lines
14 KiB
VimL
Raw Normal View History

" boxes - command line ASCII boxes unlimited!
" Copyright (C) 1999-2020 Thomas Jensen and the boxes contributors
2014-08-27 22:41:48 +02:00
"
" This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public
" License, version 2, as published by the Free Software Foundation.
" This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
" warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
" You should have received a copy of the GNU General Public License along with this program; if not, write to the Free
" Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
2014-08-27 22:41:48 +02:00
"
" Vim syntax file
" ---------------
" Latest version available from:
" https://github.com/ascii-boxes/boxes/blob/master/boxes.vim
" Status: Stable
" Notes: - Vim requires this file to have system-dependent line endings (CR/LF on Windows, just LF otherwise)
" - To activate, copy this file to $VIMRUNTIME/syntax/, for example /usr/share/vim/vim81/syntax/.
" Known Issues:
" https://github.com/ascii-boxes/boxes/issues?q=is%3Aissue+is%3Aopen+Vim+Syntax
" _____________________________________________________________________________________________________________________
2014-08-27 22:41:48 +02:00
if exists("b:current_syntax")
finish
endif
2014-08-27 22:41:48 +02:00
" Removes any old syntax stuff hanging around
syntax clear
" ignore case
syntax case ignore
" Set the keyword characters
2021-03-24 16:03:29 +01:00
syntax iskeyword a-z,A-Z
2014-08-27 22:41:48 +02:00
"
" Key Words
"
syntax keyword boxesClassicKeywords author designer revision created revdate tags indent
syntax keyword boxesBlocks elastic replace reverse padding shapes
syntax keyword boxesRegStuff with to once global
2021-03-24 16:03:29 +01:00
syntax keyword boxesParent parent skipwhite nextgroup=boxesParentPath,boxesParentGlobal
syntax keyword boxesEnd end skipwhite skipempty nextgroup=boxesNameAtEnd
2014-08-27 22:41:48 +02:00
" Shape Names
2021-03-24 16:03:29 +01:00
syntax keyword boxesShapes nw nnw n nne ne ene e ese
syntax keyword boxesShapes se sse s ssw sw wsw w wnw
2014-08-27 22:41:48 +02:00
" Padding Areas
2021-03-24 16:03:29 +01:00
syntax keyword boxesPads a[ll] l[eft] r[ight] t top
syntax keyword boxesPads b[ottom] h[orizontal] v[ertical]
2014-08-27 22:41:48 +02:00
"
" Error - this is matched when the others don't match
"
syntax match boxesError /\S/
" Delim Regions
" Within these regions, a different special character is used as escape character in strings.
syntax region delimRegion01 matchgroup=boxesString start=/[ \t\r\n]\+"[~'`!@%&*=:;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString01,boxesList01,@boxesDelimContained
syntax region delimRegion02 matchgroup=boxesString start=/[ \t\r\n]\+\~["'`!@%&*=:;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString02,boxesList02,@boxesDelimContained
syntax region delimRegion03 matchgroup=boxesString start=/[ \t\r\n]\+'["~`!@%&*=:;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString03,boxesList03,@boxesDelimContained
syntax region delimRegion04 matchgroup=boxesString start=/[ \t\r\n]\+`["~'!@%&*=:;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString04,boxesList04,@boxesDelimContained
syntax region delimRegion05 matchgroup=boxesString start=/[ \t\r\n]\+!["~'`@%&*=:;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString05,boxesList05,@boxesDelimContained
syntax region delimRegion06 matchgroup=boxesString start=/[ \t\r\n]\+@["~'`!%&*=:;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString06,boxesList06,@boxesDelimContained
syntax region delimRegion07 matchgroup=boxesString start=/[ \t\r\n]\+%["~'`!@&*=:;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString07,boxesList07,@boxesDelimContained
syntax region delimRegion08 matchgroup=boxesString start=/[ \t\r\n]\+&["~'`!@%*=:;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString08,boxesList08,@boxesDelimContained
syntax region delimRegion09 matchgroup=boxesString start=/[ \t\r\n]\+\*["~'`!@%&=:;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString09,boxesList09,@boxesDelimContained
syntax region delimRegion10 matchgroup=boxesString start=/[ \t\r\n]\+=["~'`!@%&*:;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString10,boxesList10,@boxesDelimContained
syntax region delimRegion11 matchgroup=boxesString start=/[ \t\r\n]\+:["~'`!@%&*=;<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString11,boxesList11,@boxesDelimContained
syntax region delimRegion12 matchgroup=boxesString start=/[ \t\r\n]\+;["~'`!@%&*=:<>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString12,boxesList12,@boxesDelimContained
syntax region delimRegion13 matchgroup=boxesString start=/[ \t\r\n]\+<["~'`!@%&*=:;>?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString13,boxesList13,@boxesDelimContained
syntax region delimRegion14 matchgroup=boxesString start=/[ \t\r\n]\+>["~'`!@%&*=:;<?/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString14,boxesList14,@boxesDelimContained
syntax region delimRegion15 matchgroup=boxesString start=/[ \t\r\n]\+?["~'`!@%&*=:;<>/|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString15,boxesList15,@boxesDelimContained
syntax region delimRegion16 matchgroup=boxesString start=/[ \t\r\n]\+\/["~'`!@%&*=:;<>?|.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString16,boxesList16,@boxesDelimContained
syntax region delimRegion17 matchgroup=boxesString start=/[ \t\r\n]\+|["~'`!@%&*=:;<>?/.\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString17,boxesList17,@boxesDelimContained
syntax region delimRegion18 matchgroup=boxesString start=/[ \t\r\n]\+\.["~'`!@%&*=:;<>?/|\\][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString18,boxesList18,@boxesDelimContained
syntax region delimRegion matchgroup=boxesString start=/[ \t\r\n]\+\\["~'`!@%&*=:;<>?/|.][ \t\r\n]/ end=/\<end\>\|\<delim\>\|\<delimiter\>/he=s-1 contains=boxesString,boxesList,@boxesDelimContained
" Trivial elements such as words, numbers, braces
2021-03-24 16:03:29 +01:00
syntax match boxesComma contained display /,/
syntax match boxesBraces display /[{}]/
syntax match boxesNameAtEnd display /[a-zA-Z][a-zA-Z0-9_-]*/
syntax match boxesWord display /[a-zA-Z][a-zA-Z0-9_-]*/
2021-03-24 16:03:29 +01:00
syntax match boxesNumber display /[-+]\=\d\+/
2014-08-27 22:41:48 +02:00
" These items may appear inside a DELIM region
syntax cluster boxesDelimContained contains=boxesComment,boxesWord,boxesElasticList
syntax cluster boxesDelimContained add=boxesError,boxesBlocks,boxesSample,boxesPads,boxesNumber,boxesBraces
syntax cluster boxesDelimContained add=boxesClassicKeywords,boxesRegStuff,boxesShapes
2014-08-27 22:41:48 +02:00
" a list, used inside shape blocks and for the elastic list
syntax cluster boxesListContained contains=boxesShapes,boxesComma,boxesError,boxesComment
syntax region boxesList01 contained matchgroup=Normal start="(" end=")" contains=boxesString01,@boxesListContained
syntax region boxesList02 contained matchgroup=Normal start="(" end=")" contains=boxesString02,@boxesListContained
syntax region boxesList03 contained matchgroup=Normal start="(" end=")" contains=boxesString03,@boxesListContained
syntax region boxesList04 contained matchgroup=Normal start="(" end=")" contains=boxesString04,@boxesListContained
syntax region boxesList05 contained matchgroup=Normal start="(" end=")" contains=boxesString05,@boxesListContained
syntax region boxesList06 contained matchgroup=Normal start="(" end=")" contains=boxesString06,@boxesListContained
syntax region boxesList07 contained matchgroup=Normal start="(" end=")" contains=boxesString07,@boxesListContained
syntax region boxesList08 contained matchgroup=Normal start="(" end=")" contains=boxesString08,@boxesListContained
syntax region boxesList09 contained matchgroup=Normal start="(" end=")" contains=boxesString09,@boxesListContained
syntax region boxesList10 contained matchgroup=Normal start="(" end=")" contains=boxesString10,@boxesListContained
syntax region boxesList11 contained matchgroup=Normal start="(" end=")" contains=boxesString11,@boxesListContained
syntax region boxesList12 contained matchgroup=Normal start="(" end=")" contains=boxesString12,@boxesListContained
syntax region boxesList13 contained matchgroup=Normal start="(" end=")" contains=boxesString13,@boxesListContained
syntax region boxesList14 contained matchgroup=Normal start="(" end=")" contains=boxesString14,@boxesListContained
syntax region boxesList15 contained matchgroup=Normal start="(" end=")" contains=boxesString15,@boxesListContained
syntax region boxesList16 contained matchgroup=Normal start="(" end=")" contains=boxesString16,@boxesListContained
syntax region boxesList17 contained matchgroup=Normal start="(" end=")" contains=boxesString17,@boxesListContained
syntax region boxesList18 contained matchgroup=Normal start="(" end=")" contains=boxesString18,@boxesListContained
syntax region boxesList matchgroup=Normal start="(" end=")" contains=boxesString,@boxesListContained
2014-08-27 22:41:48 +02:00
" Strings
syntax region boxesString01 contained display start=/\z\([~'`!@%&*=:;<>?/|.\\]\)/ skip=/""\|"\z1/ end=/\z1/ oneline
syntax region boxesString02 contained display start=/\z\(["'`!@%&*=:;<>?/|.\\]\)/ skip=/\~\~\|\~\z1/ end=/\z1/ oneline
syntax region boxesString03 contained display start=/\z\(["~`!@%&*=:;<>?/|.\\]\)/ skip=/''\|'\z1/ end=/\z1/ oneline
syntax region boxesString04 contained display start=/\z\(["~'!@%&*=:;<>?/|.\\]\)/ skip=/``\|`\z1/ end=/\z1/ oneline
syntax region boxesString05 contained display start=/\z\(["~'`@%&*=:;<>?/|.\\]\)/ skip=/!!\|!\z1/ end=/\z1/ oneline
syntax region boxesString06 contained display start=/\z\(["~'`!%&*=:;<>?/|.\\]\)/ skip=/@@\|@\z1/ end=/\z1/ oneline
syntax region boxesString07 contained display start=/\z\(["~'`!@&*=:;<>?/|.\\]\)/ skip=/%%\|%\z1/ end=/\z1/ oneline
syntax region boxesString08 contained display start=/\z\(["~'`!@%*=:;<>?/|.\\]\)/ skip=/&&\|&\z1/ end=/\z1/ oneline
syntax region boxesString09 contained display start=/\z\(["~'`!@%&=:;<>?/|.\\]\)/ skip=/\*\*\|\*\z1/ end=/\z1/ oneline
syntax region boxesString10 contained display start=/\z\(["~'`!@%&*:;<>?/|.\\]\)/ skip=/==\|=\z1/ end=/\z1/ oneline
syntax region boxesString11 contained display start=/\z\(["~'`!@%&*=;<>?/|.\\]\)/ skip=/::\|:\z1/ end=/\z1/ oneline
syntax region boxesString12 contained display start=/\z\(["~'`!@%&*=:<>?/|.\\]\)/ skip=/;;\|;\z1/ end=/\z1/ oneline
syntax region boxesString13 contained display start=/\z\(["~'`!@%&*=:;>?/|.\\]\)/ skip=/<<\|<\z1/ end=/\z1/ oneline
syntax region boxesString14 contained display start=/\z\(["~'`!@%&*=:;<?/|.\\]\)/ skip=/>>\|>\z1/ end=/\z1/ oneline
syntax region boxesString15 contained display start=/\z\(["~'`!@%&*=:;<>/|.\\]\)/ skip=/??\|?\z1/ end=/\z1/ oneline
syntax region boxesString16 contained display start=/\z\(["~'`!@%&*=:;<>?|.\\]\)/ skip=/\/\/\|\/\z1/ end=/\z1/ oneline
syntax region boxesString17 contained display start=/\z\(["~'`!@%&*=:;<>?/.\\]\)/ skip=/||\||\z1/ end=/\z1/ oneline
syntax region boxesString18 contained display start=/\z\(["~'`!@%&*=:;<>?/|\\]\)/ skip=/\.\.\|\.\z1/ end=/\z1/ oneline
syntax region boxesString display start=/\z\(["~'`!@%&*=:;<>?/|.]\)/ skip=/\\\\\|\\\z1/ end=/\z1/ oneline
2014-08-27 22:41:48 +02:00
" File path of a 'parent' definition
2021-03-24 16:03:29 +01:00
syntax match boxesParentGlobal display "\s:global:\s*$"
syntax match boxesParentPath contained display "[^:]\{-}$"
2014-08-27 22:41:48 +02:00
2021-03-24 16:03:29 +01:00
" a BOX definition with aliases
syntax region boxesNames matchgroup=boxesBoxStmt start=/\<box\s\+/ end=/\>[ \t\r\n]\+\</re=s,he=s keepend contains=boxesComma
" a DELIM statement starts a delim region
syntax match boxesDelim display /\<delim\%(iter\)\?\>/ nextgroup=delimRegion15,delimRegion06,delimRegion03,delimRegion04,delimRegion05,delimRegion02,delimRegion07,delimRegion08,delimRegion09,delimRegion10,delimRegion11,delimRegion12,delimRegion13,delimRegion14,delimRegion01,delimRegion16,delimRegion17,delimRegion18,delimRegion
2014-08-27 22:41:48 +02:00
" Comments may appear anywhere in the file
syntax match boxesComment display /#.*$/ contains=@Spell
2014-08-27 22:41:48 +02:00
" The SAMPLE block
syntax region boxesSample matchgroup=boxesBlocks start="sample" end=+^[ \t]*ends[ \t\r]*$+ keepend
2014-08-27 22:41:48 +02:00
"
" Synchronisation
"
syntax sync clear
2021-03-24 16:03:29 +01:00
syntax sync match boxesSync grouphere boxesNames "box"
syntax sync match boxesSync "parent"
2021-03-24 16:03:29 +01:00
syntax sync minlines=40 maxlines=200
2014-08-27 22:41:48 +02:00
"
" Highlighting
"
if !exists("did_boxes_syntax_inits")
let did_boxes_syntax_inits = 1
hi link boxesString01 String
hi link boxesString02 String
hi link boxesString03 String
hi link boxesString04 String
hi link boxesString05 String
hi link boxesString06 String
hi link boxesString07 String
hi link boxesString08 String
hi link boxesString09 String
hi link boxesString10 String
hi link boxesString11 String
hi link boxesString12 String
hi link boxesString13 String
hi link boxesString14 String
hi link boxesString15 String
hi link boxesString16 String
hi link boxesString17 String
hi link boxesString18 String
hi link boxesString String
hi link boxesBoxStmt PreProc
2021-03-24 16:03:29 +01:00
hi link boxesEnd PreProc
hi link boxesNames Special
hi link boxesNameAtEnd Special
hi link boxesParent PreProc
hi link boxesParentGlobal PreProc
hi link boxesParentPath String
hi link boxesClassicKeywords Keyword
hi link boxesDelim Keyword
hi link boxesBlocks Statement
2014-08-27 22:41:48 +02:00
hi link boxesRegStuff Label
2014-08-27 22:41:48 +02:00
hi link boxesShapes Type
hi link boxesPads Type
hi link boxesNumber Number
hi link boxesComment Comment
hi link boxesError Error
2014-08-27 22:41:48 +02:00
hi clear boxesSample
hi clear boxesWord
hi clear boxesBraces
hi clear boxesComma
endif
"
" The current buffer now uses "boxes" syntax highlighting
"
let b:current_syntax = "boxes"
"EOF vim: sw=4 nowrap: