forked from enlightenment/efl
1320 lines
43 KiB
Plaintext
1320 lines
43 KiB
Plaintext
|
" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.
|
||
|
UseVimball
|
||
|
finish
|
||
|
ftplugin/edc.vim [[[1
|
||
|
24
|
||
|
" Vim filetype plugin file
|
||
|
" Language: EDC
|
||
|
" Maintainer: Viktor Kojouharov
|
||
|
" Latest Revision: 2006-10-29
|
||
|
|
||
|
if exists("b:did_ftplugin")
|
||
|
finish
|
||
|
endif
|
||
|
let b:did_ftplugin = 1
|
||
|
|
||
|
let b:undo_ftplugin = "setl com< cms< inc< fo< efm< mp<"
|
||
|
|
||
|
setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
|
||
|
setlocal commentstring=/*%s*/
|
||
|
setlocal formatoptions-=t formatoptions+=croql
|
||
|
setlocal include=^\s*#\s*include
|
||
|
setlocal efm=edje_cc:%s.\ %f:%l\ %m
|
||
|
setlocal mp=edje_cc\ %
|
||
|
|
||
|
if exists('&ofu')
|
||
|
setlocal ofu=edccomplete#Complete
|
||
|
setlocal cfu=edccomplete#Complete
|
||
|
endif
|
||
|
|
||
|
syntax/edc.vim [[[1
|
||
|
225
|
||
|
" Vim syntax file
|
||
|
" Language: EDC
|
||
|
" Maintainer: Viktor Kojouharov
|
||
|
" Last Change: 2007 02 24
|
||
|
|
||
|
" 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
|
||
|
|
||
|
" A bunch of useful keywords
|
||
|
syn keyword edcBlock images data fonts collections group contained
|
||
|
syn keyword edcBlock part parts dragable description contained
|
||
|
syn keyword edcBlock text font fill origin size image contained
|
||
|
syn keyword edcBlock programs program styles style contained
|
||
|
syn keyword edcBlock gradient spectra spectrum contained
|
||
|
syn keyword edcBlock color_classes color_class rel1 rel2 contained
|
||
|
syn keyword edcBlock items item contained
|
||
|
|
||
|
syn keyword edcLabel item name alias min max type effect contained
|
||
|
syn keyword edcLabel mouse_events repeat_events clip_to contained
|
||
|
syn keyword edcLabel x y confine events scale contained
|
||
|
syn keyword edcLabel ignore_flags precise_is_inside contained
|
||
|
syn keyword edcLabel use_alternate_font_metrics entry_mode contained
|
||
|
syn keyword edcLabel source source2 source3 source4 contained
|
||
|
syn keyword edcLabel source5 source6 multiline pointer_mode contained
|
||
|
syn keyword edcLabel state visible step aspect fixed middle contained
|
||
|
syn keyword edcLabel aspect_preference elipsis image contained
|
||
|
syn keyword edcLabel relative offset to to_x to_y contained
|
||
|
syn keyword edcLabel border color color2 color3 font size contained
|
||
|
syn keyword edcLabel signal action transition in contained
|
||
|
syn keyword edcLabel target after fit align contained
|
||
|
syn keyword edcLabel text smooth inherit tag base style contained
|
||
|
syn keyword edcLabel text_source color_class text_class contained
|
||
|
syn keyword edcLabel spectrum angle spread normal tween contained
|
||
|
syn keyword edcLabel padding prefer weight aspect_mode contained
|
||
|
syn keyword edcLabel options layout position span contained
|
||
|
syn keyword edcLabel homogeneous contained
|
||
|
|
||
|
syn keyword edcConstant COMP RAW LOSSY NONE ON_HOLD AUTOGRAB NOGRAB
|
||
|
syn keyword edcConstant TEXT IMAGE RECT TEXTBLOCK SWALLOW GRADIENT GROUP
|
||
|
syn keyword edcConstant NONE PLAIN OUTLINE SOFT_OUTLINE SHADOW
|
||
|
syn keyword edcConstant SOFT_SHADOW OUTLINE_SHADOW OUTLINE_SOFT_SHADOW
|
||
|
syn keyword edcConstant GLOW FAR_SHADOW FAR_SOFT_SHADOW
|
||
|
syn keyword edcConstant STATE_SET ACTION_STOP SIGNAL_EMIT FOCUS_SET
|
||
|
syn keyword edcConstant DRAG_VAL_SET DRAG_VAL_STEP DRAG_VAL_PAGE
|
||
|
syn keyword edcConstant LINEAR SINUSOIDAL ACCELERATE DECELERATE
|
||
|
syn keyword edcConstant VERTICAL HORIZONTAL BOTH BOX TABLE
|
||
|
syn keyword edcConstant EDITABLE PASSWORD "default"
|
||
|
|
||
|
syn keyword edcTodo contained TODO FIXME XXX
|
||
|
|
||
|
syn match edcLabelMatch "\w\+:" contains=edcLabel
|
||
|
syn match edcBlockMatch "\w\+\_s*{" contains=edcBlock
|
||
|
syn match edcBlockMatch "\w\+\.\a"me=e-2 contains=edcBlock
|
||
|
" edcCommentGroup allows adding matches for special things in comments
|
||
|
syn cluster edcCommentGroup contains=edcTodo
|
||
|
|
||
|
" String and Character constants
|
||
|
" Highlight special characters (those which have a backslash) differently
|
||
|
syn match edcSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
|
||
|
syn region edcString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=edcSpecial
|
||
|
syn match edcFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
|
||
|
syn match edcFormat display "%%" contained
|
||
|
syn region edcString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat
|
||
|
|
||
|
syn match edcCharacter "L\='[^\\]'"
|
||
|
syn match edcCharacter "L'[^']*'" contains=edcSpecial
|
||
|
syn match edcSpecialError "L\='\\[^'\"?\\abfnrtv]'"
|
||
|
syn match edcSpecialCharacter "L\='\\['\"?\\abfnrtv]'"
|
||
|
syn match edcSpecialCharacter display "L\='\\\o\{1,3}'"
|
||
|
syn match edcSpecialCharacter display "'\\x\x\{1,2}'"
|
||
|
syn match edcSpecialCharacter display "L'\\x\x\+'"
|
||
|
|
||
|
"when wanted, highlight trailing white space
|
||
|
if exists("edc_space_errors")
|
||
|
if !exists("edc_no_trail_space_error")
|
||
|
syn match edcSpaceError display excludenl "\s\+$"
|
||
|
endif
|
||
|
if !exists("edc_no_tab_space_error")
|
||
|
syn match edcSpaceError display " \+\t"me=e-1
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
"catch errors caused by wrong parenthesis and brackets
|
||
|
syn cluster edcParenGroup contains=edcParenError,edcIncluded,edcSpecial,edcCommentSkip,edcCommentString,edcComment2String,@edcCommentGroup,edcCommentStartError,edcUserCont,edcUserLabel,edcBitField,edcCommentSkip,edcOctalZero,edcFormat,edcNumber,edcFloat,edcOctal,edcOctalError,edcNumbersCom
|
||
|
if exists("edc_no_bracket_error")
|
||
|
syn region edcParen transparent start='(' end=')' contains=ALLBUT,@edcParenGroup
|
||
|
syn match edcParenError display ")"
|
||
|
syn match edcErrInParen display contained "[{}]"
|
||
|
else
|
||
|
syn region edcParen transparent start='(' end=')' contains=ALLBUT,@edcParenGroup,edcErrInBracket
|
||
|
syn match edcParenError display "[\])]"
|
||
|
syn match edcErrInParen display contained "[\]{}]"
|
||
|
syn region edcBracket transparent start='\[' end=']' contains=ALLBUT,@edcParenGroup,edcErrInParen
|
||
|
syn match edcErrInBracket display contained "[);{}]"
|
||
|
endif
|
||
|
|
||
|
"integer number, or floating point number without a dot and with "f".
|
||
|
syn case ignore
|
||
|
syn match edcNumbers display transparent "\<\d\|\.\d" contains=edcNumber,edcFloat,edcOctalError,edcOctal
|
||
|
" Same, but without octal error (for comments)
|
||
|
syn match edcNumbersCom display contained transparent "\<\d\|\.\d" contains=edcNumber,edcFloat,edcOctal
|
||
|
syn match edcNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
|
||
|
"hex number
|
||
|
syn match edcNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
|
||
|
" Flag the first zero of an octal number as something special
|
||
|
syn match edcOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=edcOctalZero
|
||
|
syn match edcOctalZero display contained "\<0"
|
||
|
syn match edcFloat display contained "\d\+f"
|
||
|
"floating point number, with dot, optional exponent
|
||
|
syn match edcFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
|
||
|
"floating point number, starting with a dot, optional exponent
|
||
|
syn match edcFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
|
||
|
"floating point number, without dot, with exponent
|
||
|
syn match edcFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
|
||
|
" flag an octal number with wrong digits
|
||
|
syn match edcOctalError display contained "0\o*[89]\d*"
|
||
|
syn case match
|
||
|
|
||
|
if exists("edc_comment_strings")
|
||
|
" A comment can contain edcString, edcCharacter and edcNumber.
|
||
|
" But a "*/" inside a edcString in a edcComment DOES end the comment! So we
|
||
|
" need to use a special type of edcString: edcCommentString, 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 :-(
|
||
|
syntax match edcCommentSkip contained "^\s*\*\($\|\s\+\)"
|
||
|
syntax region edcCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=edcSpecial,edcCommentSkip
|
||
|
syntax region edcComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=edcSpecial
|
||
|
syntax region edcCommentL start="//" skip="\\$" end="$" keepend contains=@edcCommentGroup,edcComment2String,edcCharacter,edcNumbersCom,edcSpaceError
|
||
|
syntax region edcComment matchgroup=edcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@edcCommentGroup,edcCommentStartError,edcCommentString,edcCharacter,edcNumbersCom,edcSpaceError
|
||
|
else
|
||
|
syn region edcCommentL start="//" skip="\\$" end="$" keepend contains=@edcCommentGroup,edcSpaceError
|
||
|
syn region edcComment matchgroup=edcCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@edcCommentGroup,edcCommentStartError,edcSpaceError
|
||
|
endif
|
||
|
" keep a // comment separately, it terminates a preproc. conditional
|
||
|
syntax match edcCommentError display "\*/"
|
||
|
syntax match edcCommentStartError display "/\*"me=e-1 contained
|
||
|
|
||
|
syn region edcPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=edcComment,edcCharacter,edcParenError,edcNumbers,edcCommentError,edcSpaceError
|
||
|
syn match edcPreCondit display "^\s*#\s*\(else\|endif\)\>"
|
||
|
syn region edcIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
|
||
|
syn match edcIncluded display contained "<[^>]*>"
|
||
|
syn match edcInclude display "^\s*#\s*include\>\s*["<]" contains=edcIncluded
|
||
|
syn cluster edcPreProcGroup contains=edcPreCondit,edcIncluded,edcInclude,edcDefine,edcErrInParen,edcErrInBracket,edcCommentSkip,edcCommentString,edcComment2String,@edcCommentGroup,edcCommentStartError,edcParen,edcBracket,edcMulti,edcUserLabel
|
||
|
syn cluster edcAlphaNum contains=edcSpecial,edcOctalZero,edcFormat,edcNumber,edcFloat,edcOctal,edcOctalError,edcNumbersCom,edcString
|
||
|
syn region edcDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@edcPreProcGroup
|
||
|
syn region edcPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@edcPreProcGroup
|
||
|
|
||
|
syn match edcUserLabel display "\I\i*" contained
|
||
|
|
||
|
syn include @edcEmbryo syntax/embryo.vim
|
||
|
unlet b:current_syntax
|
||
|
syn region edcScript matchgroup=edcScriptTag start="\<script\_s*{" end="}" contains=@edcEmbryo,edcScriptTag
|
||
|
syn keyword edcScriptTag contained script
|
||
|
|
||
|
if exists("edc_minlines")
|
||
|
let b:edc_minlines = edc_minlines
|
||
|
else
|
||
|
let b:edc_minlines = 50 " #if 0 constructs can be long
|
||
|
endif
|
||
|
exec "syn sync ccomment edcComment minlines=" . b:edc_minlines
|
||
|
"syn sync fromstart
|
||
|
|
||
|
" 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_edc_syn_inits")
|
||
|
if version < 508
|
||
|
let did_edc_syn_inits = 1
|
||
|
command -nargs=+ HiLink hi link <args>
|
||
|
else
|
||
|
command -nargs=+ HiLink hi def link <args>
|
||
|
endif
|
||
|
|
||
|
HiLink edcFormat edcSpecial
|
||
|
HiLink edcCommentL edcComment
|
||
|
HiLink edcCommentStart edcComment
|
||
|
HiLink edcLabel Label
|
||
|
HiLink edcUserLabel Label
|
||
|
HiLink edcConditional Conditional
|
||
|
HiLink edcRepeat Repeat
|
||
|
HiLink edcCharacter Character
|
||
|
HiLink edcSpecialCharacter cSpecial
|
||
|
HiLink edcNumber Number
|
||
|
HiLink edcOctal Number
|
||
|
HiLink edcOctalZero PreProc " link this to Error if you want
|
||
|
HiLink edcFloat Float
|
||
|
HiLink edcOctalError edcError
|
||
|
HiLink edcParenError edcError
|
||
|
HiLink edcErrInParen edcError
|
||
|
HiLink edcErrInBracket edcError
|
||
|
HiLink edcCommentError edcError
|
||
|
HiLink edcCommentStartError edcError
|
||
|
HiLink edcSpaceError edcError
|
||
|
HiLink edcSpecialError edcError
|
||
|
HiLink edcOperator Operator
|
||
|
HiLink edcStructure Structure
|
||
|
HiLink edcStorageClass StorageClass
|
||
|
HiLink edcInclude Include
|
||
|
HiLink edcPreProc PreProc
|
||
|
HiLink edcDefine Macro
|
||
|
HiLink edcIncluded edcString
|
||
|
HiLink edcError Error
|
||
|
HiLink edcBlock Function
|
||
|
HiLink edcScriptTag Function
|
||
|
HiLink edcPreCondit PreCondit
|
||
|
HiLink edcConstant Constant
|
||
|
HiLink edcCommentString edcString
|
||
|
HiLink edcComment2String edcString
|
||
|
HiLink edcCommentSkip edcComment
|
||
|
HiLink edcString String
|
||
|
HiLink edcComment Comment
|
||
|
HiLink edcSpecial SpecialChar
|
||
|
HiLink edcTodo Todo
|
||
|
|
||
|
delcommand HiLink
|
||
|
endif
|
||
|
|
||
|
let b:current_syntax = "edc"
|
||
|
|
||
|
" vim: ts=8
|
||
|
indent/edc.vim [[[1
|
||
|
83
|
||
|
" Vim indent file
|
||
|
" Language: EDC
|
||
|
" Maintainer: Viktor Kojouharov
|
||
|
" Latest Revision: 2007 02 24
|
||
|
|
||
|
if exists("b:did_indent")
|
||
|
finish
|
||
|
endif
|
||
|
let b:did_indent = 1
|
||
|
|
||
|
setlocal indentexpr=GetEDCIndent()
|
||
|
setlocal indentkeys=0{,0},!^F,o,O
|
||
|
|
||
|
if exists("*GetEDCIndent")
|
||
|
finish
|
||
|
endif
|
||
|
|
||
|
function s:prevnonblanknoncomment(lnum)
|
||
|
let lnum = a:lnum
|
||
|
while lnum > 1
|
||
|
let lnum = prevnonblank(lnum)
|
||
|
let line = getline(lnum)
|
||
|
if line =~ '\*/'
|
||
|
while lnum > 1 && line !~ '/\*'
|
||
|
let lnum -= 1
|
||
|
endwhile
|
||
|
if line =~ '^\s*/\*'
|
||
|
let lnum -= 1
|
||
|
else
|
||
|
break
|
||
|
endif
|
||
|
elseif line =~ '^\s*//'
|
||
|
let lnum -= 1
|
||
|
else
|
||
|
break
|
||
|
endif
|
||
|
endwhile
|
||
|
return lnum
|
||
|
endfunction
|
||
|
|
||
|
function s:count_braces(lnum, count_open)
|
||
|
let n_open = 0
|
||
|
let n_close = 0
|
||
|
let line = getline(a:lnum)
|
||
|
let pattern = '[{}]'
|
||
|
let i = match(line, pattern)
|
||
|
while i != -1
|
||
|
if synIDattr(synID(a:lnum, i + 1, 0), 'name') !~ 'c\%(CommentL\|Comment\|StringQ\{1,2}\)'
|
||
|
if line[i] == '{'
|
||
|
let n_open += 1
|
||
|
elseif line[i] == '}'
|
||
|
if n_open > 0
|
||
|
let n_open -= 1
|
||
|
else
|
||
|
let n_close += 1
|
||
|
endif
|
||
|
endif
|
||
|
endif
|
||
|
let i = match(line, pattern, i + 1)
|
||
|
endwhile
|
||
|
return a:count_open ? n_open : n_close
|
||
|
endfunction
|
||
|
|
||
|
function GetEDCIndent()
|
||
|
let line = getline(v:lnum)
|
||
|
if line =~ '^\s*\*' || line =~ '^\s*//' || line =~ '^\s*}'
|
||
|
return cindent(v:lnum)
|
||
|
endif
|
||
|
|
||
|
let pnum = s:prevnonblanknoncomment(v:lnum - 1)
|
||
|
if pnum == 0
|
||
|
return 0
|
||
|
endif
|
||
|
|
||
|
let ind = indent(pnum) + s:count_braces(pnum, 1) * &sw
|
||
|
|
||
|
let pline = getline(pnum)
|
||
|
if pline =~ '}\s*$'
|
||
|
let ind -= (s:count_braces(pnum, 0) - (pline =~ '^\s*}' ? 1 : 0)) * &sw
|
||
|
endif
|
||
|
|
||
|
return ind
|
||
|
endfunction
|
||
|
ftdetect/edc.vim [[[1
|
||
|
3
|
||
|
au BufRead,BufNewFile *.edc set filetype=edc
|
||
|
au BufRead,BufNewFile *.sma set filetype=embryo
|
||
|
au BufRead,BufNewFile *.embryo set filetype=embryo
|
||
|
autoload/edccomplete.vim [[[1
|
||
|
774
|
||
|
" Vim completion script
|
||
|
" Language: EDC
|
||
|
" Maintainer: Viktor Kojouharov
|
||
|
" Last Change: 2007 02 24
|
||
|
|
||
|
function! edccomplete#Complete(findstart, base)
|
||
|
if a:findstart
|
||
|
" locate the start of the word
|
||
|
let line = getline('.')
|
||
|
let start = col('.') - 1
|
||
|
let compl_begin = col('.') - 2
|
||
|
let lastword = -1
|
||
|
if line =~ ':' && line !~ '\.'
|
||
|
while start > 0 && (line[start - 1] =~ '\k' || line[start - 1] =~ '"')
|
||
|
let start -= 1
|
||
|
endwhile
|
||
|
else
|
||
|
while start > 0
|
||
|
if line[start - 1] =~ '\k'
|
||
|
let start -= 1
|
||
|
elseif line[start - 1] =~ '\.'
|
||
|
if lastword == -1
|
||
|
let lastword = start - 2
|
||
|
endif
|
||
|
let start -= 1
|
||
|
else
|
||
|
break
|
||
|
endif
|
||
|
endwhile
|
||
|
endif
|
||
|
let b:compl_context = getline('.')[0:compl_begin]
|
||
|
|
||
|
if lastword == -1
|
||
|
let ppe = searchpos('\.', 'bcn')
|
||
|
let pps = searchpos('\w\+\.', 'bcn')
|
||
|
let b:sparent = ''
|
||
|
if ppe != [0, 0] && pps[0] == ppe[0] && pps[1] <= ppe[1] && pps[0] == line('.')
|
||
|
let b:scontext = line[pps[1] -1 : ppe[1] - 2]
|
||
|
call edccomplete#FindParent(pps[0], pps[1])
|
||
|
return start
|
||
|
endif
|
||
|
|
||
|
let startpos = searchpair('{', '', '}', 'bnW')
|
||
|
let lnum = startpos
|
||
|
let line = getline(lnum)
|
||
|
|
||
|
if line !~ '\a\+'
|
||
|
let lnum = prevnonblank(lnum - 1)
|
||
|
let line = getline(lnum)
|
||
|
endif
|
||
|
|
||
|
call edccomplete#FindParent(lnum, 1)
|
||
|
let b:scontext = matchstr(line, '\w\+')
|
||
|
|
||
|
return start
|
||
|
else
|
||
|
let b:scontext = line[start : lastword]
|
||
|
|
||
|
return lastword + 2
|
||
|
endif
|
||
|
else
|
||
|
" find months matching with "a:base"
|
||
|
let res = []
|
||
|
if exists("b:compl_context")
|
||
|
let line = b:compl_context
|
||
|
unlet! b:compl_context
|
||
|
else
|
||
|
let line = a:base
|
||
|
endif
|
||
|
|
||
|
if b:scontext == 'part'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:partLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:partStatement)
|
||
|
if line =~ 'type:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:partTypes)
|
||
|
elseif line =~ 'effect:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:partEffects)
|
||
|
elseif line =~ 'ignore_flags:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:partIgnoreFlags)
|
||
|
elseif line =~ 'pointer_mode:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:partPointerMode)
|
||
|
elseif line =~ 'editable_mode:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:partEditableMode)
|
||
|
endif
|
||
|
if line =~ 'image:\s*".\{-}"'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod)
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'dragable'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:dragableLabel)
|
||
|
|
||
|
elseif b:scontext == 'description'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:descriptionLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:descriptionStatement)
|
||
|
if line =~ 'aspect_preference:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:aspectPrefTypes)
|
||
|
elseif line =~ 'inherit:\s*"\?'
|
||
|
call edccomplete#FindStates(res, a:base, 1)
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'rel1' || b:scontext == 'rel2'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:relLabel)
|
||
|
if line =~ 'to\%(_[xy]\)\?:\s*"\?'
|
||
|
call edccomplete#FindNamesIn(res, a:base, 'parts')
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'image'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:imageLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:imageStatement)
|
||
|
if line =~ 'image:\s*".\{-}"'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod)
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'fill'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:fillLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:fillStatement)
|
||
|
|
||
|
elseif b:scontext == 'origin' || b:scontext == 'size'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:fillInnerStatement)
|
||
|
|
||
|
elseif b:scontext == 'text'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:textLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:textStatement)
|
||
|
|
||
|
elseif b:scontext == 'program'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:programLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:programStatement)
|
||
|
if line =~ 'transition:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:transitionTypes)
|
||
|
elseif line =~ 'STATE_SET\s*"\?'
|
||
|
call edccomplete#FindStates(res, a:base, 0)
|
||
|
elseif line =~ 'action:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:actionTypes)
|
||
|
elseif line =~ 'target:\s*"\?'
|
||
|
call edccomplete#FindNamesIn(res, a:base, 'parts')
|
||
|
elseif line =~ 'after:\s*"\?'
|
||
|
call edccomplete#FindNamesIn(res, a:base, 'programs')
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'programs'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:programsLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:programsStatement)
|
||
|
if line =~ 'image:\s*".\{-}"'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod)
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'box' && b:sparent == 'part'
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:boxStatement)
|
||
|
|
||
|
elseif b:scontext == 'items'
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:boxItemsStatement)
|
||
|
|
||
|
elseif b:scontext == 'item'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:boxItemLabel)
|
||
|
if line =~ 'type:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:boxItemTypes)
|
||
|
elseif line =~ 'aspect_mode:\s*"\?'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:boxItemAspectMode)
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'box' && b:sparent == 'description'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:boxDescLabel)
|
||
|
if line =~ 'layout:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:boxLayout)
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'table' && b:sparent == 'description'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:tableDescLabel)
|
||
|
if line =~ 'homogeneous:\s*'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:tableHomogeneousMode)
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'group'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:groupLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:groupStatement)
|
||
|
if line =~ 'image:\s*".\{-}"'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod)
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'parts'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:partsLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:partsStatement)
|
||
|
if line =~ 'image:\s*".\{-}"'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod)
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'data'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:dataLabel)
|
||
|
|
||
|
elseif b:scontext == 'fonts'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:fontsLabel)
|
||
|
|
||
|
elseif b:scontext == 'spectra'
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:spectraStatement)
|
||
|
|
||
|
elseif b:scontext == 'spectrum'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:spectrumLabel)
|
||
|
|
||
|
elseif b:scontext == 'gradient'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:gradientLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:gradientStatement)
|
||
|
|
||
|
elseif b:scontext == 'styles'
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:stylesStatement)
|
||
|
|
||
|
elseif b:scontext == 'style'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:styleLabel)
|
||
|
|
||
|
elseif b:scontext == 'color_classes'
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:color_classesStatement)
|
||
|
|
||
|
elseif b:scontext == 'color_class'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:color_classLabel)
|
||
|
|
||
|
elseif b:scontext == 'images'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:imagesLabel)
|
||
|
if line =~ 'image:\s*".\{-}"'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod)
|
||
|
endif
|
||
|
|
||
|
elseif b:scontext == 'collections'
|
||
|
call edccomplete#AddLabel(res, line, a:base, s:collectionsLabel)
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:collectionsStatement)
|
||
|
if line =~ 'image:\s*".\{-}"'
|
||
|
call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod)
|
||
|
endif
|
||
|
|
||
|
elseif strlen(b:scontext) == 0
|
||
|
call edccomplete#AddStatement(res, line, a:base, s:topStatement)
|
||
|
endif
|
||
|
|
||
|
unlet! b:scontext
|
||
|
|
||
|
return res
|
||
|
endif
|
||
|
endfunction
|
||
|
|
||
|
function! edccomplete#AddLabel(res, line, base, label)
|
||
|
if a:line =~ ':'
|
||
|
return
|
||
|
endif
|
||
|
|
||
|
for m in sort(keys(a:label))
|
||
|
if m =~ '^' . a:base
|
||
|
call add(a:res, {'word': m . ':', 'menu': a:label[m]})
|
||
|
endif
|
||
|
endfor
|
||
|
endfunction
|
||
|
|
||
|
function! edccomplete#AddKeyword(res, base, label)
|
||
|
for m in sort(keys(a:label))
|
||
|
if m =~ '^' . a:base
|
||
|
call add(a:res, {'word': m, 'menu': a:label[m]})
|
||
|
endif
|
||
|
endfor
|
||
|
endfunction
|
||
|
|
||
|
function! edccomplete#AddStatement(res, line, base, statement)
|
||
|
if a:line =~ ':'
|
||
|
return
|
||
|
endif
|
||
|
|
||
|
for m in sort(a:statement)
|
||
|
if m =~ '^' . a:base
|
||
|
call add(a:res, m . ' {')
|
||
|
endif
|
||
|
endfor
|
||
|
endfunction
|
||
|
|
||
|
function! edccomplete#FindStates(res, base, in_part)
|
||
|
let curpos = getpos('.')
|
||
|
call remove(curpos, 0, 0)
|
||
|
|
||
|
let states_list = []
|
||
|
if a:in_part == 1 " in the current part only
|
||
|
let part_start = search('^[ \t}]*\<part\>[ \t{]*$', 'bnW')
|
||
|
if part_start != 0 " found it
|
||
|
let line = getline(part_start)
|
||
|
if line !~ '{'
|
||
|
let part_start = nextnonblank(part_start)
|
||
|
endif
|
||
|
call cursor(part_start, 0)
|
||
|
let part_end = searchpair('{', '', '}', 'nW')
|
||
|
endif
|
||
|
else " in the current parts group
|
||
|
let part_start = search('^[ \t}]*\<parts\>[ \t{]*$', 'bnW')
|
||
|
if part_start != 0 " found it
|
||
|
let line = getline(part_start)
|
||
|
if line !~ '{'
|
||
|
let part_start = nextnonblank(part_start)
|
||
|
endif
|
||
|
call cursor(part_start, 0)
|
||
|
let part_end = searchpair('{', '', '}', 'nW')
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
let state_num = search('\%(state:\s*\)"\w\+"', 'W', part_end)
|
||
|
while state_num
|
||
|
let state = matchstr(getline(state_num), '\%(state:\s*\)\@<="\w\+"')
|
||
|
call extend(states_list, [state])
|
||
|
let state_num = search('\%(state:\s*\)"\w\+"', 'W', part_end)
|
||
|
endwhile
|
||
|
call cursor(curpos)
|
||
|
|
||
|
for m in sort(states_list)
|
||
|
if m =~ '^' . a:base
|
||
|
call add(a:res, m)
|
||
|
endif
|
||
|
endfor
|
||
|
endfunction
|
||
|
|
||
|
function! edccomplete#FindNamesIn(res, base, str)
|
||
|
let curpos = getpos('.')
|
||
|
call remove(curpos, 0, 0)
|
||
|
|
||
|
let names_list = []
|
||
|
let part_start = search('^[ \t}]*\<' . a:str . '\>[ \t{]*$', 'bnW')
|
||
|
if part_start != 0 " found it
|
||
|
let line = getline(part_start)
|
||
|
if line !~ '{'
|
||
|
let part_start = nextnonblank(part_start)
|
||
|
endif
|
||
|
call cursor(part_start, 0)
|
||
|
let part_end = searchpair('{', '', '}', 'nW')
|
||
|
endif
|
||
|
|
||
|
let name_num = search('\%(name:\s*\)"\w\+"', 'W', part_end)
|
||
|
while name_num
|
||
|
let name = matchstr(getline(name_num), '\%(name:\s*\)\@<="\w\+"')
|
||
|
call extend(names_list, [name])
|
||
|
let name_num = search('\%(name:\s*\)"\w\+"', 'W', part_end)
|
||
|
endwhile
|
||
|
call cursor(curpos)
|
||
|
|
||
|
for m in sort(names_list)
|
||
|
if m =~ '^' . a:base
|
||
|
call add(a:res, m)
|
||
|
endif
|
||
|
endfor
|
||
|
endfunction
|
||
|
|
||
|
function! edccomplete#FindParent(lnum, cnum)
|
||
|
call setpos('.', [0, a:lnum, a:cnum, 0])
|
||
|
let ppe = searchpos('\.', 'bcn')
|
||
|
let pps = searchpos('\w\+\.', 'bcn')
|
||
|
if ppe != [0, 0] && pps[0] == ppe[0] && pps[1] <= ppe[1] && pps[0] == line('.')
|
||
|
let b:sparent = line[pps[1] -1 : ppe[1] - 2]
|
||
|
return
|
||
|
endif
|
||
|
|
||
|
let startpos = searchpair('{', '', '}', 'bnW')
|
||
|
let lnum = startpos
|
||
|
let line = getline(lnum)
|
||
|
|
||
|
if line !~ '\a\+'
|
||
|
let line = getline(prevnonblank(lnum - 1))
|
||
|
endif
|
||
|
|
||
|
let b:sparent = matchstr(line, '\w\+')
|
||
|
endfunction
|
||
|
|
||
|
" part
|
||
|
let s:partLabel = {
|
||
|
\ 'name': '"string"',
|
||
|
\ 'type': '"keyword"',
|
||
|
\ 'effect': '"keyword"',
|
||
|
\ 'ignore_flags': '"keyword" ...',
|
||
|
\ 'pointer_mode': '"keyword"',
|
||
|
\ 'mouse_events': '"bool"',
|
||
|
\ 'repeat_events': '"bool"',
|
||
|
\ 'scale': '"bool"',
|
||
|
\ 'precise_is_inside': '"bool"',
|
||
|
\ 'use_alternate_font_metrics': '"bool"',
|
||
|
\ 'clip_to': '"string"',
|
||
|
\ 'source': '"string"',
|
||
|
\ 'image': '"string" "keyword"',
|
||
|
\ 'font': '"string" "string"',
|
||
|
\ 'entry_mode': '"keyword"',
|
||
|
\ }
|
||
|
let s:partStatement = [
|
||
|
\ 'dragable',
|
||
|
\ 'images',
|
||
|
\ 'fonts',
|
||
|
\ 'description',
|
||
|
\ 'styles',
|
||
|
\ 'color_classes',
|
||
|
\ 'program',
|
||
|
\ 'programs',
|
||
|
\ 'box',
|
||
|
\ ]
|
||
|
|
||
|
" dragable
|
||
|
let s:dragableLabel = {
|
||
|
\ 'x': '"bool" "int" "int"',
|
||
|
\ 'y': '"bool" "int" "int"',
|
||
|
\ 'confine': '"string"',
|
||
|
\ 'events': '"string"',
|
||
|
\ }
|
||
|
|
||
|
" description
|
||
|
let s:descriptionLabel = {
|
||
|
\ 'state': '"string" "float"',
|
||
|
\ 'inherit': '"string" "float"',
|
||
|
\ 'visible': '"bool"',
|
||
|
\ 'align': '"float" "float"',
|
||
|
\ 'fixed': '"float" "float"',
|
||
|
\ 'min': '"int" "int"',
|
||
|
\ 'max': '"int" "int"',
|
||
|
\ 'step': '"int" "int"',
|
||
|
\ 'aspect': '"float" "float"',
|
||
|
\ 'aspect_preference': '"keyword"',
|
||
|
\ 'color_class': '"string"',
|
||
|
\ 'color': '"int" "int" "int" "int"',
|
||
|
\ 'color2': '"int" "int" "int" "int"',
|
||
|
\ 'color3': '"int" "int" "int" "int"',
|
||
|
\ 'font': '"string" "string"',
|
||
|
\ }
|
||
|
let s:descriptionStatement = [
|
||
|
\ 'rel1',
|
||
|
\ 'rel2',
|
||
|
\ 'image',
|
||
|
\ 'fill',
|
||
|
\ 'text',
|
||
|
\ 'gradient',
|
||
|
\ 'images',
|
||
|
\ 'fonts',
|
||
|
\ 'styles',
|
||
|
\ 'color_classes',
|
||
|
\ 'program',
|
||
|
\ 'programs',
|
||
|
\ 'box',
|
||
|
\ ]
|
||
|
|
||
|
" rel
|
||
|
let s:relLabel = {
|
||
|
\ 'relative': '"float" "float"',
|
||
|
\ 'offset': '"int" "int"',
|
||
|
\ 'to': '"string"',
|
||
|
\ 'to_x': '"string"',
|
||
|
\ 'to_y': '"string"',
|
||
|
\ }
|
||
|
|
||
|
" image
|
||
|
let s:imageStatement = [
|
||
|
\ 'images',
|
||
|
\ ]
|
||
|
let s:imageLabel = {
|
||
|
\ 'image': '"string" "keyword"',
|
||
|
\ 'normal': '"string"',
|
||
|
\ 'tween': '"string"',
|
||
|
\ 'border': '"int" "int" "int" "int"',
|
||
|
\ 'middle': '"bool"',
|
||
|
\ }
|
||
|
|
||
|
" fill
|
||
|
let s:fillLabel = {
|
||
|
\ 'smooth': '"bool"',
|
||
|
\ 'angle': '"0-360"',
|
||
|
\ 'spread': '"bool"',
|
||
|
\ }
|
||
|
let s:fillStatement = [
|
||
|
\ 'origin',
|
||
|
\ 'size',
|
||
|
\ ]
|
||
|
" fill origin/size
|
||
|
let s:fillInnerStatement = {
|
||
|
\ 'relative': '"float" "float"',
|
||
|
\ 'offset': '"int" "int"',
|
||
|
\ }
|
||
|
|
||
|
" text
|
||
|
let s:textLabel = {
|
||
|
\ 'text': '"string"',
|
||
|
\ 'text_class': '"string"',
|
||
|
\ 'font': '"string"',
|
||
|
\ 'style': '"string"',
|
||
|
\ 'size': '"int"',
|
||
|
\ 'fit': '"bool" "bool"',
|
||
|
\ 'min': '"bool" "bool"',
|
||
|
\ 'max': '"bool" "bool"',
|
||
|
\ 'align': '"float" "float"',
|
||
|
\ 'elipsis': '"float"',
|
||
|
\ 'source': '"string"',
|
||
|
\ 'text_source': '"string"',
|
||
|
\ }
|
||
|
let s:textStatement = [
|
||
|
\ 'fonts',
|
||
|
\ ]
|
||
|
|
||
|
" program
|
||
|
let s:programLabel = {
|
||
|
\ 'name': '"string"',
|
||
|
\ 'signal': '"string"',
|
||
|
\ 'source': '"string"',
|
||
|
\ 'action': '"keyword" ...',
|
||
|
\ 'transition': '"keyword" "float"',
|
||
|
\ 'target': '"string"',
|
||
|
\ 'after': '"string"',
|
||
|
\ 'in': '"float" "float"',
|
||
|
\ }
|
||
|
let s:programStatement = [
|
||
|
\ 'script',
|
||
|
\ ]
|
||
|
|
||
|
|
||
|
" programs
|
||
|
let s:programsLabel = {
|
||
|
\ 'image': '"string" "keyword"',
|
||
|
\ 'font': '"string" "string"',
|
||
|
\ }
|
||
|
let s:programsStatement = [
|
||
|
\ 'images',
|
||
|
\ 'fonts',
|
||
|
\ 'program',
|
||
|
\ ]
|
||
|
|
||
|
" box and table
|
||
|
let s:boxStatement = [
|
||
|
\ 'items',
|
||
|
\ ]
|
||
|
let s:boxItemsStatement = [
|
||
|
\ 'item',
|
||
|
\ ]
|
||
|
let s:boxItemLabel = {
|
||
|
\ 'type': '"keyword"',
|
||
|
\ 'name': '"string"',
|
||
|
\ 'source': '"string" # Group name',
|
||
|
\ 'min': '"int" "int"',
|
||
|
\ 'prefer': '"int" "int"',
|
||
|
\ 'max': '"int" "int"',
|
||
|
\ 'padding': '"int" "int" "int" "int"',
|
||
|
\ 'align': '"float" "float"',
|
||
|
\ 'weight': '"float" "float"',
|
||
|
\ 'aspect': '"float" "float"',
|
||
|
\ 'aspect_mode': '"keyword"',
|
||
|
\ 'options': '"string"',
|
||
|
\ }
|
||
|
let s:boxDescLabel = {
|
||
|
\ 'layout': '"string" ["string"]',
|
||
|
\ 'align': '"float" "float"',
|
||
|
\ 'padding': '"int" "int"',
|
||
|
\ }
|
||
|
let s:tableItemLabel = {
|
||
|
\ 'position': '"int" "int"',
|
||
|
\ 'span': '"int" "int"',
|
||
|
\ }
|
||
|
let s:tableDescLabel = {
|
||
|
\ 'homogeneous': '"keyword"',
|
||
|
\ 'align': '"float" "float"',
|
||
|
\ 'padding': '"int" "int"',
|
||
|
\ }
|
||
|
|
||
|
" group
|
||
|
let s:groupLabel = {
|
||
|
\ 'name': '"string"',
|
||
|
\ 'alias': '"string"',
|
||
|
\ 'min': '"int" "int"',
|
||
|
\ 'max': '"int" "int"',
|
||
|
\ 'image': '"string" "keyword"',
|
||
|
\ 'font': '"string" "string"',
|
||
|
\ }
|
||
|
let s:groupStatement = [
|
||
|
\ 'data',
|
||
|
\ 'script',
|
||
|
\ 'parts',
|
||
|
\ 'images',
|
||
|
\ 'fonts',
|
||
|
\ 'styles',
|
||
|
\ 'color_classes',
|
||
|
\ 'program',
|
||
|
\ 'programs',
|
||
|
\ ]
|
||
|
|
||
|
" parts
|
||
|
let s:partsStatement = [
|
||
|
\ 'images',
|
||
|
\ 'fonts',
|
||
|
\ 'part',
|
||
|
\ 'styles',
|
||
|
\ 'color_classes',
|
||
|
\ 'program',
|
||
|
\ 'programs',
|
||
|
\ ]
|
||
|
let s:partsLabel = {
|
||
|
\ 'image': '"string" "keyword"',
|
||
|
\ 'font': '"string" "string"',
|
||
|
\ }
|
||
|
|
||
|
" data
|
||
|
let s:dataLabel = {
|
||
|
\ 'item': '"string" "string" ...',
|
||
|
\ }
|
||
|
|
||
|
" fonts
|
||
|
let s:fontsLabel = {
|
||
|
\ 'font': '"string" "string"',
|
||
|
\ }
|
||
|
|
||
|
"images
|
||
|
let s:imagesLabel = {
|
||
|
\ 'image': '"string" "keyword"',
|
||
|
\ }
|
||
|
|
||
|
"collections
|
||
|
let s:collectionsStatement = [
|
||
|
\ 'group',
|
||
|
\ 'images',
|
||
|
\ 'fonts',
|
||
|
\ 'styles',
|
||
|
\ 'color_classes',
|
||
|
\ ]
|
||
|
let s:collectionsLabel = {
|
||
|
\ 'image': '"string" "keyword"',
|
||
|
\ 'font': '"string" "string"',
|
||
|
\ }
|
||
|
|
||
|
" spectra
|
||
|
let s:spectraStatement = [
|
||
|
\ 'spectrum',
|
||
|
\ ]
|
||
|
" spectrum
|
||
|
let s:spectrumLabel = {
|
||
|
\ 'name': '"string"',
|
||
|
\ 'color': '"int" "int" "int" "int" "int"',
|
||
|
\ }
|
||
|
" gradient
|
||
|
let s:gradientLabel = {
|
||
|
\ 'type': '"string"',
|
||
|
\ 'spectrum': '"string"',
|
||
|
\ }
|
||
|
let s:gradientStatement = [
|
||
|
\ 'rel1',
|
||
|
\ 'rel2',
|
||
|
\ ]
|
||
|
|
||
|
" styles
|
||
|
let s:stylesStatement = [
|
||
|
\ 'style',
|
||
|
\ ]
|
||
|
" style
|
||
|
let s:styleLabel = {
|
||
|
\ 'name': '"string"',
|
||
|
\ 'base': '"string"',
|
||
|
\ 'tag': '"string"',
|
||
|
\ }
|
||
|
|
||
|
" color_classes
|
||
|
let s:color_classesStatement = [
|
||
|
\ 'color_class',
|
||
|
\ ]
|
||
|
" color_class
|
||
|
let s:color_classLabel = {
|
||
|
\ 'name': '"string"',
|
||
|
\ 'color': '"int" "int" "int" "int"',
|
||
|
\ 'color2': '"int" "int" "int" "int"',
|
||
|
\ 'color3': '"int" "int" "int" "int"',
|
||
|
\ }
|
||
|
|
||
|
" toplevel
|
||
|
let s:topStatement = [
|
||
|
\ 'fonts',
|
||
|
\ 'images',
|
||
|
\ 'data',
|
||
|
\ 'collections',
|
||
|
\ 'spectra',
|
||
|
\ 'styles',
|
||
|
\ 'color_classes',
|
||
|
\ ]
|
||
|
|
||
|
" images image storage method
|
||
|
let s:imageStorageMethod = {
|
||
|
\ 'COMP': '',
|
||
|
\ 'RAW': '',
|
||
|
\ 'LOSSY': '0-100',
|
||
|
\ }
|
||
|
|
||
|
" part types
|
||
|
let s:partTypes = {
|
||
|
\ 'TEXT': '',
|
||
|
\ 'IMAGE': '',
|
||
|
\ 'RECT': '',
|
||
|
\ 'TEXTBLOCK': '',
|
||
|
\ 'SWALLOW': '',
|
||
|
\ 'GRADIENT': '',
|
||
|
\ 'GROUP': '',
|
||
|
\ 'BOX': '',
|
||
|
\ 'TABLE': '',
|
||
|
\ }
|
||
|
" part effects
|
||
|
let s:partEffects = {
|
||
|
\ 'NONE': '',
|
||
|
\ 'PLAIN': '',
|
||
|
\ 'OUTLINE': '',
|
||
|
\ 'SOFT_OUTLINE': '',
|
||
|
\ 'SHADOW': '',
|
||
|
\ 'SOFT_SHADOW': '',
|
||
|
\ 'OUTLINE_SHADOW': '',
|
||
|
\ 'OUTLINE_SOFT_SHADOW': '',
|
||
|
\ 'FAR_SHADOW': '',
|
||
|
\ 'FAR_SOFT_SHADOW': '',
|
||
|
\ 'GLOW': '',
|
||
|
\ }
|
||
|
" part ignore flags
|
||
|
let s:partIgnoreFlags = {
|
||
|
\ 'NONE': '',
|
||
|
\ 'ON_HOLD': '',
|
||
|
\ }
|
||
|
" part pointer mode
|
||
|
let s:partPointerMode = {
|
||
|
\ 'AUTOGRAB': '',
|
||
|
\ 'NOGRAB': '',
|
||
|
\ }
|
||
|
" part editable_mode
|
||
|
let s:partEditableMode = {
|
||
|
\ 'NONE': '',
|
||
|
\ 'PLAIN': '',
|
||
|
\ 'EDITABLE': '',
|
||
|
\ 'PASSWORD': '',
|
||
|
\ }
|
||
|
|
||
|
" aspect_preference types
|
||
|
let s:aspectPrefTypes = {
|
||
|
\ 'VERTICAL': '',
|
||
|
\ 'HORIZONTAL': '',
|
||
|
\ 'BOTH': '',
|
||
|
\ }
|
||
|
|
||
|
" program transition types
|
||
|
let s:transitionTypes = {
|
||
|
\ 'LINEAR': '0.0 - 1.0',
|
||
|
\ 'SINUSOIDAL': '0.0 - 1.0',
|
||
|
\ 'ACCELERATE': '0.0 - 1.0',
|
||
|
\ 'DECELERATE': '0.0 - 1.0',
|
||
|
\ }
|
||
|
" program action types
|
||
|
let s:actionTypes = {
|
||
|
\ 'STATE_SET': '"string" "0.0 - 1.0"',
|
||
|
\ 'ACTION_STOP': '',
|
||
|
\ 'SIGNAL_EMIT': '"string" "string"',
|
||
|
\ 'DRAG_VAL_SET': '"float" "float"',
|
||
|
\ 'DRAG_VAL_STEP': '"float" "float"',
|
||
|
\ 'DRAG_VAL_PAGE': '"float" "float"',
|
||
|
\ 'FOCUS_SET': '',
|
||
|
\ }
|
||
|
" box item types
|
||
|
let s:boxItemTypes = {
|
||
|
\ 'GROUP': '',
|
||
|
\ }
|
||
|
" box item aspect mode
|
||
|
let s:boxItemAspectMode = {
|
||
|
\ 'NONE': '',
|
||
|
\ 'NEITHER': '',
|
||
|
\ 'VERTICAL': '',
|
||
|
\ 'HORIZONTAL': '',
|
||
|
\ 'BOTH': '',
|
||
|
\ }
|
||
|
" box layout
|
||
|
let s:boxLayout = {
|
||
|
\ '"horizontal"': '',
|
||
|
\ '"horizontal_homogeneous"': '',
|
||
|
\ '"horizontal_max"': '',
|
||
|
\ '"horizontal_flow"': '',
|
||
|
\ '"vertical"': '',
|
||
|
\ '"vertical_homogeneous"': '',
|
||
|
\ '"vertical_max"': '',
|
||
|
\ '"vertical_flow"': '',
|
||
|
\ '"stack"': '',
|
||
|
\ }
|
||
|
" table homogeneous mode
|
||
|
let s:tableHomogeneousMode = {
|
||
|
\ 'NONE': '',
|
||
|
\ 'TABLE': '',
|
||
|
\ 'ITEM': '',
|
||
|
\ }
|
||
|
syntax/embryo.vim [[[1
|
||
|
195
|
||
|
" Vim syntax file
|
||
|
" Language: Embryo
|
||
|
" Maintainer: Viktor Kojouharov
|
||
|
" Last Change: 2006 10 06
|
||
|
|
||
|
" 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
|
||
|
|
||
|
" A bunch of useful keywords
|
||
|
syn keyword embryoConditional if else switch
|
||
|
syn keyword embryoRepeat while for do in
|
||
|
syn keyword embryoBranch break continue
|
||
|
syn keyword embryoOperator new
|
||
|
syn keyword embryoType Float State_Param Msg_Type enum
|
||
|
syn keyword embryoStatement return with native stock forward
|
||
|
syn keyword embryoLabel case default
|
||
|
syn keyword embryoReserved public
|
||
|
syn keyword embryoEdjeKey PART PROGRAM
|
||
|
|
||
|
syn keyword embryoTodo contained TODO FIXME XXX
|
||
|
|
||
|
" embryoCommentGroup allows adding matches for special things in comments
|
||
|
syn cluster embryoCommentGroup contains=embryoTodo
|
||
|
|
||
|
" String and Character constants
|
||
|
" Highlight special characters (those which have a backslash) differently
|
||
|
syn match embryoSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
|
||
|
syn region embryoString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=embryoSpecial
|
||
|
syn match embryoFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([diuoxXfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
|
||
|
syn match embryoFormat display "%%" contained
|
||
|
syn region embryoString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat
|
||
|
|
||
|
syn match embryoCharacter "L\='[^\\]'"
|
||
|
syn match embryoCharacter "L'[^']*'" contains=embryoSpecial
|
||
|
syn match embryoSpecialError "L\='\\[^'\"?\\abfnrtv]'"
|
||
|
syn match embryoSpecialCharacter "L\='\\['\"?\\abfnrtv]'"
|
||
|
syn match embryoSpecialCharacter display "L\='\\\o\{1,3}'"
|
||
|
syn match embryoSpecialCharacter display "'\\x\x\{1,2}'"
|
||
|
syn match embryoSpecialCharacter display "L'\\x\x\+'"
|
||
|
|
||
|
"when wanted, highlight trailing white space
|
||
|
if exists("embryo_space_errors")
|
||
|
if !exists("embryo_no_trail_space_error")
|
||
|
syn match embryoSpaceError display excludenl "\s\+$"
|
||
|
endif
|
||
|
if !exists("embryo_no_tab_space_error")
|
||
|
syn match embryoSpaceError display " \+\t"me=e-1
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
"catch errors caused by wrong parenthesis and brackets
|
||
|
syn cluster embryoParenGroup contains=embryoParenError,embryoIncluded,embryoSpecial,embryoCommentSkip,embryoCommentString,embryoComment2String,@embryoCommentGroup,embryoCommentStartErr,embryoUserCont,embryoUserLabel,embryoBitField,embryoCommentSkip,embryoOctalZero,embryoFormat,embryoNumber,embryoFloat,embryoOctal,embryoOctalError,embryoNumbersCom
|
||
|
if exists("embryo_no_bracket_error")
|
||
|
syn region embryoParen transparent start='(' end=')' contains=ALLBUT,@embryoParenGroup
|
||
|
syn match embryoParenError display ")"
|
||
|
syn match embryoErrInParen display contained "[{}]"
|
||
|
else
|
||
|
syn region embryoParen transparent start='(' end=')' contains=ALLBUT,@embryoParenGroup,embryoErrInBracket
|
||
|
syn match embryoParenError display "[\])]"
|
||
|
syn match embryoErrInParen display contained "[\]{}]"
|
||
|
syn region embryoBracket transparent start='\[' end=']' contains=ALLBUT,@embryoParenGroup,embryoErrInParen
|
||
|
syn match embryoErrInBracket display contained "[);{}]"
|
||
|
endif
|
||
|
|
||
|
syn region embryoBrace start='{' end='}' transparent keepend
|
||
|
"integer number, or floating point number without a dot and with "f".
|
||
|
syn case ignore
|
||
|
syn match embryoNumbers display transparent "\<\d\|\.\d" contains=embryoNumber,embryoFloat,embryoOctalError,embryoOctal
|
||
|
" Same, but without octal error (for comments)
|
||
|
syn match embryoNumbersCom display contained transparent "\<\d\|\.\d" contains=embryoNumber,embryoFloat,embryoOctal
|
||
|
syn match embryoNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
|
||
|
"hex number
|
||
|
syn match embryoNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
|
||
|
" Flag the first zero of an octal number as something special
|
||
|
syn match embryoOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=embryoOctalZero
|
||
|
syn match embryoOctalZero display contained "\<0"
|
||
|
syn match embryoFloat display contained "\d\+f"
|
||
|
"floating point number, with dot, optional exponent
|
||
|
syn match embryoFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
|
||
|
"floating point number, starting with a dot, optional exponent
|
||
|
syn match embryoFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
|
||
|
"floating point number, without dot, with exponent
|
||
|
syn match embryoFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
|
||
|
" flag an octal number with wrong digits
|
||
|
syn match embryoOctalError display contained "0\o*[89]\d*"
|
||
|
syn case match
|
||
|
|
||
|
if exists("embryo_comment_strings")
|
||
|
" A comment can contain embryoString, embryoCharacter and embryoNumber.
|
||
|
" But a "*/" inside a embryoString in a embryoComment DOES end the comment! So we
|
||
|
" need to use a special type of embryoString: embryoCommentString, 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 :-(
|
||
|
syntax match embryoCommentSkip contained "^\s*\*\($\|\s\+\)"
|
||
|
syntax region embryoCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=embryoSpecial,embryoCommentSkip
|
||
|
syntax region embryoComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=embryoSpecial
|
||
|
syntax region embryoCommentL start="//" skip="\\$" end="$" keepend contains=@embryoCommentGroup,embryoComment2String,embryoCharacter,embryoNumbersCom,embryoSpaceError
|
||
|
syntax region embryoComment matchgroup=embryoCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@embryoCommentGroup,embryoCommentStartErr,embryoCommentString,embryoCharacter,embryoNumbersCom,embryoSpaceError
|
||
|
else
|
||
|
syn region embryoCommentL start="//" skip="\\$" end="$" keepend contains=@embryoCommentGroup,embryoSpaceError
|
||
|
syn region embryoComment matchgroup=embryoCommentStart start="/\*" matchgroup=NONE end="\*/" contains=@embryoCommentGroup,embryoCommentStartErr,embryoSpaceError
|
||
|
endif
|
||
|
" keep a // comment separately, it terminates a preproc. conditional
|
||
|
syntax match embryoCommentError display "\*/"
|
||
|
syntax match embryoCommentStartErr display "/\*"me=e-1 contained
|
||
|
|
||
|
syn region embryoPreCondit start="^\s*#\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" end="//"me=s-1 contains=embryoComment,embryoCharacter,embryoParenError,embryoNumbers,embryoCommentError,embryoSpaceError
|
||
|
syn match embryoPreCondit display "^\s*#\s*\(else\|endif\)\>"
|
||
|
syn region embryoIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
|
||
|
syn match embryoIncluded display contained "<[^>]*>"
|
||
|
syn match embryoInclude display "^\s*#\s*include\>\s*["<]" contains=embryoIncluded
|
||
|
syn cluster embryoPreProcGroup contains=embryoPreCondit,embryoIncluded,embryoInclude,embryoDefine,embryoErrInParen,embryoErrInBracket,embryoCommentSkip,embryoCommentString,embryoComment2String,@embryoCommentGroup,embryoCommentStartErr,embryoParen,embryoBracket,embryoMulti,embryoUserLabel
|
||
|
syn cluster embryoAlphaNum contains=embryoSpecial,embryoOctalZero,embryoFormat,embryoNumber,embryoFloat,embryoOctal,embryoOctalError,embryoNumbersCom,embryoString
|
||
|
syn region embryoDefine start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 contains=ALLBUT,@embryoPreProcGroup
|
||
|
syn region embryoPreProc start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@embryoPreProcGroup
|
||
|
|
||
|
syn match embryoUserLabel display "\I\i*" contained
|
||
|
|
||
|
syn match embryoFunctionName "\h\w*\s*\%((\@=\)"
|
||
|
|
||
|
if exists("embryo_minlines")
|
||
|
let b:embryo_minlines = embryo_minlines
|
||
|
else
|
||
|
let b:embryo_minlines = 50 " #if 0 constructs can be long
|
||
|
endif
|
||
|
exec "syn sync ccomment embryoComment minlines=" . b:embryo_minlines
|
||
|
"syn sync fromstart
|
||
|
|
||
|
" 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_embryo_syn_inits")
|
||
|
if version < 508
|
||
|
let did_embryo_syn_inits = 1
|
||
|
command -nargs=+ HiLink hi link <args>
|
||
|
else
|
||
|
command -nargs=+ HiLink hi def link <args>
|
||
|
endif
|
||
|
|
||
|
HiLink embryoFormat embryoSpecial
|
||
|
HiLink embryoCommentL embryoComment
|
||
|
HiLink embryoCommentStart embryoComment
|
||
|
HiLink embryoLabel Label
|
||
|
HiLink embryoUserLabel Label
|
||
|
HiLink embryoConditional Conditional
|
||
|
HiLink embryoRepeat Repeat
|
||
|
HiLink embryoBranch Conditional
|
||
|
HiLink embryoReserved Keyword
|
||
|
HiLink embryoCharacter Character
|
||
|
HiLink embryoSpecialCharacter cSpecial
|
||
|
HiLink embryoNumber Number
|
||
|
HiLink embryoOctal Number
|
||
|
HiLink embryoOctalZero PreProc " link this to Error if you want
|
||
|
HiLink embryoFloat Float
|
||
|
HiLink embryoOctalError embryoError
|
||
|
HiLink embryoParenError embryoError
|
||
|
HiLink embryoErrInParen embryoError
|
||
|
HiLink embryoErrInBracket embryoError
|
||
|
HiLink embryoCommentError embryoError
|
||
|
HiLink embryoCommentStartErr embryoError
|
||
|
HiLink embryoSpaceError embryoError
|
||
|
HiLink embryoSpecialError embryoError
|
||
|
HiLink embryoOperator Operator
|
||
|
HiLink embryoStructure Structure
|
||
|
HiLink embryoEdjeKey Structure
|
||
|
HiLink embryoStorageClass StorageClass
|
||
|
HiLink embryoInclude Include
|
||
|
HiLink embryoPreProc PreProc
|
||
|
HiLink embryoDefine Macro
|
||
|
HiLink embryoIncluded embryoString
|
||
|
HiLink embryoError Error
|
||
|
HiLink embryoStatement Statement
|
||
|
HiLink embryoPreCondit PreCondit
|
||
|
HiLink embryoType Type
|
||
|
HiLink embryoConstant Constant
|
||
|
HiLink embryoCommentString embryoString
|
||
|
HiLink embryoComment2String embryoString
|
||
|
HiLink embryoCommentSkip embryoComment
|
||
|
HiLink embryoString String
|
||
|
HiLink embryoComment Comment
|
||
|
HiLink embryoSpecial SpecialChar
|
||
|
HiLink embryoTodo Todo
|
||
|
HiLink embryoFunctionName Function
|
||
|
|
||
|
delcommand HiLink
|
||
|
endif
|
||
|
|
||
|
let b:current_syntax = "embryo"
|
||
|
|
||
|
" vim: ts=8
|