" Vim syntax file
" Language: lace
" Maintainer: Jocelyn Fiat <utilities@eiffel.com>
" Last Change: 2001 May 09
" Copyright Interactive Software Engineering, 1998
" You are free to use this file as you please, but
" if you make a change or improvement you must send
" it to the maintainer at <utilities@eiffel.com>
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
" LACE is case insensitive, but the style guide lines are not.
if !exists("lace_case_insensitive")
syn case match
else
syn case ignore
endif
" A bunch of useful LACE keywords
syn keyword laceTopStruct system root default option visible cluster
syn keyword laceTopStruct external generate end
syn keyword laceOptionClause collect assertion debug optimize trace
syn keyword laceOptionClause profile inline precompiled multithreaded
syn keyword laceOptionClause exception_trace dead_code_removal
syn keyword laceOptionClause array_optimization
syn keyword laceOptionClause inlining_size inlining
syn keyword laceOptionClause console_application dynamic_runtime
syn keyword laceOptionClause line_generation
syn keyword laceOptionMark yes no all
syn keyword laceOptionMark require ensure invariant loop check
syn keyword laceClusterProp use include exclude
syn keyword laceAdaptClassName adapt ignore rename as
syn keyword laceAdaptClassName creation export visible
syn keyword laceExternal include_path object makefile
" Operators
syn match laceOperator "\$"
syn match laceBrackets "[[\]]"
syn match laceExport "[{}]"
" Constants
syn keyword laceBool true false
syn keyword laceBool True False
syn region laceString start=+"+ skip=+%"+ end=+"+ contains=laceEscape,laceStringError
syn match laceEscape contained "%[^/]"
syn match laceEscape contained "%/\d\+/"
syn match laceEscape contained "^[ \t]*%"
syn match laceEscape contained "%[ \t]*$"
syn match laceStringError contained "%/[^0-9]"
syn match laceStringError contained "%/\d\+[^0-9/]"
syn match laceStringError "'\(%[^/]\|%/\d\+/\|[^'%]\)\+'"
syn match laceCharacter "'\(%[^/]\|%/\d\+/\|[^'%]\)'" contains=laceEscape
syn match laceNumber "-\=\<\d\+\(_\d\+\)*\>"
syn match laceNumber "\<[01]\+[bB]\>"
syn match laceNumber "-\=\<\d\+\(_\d\+\)*\.\(\d\+\(_\d\+\)*\)\=\([eE][-+]\=\d\+\(_\d\+\)*\)\="
syn match laceNumber "-\=\.\d\+\(_\d\+\)*\([eE][-+]\=\d\+\(_\d\+\)*\)\="
syn match laceComment "--.*" contains=laceTodo
syn case match
" Case sensitive stuff
syn keyword laceTodo TODO XXX FIXME
syn match laceClassName "\<[A-Z][A-Z0-9_]*\>"
syn match laceCluster "[a-zA-Z][a-zA-Z0-9_]*\s*:"
syn match laceCluster "[a-zA-Z][a-zA-Z0-9_]*\s*(\s*[a-zA-Z][a-zA-Z0-9_]*\s*)\s*:"
" Catch mismatched parentheses
syn match laceParenError ")"
syn match laceBracketError "\]"
syn region laceGeneric transparent matchgroup=laceBrackets start="\[" end="\]" contains=ALLBUT,laceBracketError
syn region laceParen transparent start="(" end=")" contains=ALLBUT,laceParenError
" Should suffice for even very long strings and expressions
syn sync lines=40
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_lace_syntax_inits")
if version < 508
let did_lace_syntax_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink laceTopStruct PreProc
HiLink laceOptionClause Statement
HiLink laceOptionMark Constant
HiLink laceClusterProp Label
HiLink laceAdaptClassName Label
HiLink laceExternal Statement
HiLink laceCluster ModeMsg
HiLink laceEscape Special
HiLink laceBool Boolean
HiLink laceString String
HiLink laceCharacter Character
HiLink laceClassName Type
HiLink laceNumber Number
HiLink laceOperator Special
HiLink laceArray Special
HiLink laceExport Special
HiLink laceCreation Special
HiLink laceBrackets Special
HiLink laceConstraint Special
HiLink laceComment Comment
HiLink laceError Error
HiLink laceStringError Error
HiLink laceParenError Error
HiLink laceBracketError Error
HiLink laceTodo Todo
delcommand HiLink
endif
let b:current_syntax = "lace"
" vim: ts=4
|