nvim/syntax/rdf-turtle.vim
2021-05-20 18:01:29 +02:00

127 lines
4.1 KiB
VimL

" Vim syntax file
" Language: RDF Turtle
" Filenames: *.ttl
" Vim syntax file
" Language: RDF Notation 3
" Version: 1.1
" SeeAlso: <http://www.w3.org/DesignIssues/Notation3.html>
" Maintainer: Niklas Lindstrom <lindstream@gmail.com>
" Created: 2004-03-24
" Updated: 2014-02-10
" TODO:
" * string value specials
" * fix XML Literal syntax (triplequoutes PLUS ^^rdfs:XMLLiteral)
" * "@"-prefix of verbs (?)
" * grouping e.g. statements to enable folding, error checking etc.
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
" TODO: factor out triplebase
if !exists('n3_actually')
let n3_actually = 1
endif
syn keyword n3Verb a
syn match n3Separator "[][;,)(}{^!]"
syn match n3EndStatement "\."
syn match n3Declaration "@prefix\|@base"
"syn match n3LName "\(:\?\)\@<=[a-zA-Z_][a-zA-Z0-9_]*"
syn match n3ClassName "\(:\?\)\@<=[A-Z][a-zA-Z0-9_-]*"
syn match n3PropertyName "\(:\?\)\@<=[a-z][a-zA-Z0-9_-]*"
syn match n3Prefix "\([a-zA-Z_][a-zA-Z0-9_]*\)\?:"
syn match n3Comment "#.*$" contains=n3Todo
syn keyword n3Todo TODO FIXME XXX contained
if n3_actually
syn match n3Declaration "@keywords"
syn keyword n3Verb has is of
syn match n3Quantifier "@forAll\|@forSome"
syn match n3Deprecated "@this"
endif
" URI:s, strings, numbers, variables
syn match n3Number "[-+]\?[0-9]\+\(\.[0-9]\+\)\?\(e[-+]\?[0-9]\+\)\?"
syn keyword n3Boolean true false
syn match n3Variable "?[a-zA-Z_][a-zA-Z0-9_]*"
syn region n3URI matchgroup=n3URI start=+<+ end=+>+ skip=+\\\\\|\\"+ contains=n3URITokens
" TODO: n3URITokens
syn region n3String matchgroup=n3StringDelim start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=n3Escape
" TODO: n3Escape
syn region n3MultilineString matchgroup=n3StringDelim start=+"""+ end=+"""+ skip=+\\\\\|\\"+ keepend contains=n3Escape
syn match n3Verb "<=\|=>\|="
" Lang notation
syn match n3Langcode +\("\s*\)\@<=@[a-zA-Z0-9]\+\(-[a-zA-Z0-9]\+\)\?+
" Type notation
syn match n3Datatype +\("\s*\)\@<=^^+
" TODO: then follows: explicituri | qname
" XMLLiteral and HTML
if version >= 600 || filereadable(expand("<sfile>:p:h")."/xml.vim")
if version < 600
syn include @n3XMLLiteral <sfile>:p:h/xml.vim
unlet b:current_syntax
else
syn include @n3XMLLiteral syntax/xml.vim
unlet b:current_syntax
"syn include @n3HTML syntax/html.vim
"unlet b:current_syntax
endif
syn region n3XMLLiteralRegion matchgroup=n3StringDelim start=+"""\(\_s*<\)\@=+ end=+"""+ keepend contains=@n3XMLLiteral
" end=+"""\(\^\^\w*:XMLLiteral\)\@=+
"syn region n3HTMLRegion matchgroup=n3StringDelim start=+"""+ end=+"""\(\^\^\w*:HTML\)\@=+ keepend contains=@n3HTML
endif
" Highlight Links
if version >= 508 || !exists("did_n3_syn_inits")
if version <= 508
let did_n3_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
" The default methods for highlighting. Can be overridden later
HiLink n3Verb keyword
HiLink n3Quantifier keyword
HiLink n3Separator Operator
HiLink n3EndStatement Special
"hi n3EndStatement gui=underline,bold " TODO: just remove?
HiLink n3Declaration PreCondit
HiLink n3Prefix Special
"HiLink n3LName Normal
HiLink n3ClassName Type
HiLink n3PropertyName Function
HiLink n3Comment Comment
HiLink n3Todo Todo
HiLink n3Deprecated Error
HiLink n3Number Number
HiLink n3Boolean Boolean
HiLink n3Variable Identifier
HiLink n3URI Label
HiLink n3String String
HiLink n3MultilineString String
HiLink n3StringDelim Constant
HiLink n3Langcode Type
HiLink n3Datatype Type
HiLink n3XMLLiteralRegion String
delcommand HiLink
endif
unlet n3_actually
let b:current_syntax = "n3"