Add syntax files for EDC format.
This commit is contained in:
parent
c25369f5c5
commit
97f35f5c0a
|
@ -0,0 +1,892 @@
|
|||
" 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 =~ 'select_mode:\s*'
|
||||
call edccomplete#AddKeyword(res, a:base, s:partSelectMode)
|
||||
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 == 'map'
|
||||
call edccomplete#AddLabel(res, line, a:base, s:mapLabel)
|
||||
call edccomplete#AddStatement(res, line, a:base, s:mapStatement)
|
||||
|
||||
elseif b:scontext == 'rotation'
|
||||
call edccomplete#AddLabel(res, line, a:base, s:rotationLabel)
|
||||
|
||||
elseif b:scontext == 'perspective'
|
||||
call edccomplete#AddLabel(res, line, a:base, s:perspectiveLabel)
|
||||
|
||||
elseif b:scontext == 'params'
|
||||
call edccomplete#AddLabel(res, line, a:base, s:paramsLabel)
|
||||
|
||||
elseif b:scontext == 'image'
|
||||
call edccomplete#AddLabel(res, line, a:base, s:imageLabel)
|
||||
if line =~ 'image:\s*".\{-}"'
|
||||
call edccomplete#AddKeyword(res, a:base, s:imageStorageMethod)
|
||||
elseif line =~ 'middle:\s*'
|
||||
call edccomplete#AddKeyword(res, a:base, s:imageMiddleTypes)
|
||||
elseif line =~ 'scale_hint:\s*'
|
||||
call edccomplete#AddKeyword(res, a:base, s:imageScaleHint)
|
||||
endif
|
||||
|
||||
elseif b:scontext == 'fill'
|
||||
call edccomplete#AddLabel(res, line, a:base, s:fillLabel)
|
||||
call edccomplete#AddStatement(res, line, a:base, s:fillStatement)
|
||||
if line =~ 'type:\s*'
|
||||
call edccomplete#AddKeyword(res, a:base, s:fillTypes)
|
||||
endif
|
||||
|
||||
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)
|
||||
if line =~ 'type:\s*'
|
||||
call edccomplete#AddKeyword(res, a:base, s:gradientTypes)
|
||||
endif
|
||||
|
||||
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 b:scontext == 'externals'
|
||||
call edccomplete#AddLabel(res, line, a:base, s:externalsLabel)
|
||||
|
||||
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': '"name"',
|
||||
\ 'type': 'keyword',
|
||||
\ 'effect': 'keyword',
|
||||
\ 'clip_to': '"part_name"',
|
||||
\ 'scale': '0-1',
|
||||
\ 'mouse_events': '0-1',
|
||||
\ 'repeat_events': '0-1',
|
||||
\ 'ignore_flags': 'keyword ...',
|
||||
\ 'pointer_mode': 'keyword',
|
||||
\ 'select_mode': 'keyword',
|
||||
\ 'precise_is_inside': '0-1',
|
||||
\ 'use_alternate_font_metrics': '0-1',
|
||||
\ 'image': '"filename" keyword',
|
||||
\ 'font': '"filename" "name"',
|
||||
\ 'entry_mode': 'keyword',
|
||||
\ 'multiline': '0-1 (TEXTBLOCK only)',
|
||||
\ 'source': '"group_name" (GROUP or TEXTBLOCK only)',
|
||||
\ 'source2': '"group_name" (TEXTBLOCK only)',
|
||||
\ 'source3': '"group_name" (TEXTBLOCK only)',
|
||||
\ 'source4': '"group_name" (TEXTBLOCK only)',
|
||||
\ 'source5': '"group_name" (TEXTBLOCK only)',
|
||||
\ 'source6': '"group_name" (TEXTBLOCK only)',
|
||||
\ }
|
||||
let s:partStatement = [
|
||||
\ 'dragable',
|
||||
\ 'images',
|
||||
\ 'fonts',
|
||||
\ 'description',
|
||||
\ 'styles',
|
||||
\ 'color_classes',
|
||||
\ 'program',
|
||||
\ 'programs',
|
||||
\ 'box',
|
||||
\ ]
|
||||
|
||||
" dragable
|
||||
let s:dragableLabel = {
|
||||
\ 'x': '0-1 int int',
|
||||
\ 'y': '0-1 int int',
|
||||
\ 'confine': '"part_name"',
|
||||
\ 'events': '"draggable_part_name"',
|
||||
\ }
|
||||
|
||||
" description
|
||||
let s:descriptionLabel = {
|
||||
\ 'state': '"name" index (float)',
|
||||
\ 'inherit': '"description" index (float)',
|
||||
\ 'visible': '0-1',
|
||||
\ 'align': 'x y (float)',
|
||||
\ 'fixed': 'width height (0-1)',
|
||||
\ 'min': 'width height (int)',
|
||||
\ 'max': 'width height (int)',
|
||||
\ 'step': 'width height (int)',
|
||||
\ 'aspect': 'min max (float)',
|
||||
\ 'aspect_preference': 'keyword',
|
||||
\ 'color_class': '"name"',
|
||||
\ 'color': '0-255 0-255 0-255 0-255',
|
||||
\ 'color2': '0-255 0-255 0-255 0-255',
|
||||
\ 'color3': '0-255 0-255 0-255 0-255',
|
||||
\ 'font': '"filename" "name"',
|
||||
\ }
|
||||
let s:descriptionStatement = [
|
||||
\ 'rel1',
|
||||
\ 'rel2',
|
||||
\ 'image',
|
||||
\ 'fill',
|
||||
\ 'text',
|
||||
\ 'gradient',
|
||||
\ 'images',
|
||||
\ 'fonts',
|
||||
\ 'styles',
|
||||
\ 'color_classes',
|
||||
\ 'program',
|
||||
\ 'programs',
|
||||
\ 'box',
|
||||
\ 'map',
|
||||
\ ]
|
||||
|
||||
" rel
|
||||
let s:relLabel = {
|
||||
\ 'relative': 'x y (float)',
|
||||
\ 'offset': 'x y (int)',
|
||||
\ 'to': '"part_name"',
|
||||
\ 'to_x': '"part_name"',
|
||||
\ 'to_y': '"part_name"',
|
||||
\ }
|
||||
" map
|
||||
let s:mapLabel = {
|
||||
\ 'on': '0-1',
|
||||
\ 'perspective': '"part_name"',
|
||||
\ 'light': '"part_name"',
|
||||
\ 'smooth': '0-1',
|
||||
\ 'pespective_on':'0-1',
|
||||
\ 'backface_cull':'0-1',
|
||||
\ 'alpha': '0-1',
|
||||
\ }
|
||||
let s:mapStatement = [
|
||||
\ 'rotation',
|
||||
\ ]
|
||||
|
||||
let s:rotationLabel = {
|
||||
\ 'center': '"part_name"',
|
||||
\ 'x': '"degrees (float)"',
|
||||
\ 'y': '"degrees (float)"',
|
||||
\ 'z': '"degrees (float)"',
|
||||
\ }
|
||||
|
||||
" params
|
||||
let s:paramsLabel = {
|
||||
\ 'int': '"name" int',
|
||||
\ 'double': '"name" double',
|
||||
\ 'string': '"name" "string"',
|
||||
\ }
|
||||
|
||||
" perspective
|
||||
let s:perspectiveLabel = {
|
||||
\ 'zplane': 'int',
|
||||
\ 'focal': 'int',
|
||||
\ }
|
||||
|
||||
|
||||
" image
|
||||
let s:imageLabel = {
|
||||
\ 'image': '"filename" keyword',
|
||||
\ 'normal': '"filename"',
|
||||
\ 'tween': '"filename"',
|
||||
\ 'border': 'left right top bottom (int)',
|
||||
\ 'middle': 'keyword',
|
||||
\ 'border_scale': '0-1',
|
||||
\ 'scale_hint': 'keyword',
|
||||
\ }
|
||||
|
||||
" fill
|
||||
let s:fillLabel = {
|
||||
\ 'smooth': '0-1',
|
||||
\ 'angle': '0-360 (GRADIENT)',
|
||||
\ 'spread': '0-1',
|
||||
\ 'type': 'keyword',
|
||||
\ }
|
||||
let s:fillStatement = [
|
||||
\ 'origin',
|
||||
\ 'size',
|
||||
\ ]
|
||||
" fill origin/size
|
||||
let s:fillInnerStatement = {
|
||||
\ 'relative': 'width height (float)',
|
||||
\ 'offset': 'x y (int)',
|
||||
\ }
|
||||
" fill types
|
||||
let s:fillTypes = {
|
||||
\ 'SCALE': '',
|
||||
\ 'TILE': '',
|
||||
\ }
|
||||
|
||||
" text
|
||||
let s:textLabel = {
|
||||
\ 'text': '"string"',
|
||||
\ 'font': '"font_name"',
|
||||
\ 'size': 'size (int)',
|
||||
\ 'text_class': '"class_name"',
|
||||
\ 'fit': 'x y (0-1)',
|
||||
\ 'min': 'x y (0-1)',
|
||||
\ 'max': 'x y (0-1)',
|
||||
\ 'align': 'x y (float)',
|
||||
\ 'source': '"part_name"',
|
||||
\ 'text_source': '"text_part_name"',
|
||||
\ 'style': '"style_name"',
|
||||
\ 'elipsis': '0.0-1.0',
|
||||
\ 'repch': '"string" (PASSWORD mode)',
|
||||
\ }
|
||||
let s:textStatement = [
|
||||
\ 'fonts',
|
||||
\ ]
|
||||
|
||||
" program
|
||||
let s:programLabel = {
|
||||
\ 'name': '"name"',
|
||||
\ 'signal': '"signal_name"',
|
||||
\ 'source': '"part_name"',
|
||||
\ 'action': 'keyword ...',
|
||||
\ 'transition': 'keyword time (float)',
|
||||
\ 'filter': '"part_name" "state_name"',
|
||||
\ 'in': 'from range (float)',
|
||||
\ 'target': '"part_name"',
|
||||
\ 'after': '"program_name"',
|
||||
\ }
|
||||
let s:programStatement = [
|
||||
\ 'script',
|
||||
\ 'lua_script',
|
||||
\ ]
|
||||
|
||||
|
||||
" programs
|
||||
let s:programsLabel = {
|
||||
\ 'image': '"filename" keyword',
|
||||
\ 'font': '"filename" "name"',
|
||||
\ }
|
||||
let s:programsStatement = [
|
||||
\ 'images',
|
||||
\ 'fonts',
|
||||
\ 'program',
|
||||
\ ]
|
||||
|
||||
" box and table
|
||||
let s:boxStatement = [
|
||||
\ 'items',
|
||||
\ ]
|
||||
let s:boxItemsStatement = [
|
||||
\ 'item',
|
||||
\ ]
|
||||
let s:boxItemLabel = {
|
||||
\ 'type': 'keyword',
|
||||
\ 'name': '"name"',
|
||||
\ 'source': '"group_name"',
|
||||
\ 'min': 'width height (int)',
|
||||
\ 'prefer': 'width height (int)',
|
||||
\ 'max': 'width height (int)',
|
||||
\ 'padding': 'left right top bottom (int)',
|
||||
\ 'align': 'x y (float)',
|
||||
\ 'weight': 'x y (float)',
|
||||
\ 'aspect': 'w h (float)',
|
||||
\ 'aspect_mode': 'keyword',
|
||||
\ 'options': '"extra options"',
|
||||
\ }
|
||||
let s:boxDescLabel = {
|
||||
\ 'layout': '"string" ["string"]',
|
||||
\ 'align': 'float float',
|
||||
\ 'padding': 'int int',
|
||||
\ }
|
||||
let s:tableItemLabel = {
|
||||
\ 'position': 'col row (int)',
|
||||
\ 'span': 'col row (int)',
|
||||
\ }
|
||||
let s:tableDescLabel = {
|
||||
\ 'homogeneous': 'keyword',
|
||||
\ 'align': 'float float',
|
||||
\ 'padding': 'int int',
|
||||
\ }
|
||||
|
||||
" group
|
||||
let s:groupLabel = {
|
||||
\ 'name': '"name"',
|
||||
\ 'alias': '"alias"',
|
||||
\ 'min': 'width height',
|
||||
\ 'max': 'width height',
|
||||
\ 'image': '"filename" keyword',
|
||||
\ 'font': '"filename" "name"',
|
||||
\ 'script_only': '0-1',
|
||||
\ }
|
||||
let s:groupStatement = [
|
||||
\ 'data',
|
||||
\ 'script',
|
||||
\ 'lua_script',
|
||||
\ 'parts',
|
||||
\ 'images',
|
||||
\ 'fonts',
|
||||
\ 'styles',
|
||||
\ 'color_classes',
|
||||
\ 'program',
|
||||
\ 'programs',
|
||||
\ 'externals',
|
||||
\ ]
|
||||
|
||||
" parts
|
||||
let s:partsStatement = [
|
||||
\ 'images',
|
||||
\ 'fonts',
|
||||
\ 'part',
|
||||
\ 'styles',
|
||||
\ 'color_classes',
|
||||
\ 'program',
|
||||
\ 'programs',
|
||||
\ ]
|
||||
let s:partsLabel = {
|
||||
\ 'image': '"filename" keyword',
|
||||
\ 'font': '"filename" "name"',
|
||||
\ }
|
||||
|
||||
" data
|
||||
let s:dataLabel = {
|
||||
\ 'item': '"key" "value"',
|
||||
\ 'file': '"key" "filename"',
|
||||
\ }
|
||||
|
||||
" fonts
|
||||
let s:fontsLabel = {
|
||||
\ 'font': '"filename" "name"',
|
||||
\ }
|
||||
|
||||
"images
|
||||
let s:imagesLabel = {
|
||||
\ 'image': '"filename" keyword',
|
||||
\ }
|
||||
|
||||
"collections
|
||||
let s:collectionsStatement = [
|
||||
\ 'group',
|
||||
\ 'images',
|
||||
\ 'fonts',
|
||||
\ 'styles',
|
||||
\ 'color_classes',
|
||||
\ 'externals',
|
||||
\ ]
|
||||
let s:collectionsLabel = {
|
||||
\ 'image': '"filename" keyword',
|
||||
\ 'font': '"filename" "name"',
|
||||
\ }
|
||||
|
||||
" externals
|
||||
let s:externalsLabel = {
|
||||
\ 'external': '"name"',
|
||||
\ }
|
||||
|
||||
" spectra
|
||||
let s:spectraStatement = [
|
||||
\ 'spectrum',
|
||||
\ ]
|
||||
" spectrum
|
||||
let s:spectrumLabel = {
|
||||
\ 'name': '"name"',
|
||||
\ 'color': '0-255 0-255 0-255 0-255',
|
||||
\ }
|
||||
" gradient
|
||||
let s:gradientLabel = {
|
||||
\ 'type': '"keyword"',
|
||||
\ 'spectrum': '"spectrum_name"',
|
||||
\ }
|
||||
let s:gradientStatement = [
|
||||
\ 'rel1',
|
||||
\ 'rel2',
|
||||
\ ]
|
||||
" gradient types
|
||||
let s:gradientTypes = {
|
||||
\ '"linear"': '',
|
||||
\ '"radial"': '',
|
||||
\ '"rectangular"': '',
|
||||
\ '"angular"': '',
|
||||
\ '"sinusoidal"': '',
|
||||
\ }
|
||||
|
||||
" styles
|
||||
let s:stylesStatement = [
|
||||
\ 'style',
|
||||
\ ]
|
||||
" style
|
||||
let s:styleLabel = {
|
||||
\ 'name': '"name"',
|
||||
\ 'base': '".. default style properties .."',
|
||||
\ 'tag': '"tagname" "style properties"',
|
||||
\ }
|
||||
|
||||
" color_classes
|
||||
let s:color_classesStatement = [
|
||||
\ 'color_class',
|
||||
\ ]
|
||||
" color_class
|
||||
let s:color_classLabel = {
|
||||
\ 'name': '"name"',
|
||||
\ 'color': '0-255 0-255 0-255 0-255',
|
||||
\ 'color2': '0-255 0-255 0-255 0-255',
|
||||
\ 'color3': '0-255 0-255 0-255 0-255',
|
||||
\ }
|
||||
|
||||
" toplevel
|
||||
let s:topStatement = [
|
||||
\ 'fonts',
|
||||
\ 'images',
|
||||
\ 'data',
|
||||
\ 'collections',
|
||||
\ 'spectra',
|
||||
\ 'styles',
|
||||
\ 'color_classes',
|
||||
\ 'externals',
|
||||
\ ]
|
||||
|
||||
" images image storage method
|
||||
let s:imageStorageMethod = {
|
||||
\ 'COMP': '',
|
||||
\ 'RAW': '',
|
||||
\ 'USER': '',
|
||||
\ 'LOSSY': '0-100',
|
||||
\ }
|
||||
" image middle types
|
||||
let s:imageMiddleTypes = {
|
||||
\ '0': '',
|
||||
\ '1': '',
|
||||
\ 'NONE': '',
|
||||
\ 'DEFAULT': '',
|
||||
\ 'SOLID': '',
|
||||
\ }
|
||||
" image scale hint
|
||||
let s:imageScaleHint = {
|
||||
\ '0': '',
|
||||
\ 'NONE': '',
|
||||
\ 'DYNAMIC': '',
|
||||
\ 'STATIC': '',
|
||||
\ }
|
||||
|
||||
" part types
|
||||
let s:partTypes = {
|
||||
\ 'TEXT': '',
|
||||
\ 'IMAGE': '',
|
||||
\ 'RECT': '',
|
||||
\ 'TEXTBLOCK': '',
|
||||
\ 'SWALLOW': '',
|
||||
\ 'GRADIENT': '',
|
||||
\ 'GROUP': '',
|
||||
\ 'BOX': '',
|
||||
\ 'TABLE': '',
|
||||
\ 'EXTERNAL': '',
|
||||
\ }
|
||||
" 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 select_mode
|
||||
let s:partSelectMode = {
|
||||
\ 'DEFAULT': '',
|
||||
\ 'EXPLICIT': '',
|
||||
\ }
|
||||
" 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': '',
|
||||
\ }
|
|
@ -0,0 +1,3 @@
|
|||
au BufRead,BufNewFile *.edc set filetype=edc
|
||||
au BufRead,BufNewFile *.sma set filetype=embryo
|
||||
au BufRead,BufNewFile *.embryo set filetype=embryo
|
|
@ -0,0 +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
|
||||
|
|
@ -0,0 +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
|
|
@ -0,0 +1,235 @@
|
|||
" 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 file params externals contained
|
||||
syn keyword edcBlock map rotation perspective script lua_script 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 z 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 border_scale scale_hint color color2 color3 font size contained
|
||||
syn keyword edcLabel signal action transition in filter 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 edcLabel on perspective light perspective_on contained
|
||||
syn keyword edcLabel backface_cull alpha center focus zplane contained
|
||||
syn keyword edcLabel int double string external script_only 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
|
||||
|
||||
syn include @edcLua syntax/lua.vim
|
||||
unlet b:current_syntax
|
||||
syn region edcLuaScript matchgroup=edcLuaScriptTag start="\<lua_script\_s*{" end="}" contains=@edcLua,edcLuaScriptTag
|
||||
syn keyword edcLuaScriptTag 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 edcLuaScriptTag 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
|
Loading…
Reference in New Issue