FEKO syntex for VIM
FEKO 的 VIM 语法高亮
2011-04-15
这段时间用 FEKO 建了许多模型,例如上面这个 Koch 曲线的分形天线模型。 由于 FEKO Editor 本身不帯语法高亮,于是在 vim 中高亮了关键词,并且做了一些辅助功能。
autocmd BufNewFile,BufRead *.pre set filetype=feko
autocmd filetype feko call Feko()

function! Feko()
	set syntax=feko
	" if exists("b:current_syntax")
	  " finish
	" endif

	syn case ignore
	syn match	fekoComment '^\*\*.*$'
	syn match	fekoNumber '\<[+-]\?\d\+\(\.\d\+\)\?\([eE][+-]\?\d\+\)\?\|\<[+-]\?\.\(\d\+\)\?\([eE][+-]\?\d\+\)\?'
  	syn region	fekoString start=+L\="+ end=+"+
	syn match	fekoError '^\s\+.*$'

	syn match	fekoMacro	'^!!\s*\w\S\+'
	syn match	fekoCard	'^\w\S'
	syn keyword	fekoFunction	then sin cos tan cot arcsin arccos
				\ atan2 arccot sinh cosh tanh besj besy besi
				\ besk sqrt log ln exp abs deg rad step ceil
				\ floor max min fmod x_coord y_coord z_coord
				\ fileread and or not defined
	syn match	fekoCompare	'[<>]=\?\|=\|<>'
	syn match	fekoVar	'#\w\+'
	syn match	fekoConstant	'\#\(pi\|eps0\|mu0\|c0\|zf0\|true\|false\)'
	hi def link fekoComment		Comment
	hi def link fekoString		String
	hi def link fekoError		Error
	hi def link fekoNumber		Number
	hi def link fekoMacro		Macro
	hi def link fekoCard		Statement
	hi def link fekoFunction	Operator
	hi def link fekoCompare		Operator
	hi def link fekoConstant	Constant
	hi def link fekoVar		Identifier

	let b:current_syntax = "feko"

	" setlocal makeprg=runfeko\ %\ --run-from-gui
	setlocal makeprg=runfeko\ %

	let b:current_compiler = "feko"
	autocmd filetype qf call HighlightFekoLog()
endfunction

function! HighlightFekoLog ()
       syn case ignore
       syn match       fekoLogError '^\W*error.*$'
       syn match       fekoLogWarning '^\W*WARNING.*$'
       syn match       fekoLogNote '^\W*NOTE.*$'
       syn match       fekoLogPrint '^\W*PRINT.*$'

       hi def link fekoLogError        Error
       hi def link fekoLogWarning      Macro
       hi def link fekoLogNote         Comment
       hi def link fekoLogPrint        Comment
endfunction