forked from aniani/vim
		
	
		
			
	
	
		
			459 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			459 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language: Kuka Robot Language | ||
|  | " Maintainer: Patrick Meiser-Knosowski <knosowski@graeffrobotics.de> | ||
|  | " Version: 3.0.0 | ||
|  | " Last Change: 18. Apr 2022 | ||
|  | " Credits: Thanks for contributions to this to Michael Jagusch | ||
|  | "          Thanks for beta testing to Thomas Baginski | ||
|  | " | ||
|  | " Note to self: | ||
|  | " for testing perfomance | ||
|  | "     open a 1000 lines file. | ||
|  | "     :syntime on | ||
|  | "     G | ||
|  | "     hold down CTRL-U until reaching top | ||
|  | "     :syntime report | ||
|  | 
 | ||
|  | " Init {{{ | ||
|  | if exists("b:current_syntax") | ||
|  |   finish | ||
|  | endif | ||
|  | 
 | ||
|  | let s:keepcpo = &cpo | ||
|  | set cpo&vim | ||
|  | 
 | ||
|  | " if colorscheme is tortus(less)? krlGroupName defaults to 1 | ||
|  | if get(g:, 'colors_name', " ") =~ '\<tortus' | ||
|  |       \&& !exists("g:krlGroupName") | ||
|  |   let g:krlGroupName=1  | ||
|  | endif | ||
|  | " krlGroupName defaults to 0 if it's not initialized yet or 0 | ||
|  | if !get(g:, "krlGroupName", 0) | ||
|  |   let g:krlGroupName = 0  | ||
|  | endif | ||
|  | 
 | ||
|  | " krl does ignore case | ||
|  | syn case ignore | ||
|  | " take #, $ and & into keyword (syntax only) | ||
|  | syn iskeyword @,48-57,_,192-255,#,$,& | ||
|  | " spell checking | ||
|  | syn spell notoplevel | ||
|  | " }}} init | ||
|  | 
 | ||
|  | " Comment and Folding {{{  | ||
|  | 
 | ||
|  | " Special Comment | ||
|  | 
 | ||
|  | " TODO Comment | ||
|  | syn keyword krlTodo contained TODO FIXME XXX | ||
|  | highlight default link krlTodo Todo | ||
|  | 
 | ||
|  | " Debug Comment | ||
|  | syn keyword krlDebug contained DEBUG | ||
|  | highlight default link krlDebug Debug | ||
|  | 
 | ||
|  | " Comment | ||
|  | " none move fold comment until second ; | ||
|  | syn match krlFoldComment /\c\v^\s*;\s*%(end)?fold>[^;]*/ containedin=krlFold contains=krlSingleQuoteString,krlInteger,krlFloat,krlMovement,krlDelimiter,krlBoolean | ||
|  | highlight default link krlFoldComment Comment | ||
|  | 
 | ||
|  | " move fold comment until second ; | ||
|  | syn match krlMoveFoldComment /\c\v^\s*;\s*fold>[^;]*<s?%(ptp|lin|circ|spl)(_rel)?>[^;]*/ containedin=krlFold contains=krlInteger,krlFloat,krlMovement,krlDelimiter | ||
|  | highlight default link krlMoveFoldComment Comment | ||
|  | 
 | ||
|  | " things to highlight in a fold line | ||
|  | syn keyword krlFoldHighlights CONT IN SYN OUT containedin=krlFoldComment | ||
|  | syn match krlFoldHighlights /\c\v<(M|F|E|A|t|i|bin|binin|UP|SPSMAKRO)\d+>/ containedin=krlFoldComment | ||
|  | if g:krlGroupName | ||
|  |   highlight default link krlFoldHighlights Sysvars | ||
|  | else | ||
|  |   " default color for Fold Highlights | ||
|  | endif | ||
|  | syn keyword krlVkrcFoldConstants EIN AUS containedin=krlFoldComment | ||
|  | highlight default link krlVkrcFoldConstants Boolean | ||
|  | 
 | ||
|  | " Comment without Fold, also includes endfold lines and fold line part after second ; | ||
|  | syn match krlComment /\c\v;\s*%(<%(end)?fold>)@!.*$/ containedin=krlFold contains=krlTodo,krlDebug,@Spell | ||
|  | " Commented out Fold line: "; ;FOLD PTP..." | ||
|  | syn match krlComment /\c\v^\s*;\s*;.*$/ contains=krlTodo,krlDebug | ||
|  | highlight default link krlComment Comment | ||
|  | 
 | ||
|  | if has("conceal") && get(g:, 'krlConcealFoldTail', 1) | ||
|  |   syn match krlConcealFoldTail /\c\v(^\s*;\s*fold[^;]*)@250<=;%(--|\s*<fold>|\s*<endfold>)@!.*$/ transparent containedin=krlComment conceal cchar=* | ||
|  | endif | ||
|  | " }}} Comment and Folding  | ||
|  | 
 | ||
|  | " Header {{{ | ||
|  | syn match krlHeader /&\a\w*/ | ||
|  | highlight default link krlHeader PreProc | ||
|  | " }}} Header | ||
|  | 
 | ||
|  | " Operator {{{ | ||
|  | " Boolean operator | ||
|  | syn keyword krlBoolOperator and or exor not b_and b_or b_exor b_not | ||
|  | highlight default link krlBoolOperator Operator | ||
|  | " Arithmetic operator | ||
|  | syn match krlArithOperator /[+-]/ containedin=krlFloat | ||
|  | syn match krlArithOperator /[*/]/ | ||
|  | highlight default link krlArithOperator Operator | ||
|  | " Compare operator | ||
|  | syn match krlCompOperator /[<>=]/ | ||
|  | highlight default link krlCompOperator Operator | ||
|  | " Geometric operator | ||
|  | " Do not move the : operator | ||
|  | " Must be present befor krlParamdef | ||
|  | syn match krlGeomOperator /[:]/  | ||
|  | " syn match krlGeomOperator /[:]/ containedin=krlLabel,krlParamdef | ||
|  | highlight default link krlGeomOperator Operator | ||
|  | " }}} Operator | ||
|  | 
 | ||
|  | " Type, StorageClass and Typedef {{{ | ||
|  | " Simple data types | ||
|  | syn keyword krlType bool char real int containedin=krlAnyType | ||
|  | " External program and function | ||
|  | syn keyword krlType ext extfct extfctp extp containedin=krlAnyType | ||
|  | " Communication | ||
|  | syn keyword krlType signal channel containedin=krlAnyType | ||
|  | highlight default link krlType Type | ||
|  | " StorageClass | ||
|  | syn keyword krlStorageClass decl global const struc enum | ||
|  | highlight default link krlStorageClass StorageClass | ||
|  | " .dat file public | ||
|  | syn keyword krlDatStorageClass public | ||
|  | highlight default link krlDatStorageClass StorageClass | ||
|  | " Parameter StorageClass | ||
|  | " Do not move the :in/:out | ||
|  | " Must be present after krlGeomOperator | ||
|  | syn match krlParamdef /[:]\s*in\>/ | ||
|  | syn match krlParamdef /[:]\s*out\>/ | ||
|  | highlight default link krlParamdef StorageClass | ||
|  | " Not a typedef but I like to have those highlighted | ||
|  | " different then types, structures or strorage classes | ||
|  | syn keyword krlTypedef DEF DEFFCT ENDFCT DEFDAT ENDDAT | ||
|  | syn match krlTypedef /^\s*END\>/ | ||
|  | highlight default link krlTypedef Typedef | ||
|  | " }}} Type, StorageClass and Typedef | ||
|  | 
 | ||
|  | " Delimiter {{{ | ||
|  | syn match krlDelimiter /[\[\](),\\]/ | ||
|  | highlight default link krlDelimiter Delimiter | ||
|  | " }}} Delimiter | ||
|  | 
 | ||
|  | " Constant values {{{ | ||
|  | " Boolean | ||
|  | syn keyword krlBoolean true false containedin=krlStructVal | ||
|  | highlight default link krlBoolean Boolean | ||
|  | " Binary integer | ||
|  | syn match krlBinaryInt /'b[01]\+'/ containedin=krlStructVal | ||
|  | highlight default link krlBinaryInt Number | ||
|  | " Hexadecimal integer | ||
|  | syn match krlHexInt /'h[0-9a-fA-F]\+'/ containedin=krlStructVal | ||
|  | highlight default link krlHexInt Number | ||
|  | " Integer | ||
|  | syn match krlInteger /\W\@1<=[+-]\?\d\+/ containedin=krlStructVal,krlFloat contains=krlArithOperator | ||
|  | highlight default link krlInteger Number | ||
|  | " Float | ||
|  | syn match krlFloat /\v\W@1<=[+-]?\d+\.?\d*%(\s*[eE][+-]?\d+)?/ containedin=krlStructVal | ||
|  | highlight default link krlFloat Float | ||
|  | " String | ||
|  | syn region krlString start=/"/ end=/"/ oneline containedin=krlStructVal contains=@Spell | ||
|  | highlight default link krlString String | ||
|  | syn match krlSpecialChar /[|]/ containedin=krlString | ||
|  | highlight default link krlSpecialChar SpecialChar | ||
|  | " String within a fold line | ||
|  | syn region krlSingleQuoteString start=/'/ end=/'/ oneline contained contains=@Spell | ||
|  | highlight default link krlSingleQuoteString String | ||
|  | " Enum | ||
|  | syn match krlEnumVal /#\s*\a\w*/ containedin=krlStructVal | ||
|  | highlight default link krlEnumVal Constant | ||
|  | " }}} Constant values | ||
|  | 
 | ||
|  | " Predefined Structure and Enum {{{ | ||
|  | " Predefined structures and enums found in | ||
|  | " /r1/mada/$*.dat, /r1/steu/$*.dat and | ||
|  | " /r1/system/$config.dat as well as | ||
|  | " basisTech, gripperTech and spotTech | ||
|  | " | ||
|  | " Predefined data types found in krc1 | ||
|  | syn keyword krlStructure servopara keymove powermodul trace techangle tech techfct techcps techfctctrl axis_inc axis_cal date display_var pro_ip con bus  | ||
|  | syn keyword krlEnum ident_state sig_state move_state async_state emt_mode boxmode msg_prm_typ msg_typ cmd_stat asys trace_state trace_mode direction techsys techgeoref techclass techmode hpu_key_val pro_state eax transsys mode_move cosys device rotsys emstop cause_t  | ||
|  | " | ||
|  | " Predefined data types found in kss functions | ||
|  | syn keyword krlEnum ediagstate rdc_fs_state ret_c_psync_e var_type cancel_psync_e sys_vars  | ||
|  | syn keyword krlStructure siginf rw_rdc_file rw_mam_file diagpar_t error_t stopmess case_sense_t msgbuf_t e3pos e3axis diagopt_t  | ||
|  | " | ||
|  | " Predefined structures for movement | ||
|  | syn keyword krlStructure frame e6pos pos e6axis axis | ||
|  | syn keyword krlStructure fdat ldat pdat | ||
|  | syn keyword krlStructure load inertia | ||
|  | " | ||
|  | " Predefined structures for shapes | ||
|  | syn keyword krlStructure axbox cylinder box | ||
|  | " | ||
|  | " Predefined structures and enums found in /r1/mada/$machine.dat | ||
|  | syn keyword krlStructure cp fra acc_car jerk_struc dhart spin trpspin ex_kin et_ax maxtool | ||
|  | syn keyword krlEnum individual_mames supply_voltage kinclass main_axis wrist_axis sw_onoff | ||
|  | " | ||
|  | " Predefined structures and enums found in /r1/mada/$robcor.dat | ||
|  | " syn keyword krlStructure | ||
|  | syn keyword krlEnum adap_acc model_type control_parameter eko_mode | ||
|  | " | ||
|  | " Predefined structures and enums found in /steu/mada/$custom.dat | ||
|  | syn keyword krlStructure pro_io_t ser ext_mod_t coop_krc ws_config bin_type coop_update_t ldc_reaction | ||
|  | syn keyword krlEnum axis_of_coordinates spline_para_variant target_status cp_vel_type cp_statmon | ||
|  | " | ||
|  | " Predefined structures and enums found in /steu/mada/$machine.dat | ||
|  | syn keyword krlStructure emstop_path boxstatesafein boxstatesafeout | ||
|  | syn keyword krlEnum digincode | ||
|  | " | ||
|  | " Predefined structures and enums found in /steu/mada/$option.dat | ||
|  | syn keyword krlStructure msg_t | ||
|  | " syn keyword krlEnum | ||
|  | " | ||
|  | " Predefined structures and enums found in /r1/system/$config.dat | ||
|  | " BasisTech | ||
|  | syn keyword krlStructure dig_out_type ctrl_in_t ctrl_out_t fct_out_t fct_in_t odat basis_sugg_t out_sugg_t md_state machine_def_t machine_tool_t machine_frame_t trigger_para constvel_para condstop_para adat tm_sugg_t tqm_tqdat_t sps_prog_type | ||
|  | syn keyword krlEnum bas_command out_modetype ipo_m_t apo_mode_t funct_type p00_command timer_actiontype | ||
|  | " | ||
|  | " GripperTech | ||
|  | syn keyword krlStructure grp_typ grp_types grp_sugg_t | ||
|  | syn keyword krlEnum on_off_typ apo_typ | ||
|  | " | ||
|  | " SpotTech | ||
|  | syn keyword krlStructure spot_type spot_sugg_t | ||
|  | syn keyword krlEnum s_command s_pair_slct command_retr | ||
|  | " | ||
|  | " VW | ||
|  | syn keyword krlStructure vw_mpara_typ zangentyp zangenbedingung ibszangentyp last_ibs_typ verr_typ verrcheck_t t_fb_state kollisionsdaten state_t modus_t | ||
|  | syn keyword krlEnum synctype dir_typ subtype ari_typ bool_typ vw_command ibgn_command vw_user_cmd move_types adv_t_type bas_type ibs_mode_typ vw_user_cmd pro_mode mode_op | ||
|  | " | ||
|  | " ProgCoop | ||
|  | syn keyword krlStructure ydat | ||
|  | " syn keyword krlEnum | ||
|  | " | ||
|  | " bas.src | ||
|  | syn keyword krlStructure cont | ||
|  | syn keyword krlEnum esys ipo_mode circ_mode circ_type ori_type var_state | ||
|  | " | ||
|  | " MsgLib.src | ||
|  | syn keyword krlStructure KrlMsg_T KrlMsgParType_T KrlMsgPar_T KrlMsgOpt_T KrlMsgDlgSK_T | ||
|  | syn keyword krlEnum EKrlMsgType | ||
|  | " | ||
|  | highlight default link krlStructure Structure | ||
|  | highlight default link krlEnum Structure | ||
|  | " }}} Predefined Structure and Enum | ||
|  | 
 | ||
|  | " System variable {{{ | ||
|  | syn match krlSysvars /\<\$\a[a-zA-Z0-9_.]*/ | ||
|  | if g:krlGroupName | ||
|  |   highlight default link krlSysvars Sysvars | ||
|  | else | ||
|  |   " default color for Sysvars | ||
|  | endif | ||
|  | " }}} System variable | ||
|  | 
 | ||
|  | " Statements, keywords et al {{{ | ||
|  | " continue | ||
|  | syn keyword krlContinue continue | ||
|  | if g:krlGroupName | ||
|  |   highlight default link krlContinue Continue | ||
|  | else | ||
|  |   highlight default link krlContinue Statement | ||
|  | endif | ||
|  | " interrupt  | ||
|  | syn match krlStatement /\v\c%(<global>\s+)?<INTERRUPT>%(\s+<decl>)?/ contains=krlStorageClass | ||
|  | " keywords | ||
|  | syn keyword krlStatement wait on off enable disable stop trigger with when distance onstart delay do prio import is minimum maximum confirm on_error_proceed | ||
|  | syn match krlStatement /\v\c%(<wait\s+)@7<=<sec>/ | ||
|  | syn match krlStatement /\v\c%(<when\s+)@7<=<path>/ | ||
|  | highlight default link krlStatement Statement | ||
|  | " Conditional | ||
|  | syn keyword krlConditional if then else endif switch case default endswitch skip endskip | ||
|  | highlight default link krlConditional Conditional | ||
|  | " Repeat | ||
|  | syn keyword krlRepeat for to step endfor while endwhile repeat until loop endloop exit | ||
|  | highlight default link krlRepeat Repeat | ||
|  | " Label | ||
|  | syn keyword krlLabel goto | ||
|  | syn match krlLabel /^\s*\w\+:\ze\s*\%(;.*\)\?$/ | ||
|  | highlight default link krlLabel Label | ||
|  | " Keyword | ||
|  | syn keyword krlKeyword anin anout digin | ||
|  | highlight default link krlKeyword Keyword | ||
|  | " Exception | ||
|  | syn keyword krlException return resume halt | ||
|  | highlight default link krlException Exception | ||
|  | " }}} Statements, keywords et al | ||
|  | 
 | ||
|  | " special keywords for movement commands {{{ | ||
|  | syn keyword krlMovement PTP PTP_REL LIN LIN_REL CIRC CIRC_REL SPL SPL_REL SPTP SPTP_REL SLIN SLIN_REL SCIRC SCIRC_REL | ||
|  | syn keyword krlMovement ASYPTP ASYCONT ASYSTOP ASYCANCEL MOVE_EMI | ||
|  | syn match krlMovement /\v\c^\s*<BRAKE(\s+F)?>/ | ||
|  | if g:krlGroupName | ||
|  |   highlight default link krlMovement Movement | ||
|  | else | ||
|  |   highlight default link krlMovement Special | ||
|  | endif | ||
|  | " movement modifiers | ||
|  | syn match krlMoveBlockInst /\c\v^\s*TIME_BLOCK\s+(START|PART|END)/ | ||
|  | syn match krlMoveBlockInst /\c\v^\s*CONST_VEL\s+(START|END)/ | ||
|  | syn keyword krlMoveBlockInst ptp_spline spline endspline | ||
|  | highlight default link krlMoveBlockInst Statement | ||
|  | syn keyword krlMoveMod ca c_ptp c_dis c_vel c_ori c_spl | ||
|  | if g:krlGroupName | ||
|  |   highlight default link krlMoveMod Movement | ||
|  | else | ||
|  |   highlight default link krlMoveMod Special | ||
|  | endif | ||
|  | " }}} special keywords for movement commands | ||
|  | 
 | ||
|  | " Structure value {{{ | ||
|  | " avoid coloring structure component names | ||
|  | syn match krlNames /\.[a-zA-Z_][.a-zA-Z0-9_$]*/ | ||
|  | syn match krlNames contained /[a-zA-Z_][.a-zA-Z0-9_$]*/ | ||
|  | " highlight default link krlNames None | ||
|  | " Structure value | ||
|  | syn region krlStructVal start=/{/ end=/}/ oneline containedin=krlStructVal contains=krlNames | ||
|  | highlight default link krlStructVal Delimiter | ||
|  | " }}} Structure value | ||
|  | 
 | ||
|  | " BuildInFunction {{{ | ||
|  | syn keyword krlBuildInFunction contained Pulse | ||
|  | syn keyword krlBuildInFunction contained m_comment | ||
|  | syn keyword krlBuildInFunction contained is_key_pressed  | ||
|  | syn keyword krlBuildInFunction contained set_opt_filter  | ||
|  | syn keyword krlBuildInFunction contained timer_limit  | ||
|  | syn keyword krlBuildInFunction contained tool_adj  | ||
|  | syn keyword krlBuildInFunction contained FRand  | ||
|  | syn keyword krlBuildInFunction contained ExecFunc eb_test EB EK EO LK mbx_rec  | ||
|  | " safe robot | ||
|  | syn keyword krlbuildinfunction contained get_AxesMask get_BrakeTest_Time | ||
|  | " math | ||
|  | syn keyword krlBuildInFunction contained Abs Sin Cos Acos Tan Atan Atan2 Sqrt | ||
|  | syn keyword krlBuildInFunction contained Forward Inverse inv_pos | ||
|  | " cFoo sFoo | ||
|  | syn keyword krlBuildInFunction contained cClose cOpen cRead cWrite sRead sWrite  | ||
|  | " string | ||
|  | syn keyword krlBuildInFunction contained StrToBool StrToInt StrToReal StrToString StrToFrame StrToPos StrToE3Pos StrToE6Pos StrToAxis StrToE3Axis StrToE6Axis  | ||
|  | syn keyword krlBuildInFunction contained StrAdd StrClear StrCopy StrComp StrFind StrLen StrDeclLen StrToBool StrToInt StrToReal StrToString | ||
|  | " diag | ||
|  | syn keyword krlBuildInFunction contained diag_start diag_stop get_DiagState  | ||
|  | " rdc mam pid | ||
|  | syn keyword krlBuildInFunction contained CheckPidOnRdc check_mam_on_rdc get_rdc_fs_state  | ||
|  | syn keyword krlBuildInFunction contained set_mam_on_hd copy_mam_hd_to_rdc copy_mam_rdc_to_hd  | ||
|  | syn keyword krlBuildInFunction contained PidToHd PidToRdc  | ||
|  | syn keyword krlBuildInFunction contained cal_to_rdc rdc_file_to_hd  | ||
|  | syn keyword krlBuildInFunction contained delete_pid_on_rdc delete_rdc_content  | ||
|  | syn keyword krlBuildInFunction contained create_rdc_archive restore_rdc_archive  | ||
|  | " ioctl | ||
|  | syn keyword krlBuildInFunction contained IOCtl cIOCtl  | ||
|  | syn keyword krlBuildInFunction contained WSpaceGive WSpaceTake  | ||
|  | " sync | ||
|  | syn keyword krlBuildInFunction contained Sync SyncCmd CancelProgSync  | ||
|  | " remote | ||
|  | syn keyword krlBuildInFunction contained RemoteCmd RemoteRead  | ||
|  | " msg/dlg | ||
|  | syn keyword krlBuildInFunction contained IsMessageSet clear_KrlMsg get_MsgBuffer exists_KrlDlg exists_KrlMsg set_KrlDlg set_KrlDlgAnswer set_KrlMsg  | ||
|  | " robvers | ||
|  | syn keyword krlBuildInFunction contained maximize_UsedxRobvers set_UsedxRobvers  | ||
|  | " md_foo | ||
|  | syn keyword krlBuildInFunction contained md_Cmd md_GetState md_SetState md_Asgn  | ||
|  | " emi | ||
|  | syn keyword krlBuildInFunction contained emi_ActPos emi_EndPos emi_StartPos emi_RecState emi_RecName  | ||
|  | " var | ||
|  | syn keyword krlBuildInFunction contained cast_from cast_to | ||
|  | syn keyword krlBuildInFunction contained GetVarsize GetCycDef get_sig_inf get_decl_place VarType VarState  | ||
|  | " sys | ||
|  | syn keyword krlBuildInFunction contained GetSysState get_system_data set_system_data set_system_data_delayed  | ||
|  | " err | ||
|  | syn keyword krlBuildInFunction contained err_clear err_raise | ||
|  | " motion | ||
|  | syn keyword krlBuildInFunction contained delete_backward_buffer rob_stop rob_stop_release set_brake_delay suppress_repositioning VectorMoveOn VectorMoveOff | ||
|  | " torque | ||
|  | syn keyword krlBuildInFunction contained set_torque_limits reset_torque_limits | ||
|  | " krc1 | ||
|  | syn keyword krlBuildInFunction contained cLcopy cCurpos cNew cClear cRelease cKey | ||
|  | if g:krlGroupName | ||
|  |   highlight default link krlBuildInFunction BuildInFunction | ||
|  | else | ||
|  |   highlight default link krlBuildInFunction Function | ||
|  | endif | ||
|  | " }}} BuildInFunction | ||
|  | 
 | ||
|  | " Function {{{ | ||
|  | syn match krlFunction /[a-zA-Z_]\w* *(/me=e-1 contains=krlBuildInFunction | ||
|  | highlight default link krlFunction Function | ||
|  | " }}} Function | ||
|  | 
 | ||
|  | " Error {{{ | ||
|  | if get(g:, 'krlShowError', 1) | ||
|  |   " some more or less common typos | ||
|  |   " | ||
|  |   " vars or funcs >24 chars are not possible in krl. a234567890123456789012345 | ||
|  |   syn match krlError0 /\w\{25,}/ containedin=krlFunction,krlNames,krlLabel,krlAnyType,krlEnumVal,krlSysvars | ||
|  |   " | ||
|  |   " should be interrupt (on|off) \w+ | ||
|  |   syn match krlError1 /\vinterrupt[ \t(]+[_$a-zA-Z0-9]+[_$a-zA-Z0-9.\[\]()+\-*/]*[ \t)]+o%(n|ff)>/ | ||
|  |   " | ||
|  |   " for bla==5 to 7... | ||
|  |   "        || | ||
|  |   syn match krlError3 /\v%(^\s*for%(\(|\s)+[_$a-zA-Z]+[_$a-zA-Z0-9.\[\]()+\-*/ ]*\s*)@<=[:=]\=/ | ||
|  |   " | ||
|  |   " TODO optimize performance | ||
|  |   " wait for a=b | ||
|  |   "           | | ||
|  |   syn match krlError4 /\v%(^\s*%(return|wait\s+for|if|while|until|%(global\s+)?interrupt\s+decl)>[^;]+[^;<>=])@<=\=[^=]/ | ||
|  |   " | ||
|  |   " wait for a><b | ||
|  |   "           || | ||
|  |   syn match krlError5 /\v%(^\s*%(return|wait\s+for|if|while|until|%(global\s+)?interrupt\s+decl)>[^;]+)@<=\>\s*\</ | ||
|  |   " | ||
|  |   " if (a==5) (b==6) ... | ||
|  |   "         ||| | ||
|  |   syn match krlError6 /\v%(^\s*%(return|wait\s+for|if|while|until|%(global\s+)?interrupt\s+decl)>[^;]+[^;])@<=\)\s*\(/ | ||
|  |   " | ||
|  |   " TODO optimize performance | ||
|  |   " a == b + 1 | ||
|  |   " a := b + 1 | ||
|  |   "   || | ||
|  |   syn match krlError7 /\v%(^\s*%(return|wait\s+for|if|while|until|%(global\s+)?interrupt\s+decl)>[^;]+[^;])@1<!%(^\s*[_$a-zA-Z]+[_$a-zA-Z0-9.\[\],+\-*/]*\s*)@<=[:=]\=/ | ||
|  |   syn match krlError7 /\v\c%(^\s*%(decl\s+)%(global\s+)?%(const\s+)?\w+\s+\w+\s*)@<=[:=]\=/ | ||
|  |   syn match krlError7 /\v\c%(^\s*%(decl\s+)?%(global\s+)?%(const\s+)?%(bool\s+|int\s+|real\s+|char\s+)\w+\s*)@<=[:=]\=/ | ||
|  |   " | ||
|  |   " this one is tricky. Make sure this does not match trigger instructions; OK, next try, now search for false positives | ||
|  |   " TODO optimize performance | ||
|  |   " a = b and c or (int1=int2) | ||
|  |   "                     | | ||
|  |   syn match krlError8 /\v(^\s*[_$a-zA-Z]+[_$a-zA-Z0-9.\[\]()+\-*/]*\s*\=[^;]*[^;<>=])@<=\=\ze[^=]/ | ||
|  |   " | ||
|  |   " <(distance|delay|prio)> := | ||
|  |   " <(distance|delay|prio)> == | ||
|  |   "                         || | ||
|  |   syn match krlError9 /\v(^[^;]*<(distance|delay|prio|minimum|maximum)\s*)@<=[:=]\=/ | ||
|  |   " | ||
|  |   " 'for', 'while' or 'repeat' followed by 'do' | ||
|  |   syn match krlError10 /\c\v^\s*(until|while|for)>[^;]*<do>/ | ||
|  |   " | ||
|  |   highlight default link krlError0 Error | ||
|  |   highlight default link krlError1 Error | ||
|  |   highlight default link krlError2 Error | ||
|  |   highlight default link krlError3 Error | ||
|  |   highlight default link krlError4 Error | ||
|  |   highlight default link krlError5 Error | ||
|  |   highlight default link krlError6 Error | ||
|  |   highlight default link krlError7 Error | ||
|  |   highlight default link krlError8 Error | ||
|  |   highlight default link krlError9 Error | ||
|  |   highlight default link krlError10 Error | ||
|  | endif | ||
|  | " }}} Error | ||
|  | 
 | ||
|  | " Finish {{{ | ||
|  | let &cpo = s:keepcpo | ||
|  | unlet s:keepcpo | ||
|  | 
 | ||
|  | let b:current_syntax = "krl" | ||
|  | " }}} Finish | ||
|  | 
 | ||
|  | " vim:sw=2 sts=2 et fdm=marker |