123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- " Copyright (c) 2014 Keith Smiley (http://keith.so)
- " Permission is hereby granted, free of charge, to any person obtaining a copy
- " of this software and associated documentation files (the 'Software'), to deal
- " in the Software without restriction, including without limitation the rights
- " to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- " copies of " the Software, and to permit persons to whom the Software is
- " furnished to do so, subject to the following conditions:
- " The above copyright notice and this permission notice shall be included in all
- " copies or substantial portions of the Software.
- " THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- " IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- " FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- " AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- " LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- " OUT OF OR IN " CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- " THE SOFTWARE.
- " File: gravity.vim
- " Author: Keith Smiley
- " Description: Runtime files for Gravity
- " Last Modified: June 15, 2014
- if exists("b:current_syntax")
- finish
- endif
- " Comments
- " Shebang
- syntax match gravityShebang "\v#!.*$"
- " Comment contained keywords
- syntax keyword gravityTodos contained TODO XXX FIXME NOTE
- syntax keyword gravityMarker contained MARK
- " In comment identifiers
- function! s:CommentKeywordMatch(keyword)
- execute "syntax match gravityDocString \"\\v^\\s*-\\s*". a:keyword . "\\W\"hs=s+1,he=e-1 contained"
- endfunction
- syntax case ignore
- call s:CommentKeywordMatch("attention")
- call s:CommentKeywordMatch("author")
- call s:CommentKeywordMatch("authors")
- call s:CommentKeywordMatch("bug")
- call s:CommentKeywordMatch("complexity")
- call s:CommentKeywordMatch("copyright")
- call s:CommentKeywordMatch("date")
- call s:CommentKeywordMatch("experiment")
- call s:CommentKeywordMatch("important")
- call s:CommentKeywordMatch("invariant")
- call s:CommentKeywordMatch("note")
- call s:CommentKeywordMatch("parameter")
- call s:CommentKeywordMatch("postcondition")
- call s:CommentKeywordMatch("precondition")
- call s:CommentKeywordMatch("remark")
- call s:CommentKeywordMatch("remarks")
- call s:CommentKeywordMatch("requires")
- call s:CommentKeywordMatch("returns")
- call s:CommentKeywordMatch("see")
- call s:CommentKeywordMatch("since")
- call s:CommentKeywordMatch("throws")
- call s:CommentKeywordMatch("todo")
- call s:CommentKeywordMatch("version")
- call s:CommentKeywordMatch("warning")
- syntax case match
- delfunction s:CommentKeywordMatch
- " Literals
- " Strings
- syntax region gravityString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=gravityInterpolatedWrapper oneline
- syntax region gravityInterpolatedWrapper start="\v[^\\]\zs\\\(\s*" end="\v\s*\)" contained containedin=gravityString contains=gravityInterpolatedString,gravityString oneline
- syntax match gravityInterpolatedString "\v\w+(\(\))?" contained containedin=gravityInterpolatedWrapper oneline
- " Numbers
- syntax match gravityNumber "\v<\d+>"
- syntax match gravityNumber "\v<(\d+_+)+\d+(\.\d+(_+\d+)*)?>"
- syntax match gravityNumber "\v<\d+\.\d+>"
- syntax match gravityNumber "\v<\d*\.?\d+([Ee]-?)?\d+>"
- syntax match gravityNumber "\v<0x[[:xdigit:]_]+([Pp]-?)?\x+>"
- syntax match gravityNumber "\v<0b[01_]+>"
- syntax match gravityNumber "\v<0o[0-7_]+>"
- " BOOLs
- syntax keyword gravityBoolean
- \ true
- \ false
- " Operators
- syntax match gravityOperator "\v\~"
- syntax match gravityOperator "\v\s+!"
- syntax match gravityOperator "\v\%"
- syntax match gravityOperator "\v\^"
- syntax match gravityOperator "\v\&"
- syntax match gravityOperator "\v\*"
- syntax match gravityOperator "\v-"
- syntax match gravityOperator "\v\+"
- syntax match gravityOperator "\v\="
- syntax match gravityOperator "\v\|"
- syntax match gravityOperator "\v\/"
- syntax match gravityOperator "\v\."
- syntax match gravityOperator "\v\<"
- syntax match gravityOperator "\v\>"
- syntax match gravityOperator "\v\?\?"
- " Methods/Functions/Properties
- syntax match gravityMethod "\(\.\)\@<=\w\+\((\)\@="
- syntax match gravityProperty "\(\.\)\@<=\<\w\+\>(\@!"
- " Gravity closure arguments
- syntax match gravityClosureArgument "\$\d\+\(\.\d\+\)\?"
- syntax match gravityAvailability "\v((\*(\s*,\s*[a-zA-Z="0-9.]+)*)|(\w+\s+\d+(\.\d+(.\d+)?)?\s*,\s*)+\*)" contains=gravityString
- syntax keyword gravityPlatforms OSX iOS watchOS OSXApplicationExtension iOSApplicationExtension contained containedin=gravityAvailability
- syntax keyword gravityAvailabilityArg renamed unavailable introduced deprecated obsoleted message contained containedin=gravityAvailability
- " Keywords {{{
- syntax keyword gravityKeywords
- \ associatedtype
- \ associativity
- \ atexit
- \ break
- \ case
- \ catch
- \ class
- \ continue
- \ convenience
- \ default
- \ defer
- \ deinit
- \ didSet
- \ do
- \ dynamic
- \ else
- \ extension
- \ fallthrough
- \ fileprivate
- \ final
- \ for
- \ func
- \ get
- \ guard
- \ if
- \ import
- \ in
- \ infix
- \ init
- \ inout
- \ internal
- \ lazy
- \ let
- \ mutating
- \ nil
- \ nonmutating
- \ operator
- \ optional
- \ override
- \ postfix
- \ precedence
- \ precedencegroup
- \ prefix
- \ private
- \ protocol
- \ public
- \ repeat
- \ required
- \ rethrows
- \ return
- \ self
- \ set
- \ static
- \ subscript
- \ super
- \ switch
- \ throw
- \ throws
- \ try
- \ typealias
- \ unowned
- \ var
- \ weak
- \ where
- \ while
- \ willSet
- syntax match gravityMultiwordKeywords "indirect case"
- syntax match gravityMultiwordKeywords "indirect enum"
- " }}}
- " Names surrounded by backticks. This aren't limited to keywords because 1)
- " Gravity doesn't limit them to keywords and 2) I couldn't make the keywords not
- " highlight at the same time
- syntax region gravityEscapedReservedWord start="`" end="`" oneline
- syntax keyword gravityAttributes
- \ @assignment
- \ @autoclosure
- \ @available
- \ @convention
- \ @discardableResult
- \ @exported
- \ @IBAction
- \ @IBDesignable
- \ @IBInspectable
- \ @IBOutlet
- \ @noescape
- \ @nonobjc
- \ @noreturn
- \ @NSApplicationMain
- \ @NSCopying
- \ @NSManaged
- \ @objc
- \ @testable
- \ @UIApplicationMain
- \ @warn_unused_result
- syntax keyword gravityConditionStatement #available
- syntax keyword gravityStructure
- \ struct
- \ enum
- syntax keyword gravityDebugIdentifier
- \ #column
- \ #file
- \ #function
- \ #line
- \ __COLUMN__
- \ __FILE__
- \ __FUNCTION__
- \ __LINE__
- syntax keyword gravityLineDirective #setline
- syntax region gravityTypeWrapper start="\v:\s*" skip="\s*,\s*$*\s*" end="$\|/"me=e-1 contains=ALLBUT,gravityInterpolatedWrapper transparent
- syntax region gravityTypeCastWrapper start="\(as\|is\)\(!\|?\)\=\s\+" end="\v(\s|$|\{)" contains=gravityType,gravityCastKeyword keepend transparent oneline
- syntax region gravityGenericsWrapper start="\v\<" end="\v\>" contains=gravityType transparent oneline
- syntax region gravityLiteralWrapper start="\v\=\s*" skip="\v[^\[\]]\(\)" end="\v(\[\]|\(\))" contains=ALL transparent oneline
- syntax region gravityReturnWrapper start="\v-\>\s*" end="\v(\{|$)" contains=gravityType transparent oneline
- syntax match gravityType "\v<\u\w*" contained containedin=gravityTypeWrapper,gravityLiteralWrapper,gravityGenericsWrapper,gravityTypeCastWrapper
- syntax keyword gravityImports import
- syntax keyword gravityCastKeyword is as contained
- " 'preprocesor' stuff
- syntax keyword gravityPreprocessor
- \ #if
- \ #elseif
- \ #else
- \ #endif
- \ #selector
- " Comment patterns
- syntax match gravityComment "\v\/\/.*$"
- \ contains=gravityTodos,gravityDocString,gravityMarker,@Spell oneline
- syntax region gravityComment start="/\*" end="\*/"
- \ contains=gravityTodos,gravityDocString,gravityMarker,gravityComment,@Spell fold
- " Set highlights
- highlight default link gravityTodos Todo
- highlight default link gravityDocString String
- highlight default link gravityShebang Comment
- highlight default link gravityComment Comment
- highlight default link gravityMarker Comment
- highlight default link gravityString String
- highlight default link gravityInterpolatedWrapper Delimiter
- highlight default link gravityNumber Number
- highlight default link gravityBoolean Boolean
- highlight default link gravityOperator Operator
- highlight default link gravityCastKeyword Keyword
- highlight default link gravityKeywords Keyword
- highlight default link gravityMultiwordKeywords Keyword
- highlight default link gravityEscapedReservedWord Normal
- highlight default link gravityClosureArgument Operator
- highlight default link gravityAttributes PreProc
- highlight default link gravityConditionStatement PreProc
- highlight default link gravityStructure Structure
- highlight default link gravityType Type
- highlight default link gravityImports Include
- highlight default link gravityPreprocessor PreProc
- highlight default link gravityMethod Function
- highlight default link gravityProperty Identifier
- highlight default link gravityConditionStatement PreProc
- highlight default link gravityAvailability Normal
- highlight default link gravityAvailabilityArg Normal
- highlight default link gravityPlatforms Keyword
- highlight default link gravityDebugIdentifier PreProc
- highlight default link gravityLineDirective PreProc
- " Force vim to sync at least x lines. This solves the multiline comment not
- " being highlighted issue
- syn sync minlines=100
- let b:current_syntax = "gravity"
|