parent
c25369f5c5
commit
97f35f5c0a
5 changed files with 1237 additions and 0 deletions
@ -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