neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

krl.vim (20664B)


      1 " Vim syntax file
      2 " Language: Kuka Robot Language
      3 " Maintainer: Patrick Meiser-Knosowski <knosowski@graeffrobotics.de>
      4 " Version: 3.1.0
      5 " Last Change: 13. Jan 2026
      6 " Credits: Thanks for contributions to this to Michael Jagusch
      7 "          Thanks for beta testing to Thomas Baginski
      8 "
      9 " Note to self:
     10 " for testing perfomance
     11 "     open a 1000 lines file.
     12 "     :syntime on
     13 "     G
     14 "     hold down CTRL-U until reaching top
     15 "     :syntime report
     16 
     17 " Init {{{
     18 if exists("b:current_syntax")
     19  finish
     20 endif
     21 
     22 let s:keepcpo = &cpo
     23 set cpo&vim
     24 
     25 " if colorscheme is tortus(less)? krlGroupName defaults to 1
     26 if get(g:, 'colors_name', " ") =~ '\<tortus'
     27      \&& !exists("g:krlGroupName")
     28  let g:krlGroupName=1 
     29 endif
     30 " krlGroupName defaults to 0 if it's not initialized yet or 0
     31 if !get(g:, "krlGroupName", 0)
     32  let g:krlGroupName = 0 
     33 endif
     34 
     35 " krl does ignore case
     36 syn case ignore
     37 " take #, $ and & into keyword (syntax only)
     38 syn iskeyword @,48-57,_,192-255,#,$,&
     39 " spell checking
     40 syn spell notoplevel
     41 " }}} init
     42 
     43 " Comment and Folding {{{ 
     44 
     45 " Special Comment
     46 
     47 " TODO Comment
     48 syn keyword krlTodo contained TODO FIXME XXX
     49 highlight default link krlTodo Todo
     50 
     51 " Debug Comment
     52 syn keyword krlDebug contained DEBUG
     53 highlight default link krlDebug Debug
     54 
     55 " Comment
     56 " none move fold comment until second ;
     57 syn match krlFoldComment /\c\v^\s*;\s*%(end)?fold>[^;]*/ containedin=krlFold contains=krlSingleQuoteString,krlInteger,krlFloat,krlMovement,krlDelimiter,krlBoolean
     58 highlight default link krlFoldComment Comment
     59 
     60 " move fold comment until second ;
     61 syn match krlMoveFoldComment /\c\v^\s*;\s*fold>[^;]*<s?%(ptp|lin|circ?|spl)%(_rel)?>[^;]*/ containedin=krlFold contains=krlInteger,krlFloat,krlMovement,krlDelimiter
     62 highlight default link krlMoveFoldComment Comment
     63 
     64 " things to highlight in a fold line
     65 syn keyword krlFoldHighlights CONT IN SYN OUT contained containedin=krlFoldComment
     66 syn match krlFoldHighlights /\c\v<(M|F|E|A|t|i|bin|binin|UP|SPSMAKRO)\d+>/ contained containedin=krlFoldComment
     67 if g:krlGroupName
     68  highlight default link krlFoldHighlights Sysvars
     69 else
     70  " default color for Fold Highlights
     71 endif
     72 syn keyword krlVkrcFoldConstants EIN AUS containedin=krlFoldComment
     73 highlight default link krlVkrcFoldConstants Boolean
     74 
     75 " Comment without Fold, also includes endfold lines and fold line part after second ;
     76 syn match krlComment /\c\v;\s*%(<%(end)?fold>)@!.*$/ containedin=krlFold contains=krlTodo,krlDebug,@Spell
     77 " Commented out Fold line: "; ;FOLD PTP..."
     78 syn match krlComment /\c\v^\s*;\s*;.*$/ contains=krlTodo,krlDebug
     79 highlight default link krlComment Comment
     80 
     81 if has("conceal") && get(g:, 'krlConcealFoldTail', 1)
     82  syn match krlConcealFoldTail /\c\v(^\s*;\s*fold[^;]*)@250<=;%(--|\s*<fold>|\s*<endfold>)@!.*$/ transparent containedin=krlComment conceal cchar=*
     83 endif
     84 " }}} Comment and Folding 
     85 
     86 " Header {{{
     87 syn match krlHeader /&\a\w*/
     88 highlight default link krlHeader PreProc
     89 " }}} Header
     90 
     91 " Operator {{{
     92 " Boolean operator
     93 syn keyword krlBoolOperator and or exor not b_and b_or b_exor b_not
     94 highlight default link krlBoolOperator Operator
     95 " Arithmetic operator
     96 syn match krlArithOperator /[+-]/ containedin=krlFloat
     97 syn match krlArithOperator /[*/]/
     98 highlight default link krlArithOperator Operator
     99 " Compare operator
    100 syn match krlCompOperator /[<>=]/
    101 highlight default link krlCompOperator Operator
    102 " Geometric operator
    103 " Do not move the : operator
    104 " Must be present befor krlParamdef
    105 syn match krlGeomOperator /[:]/ 
    106 " syn match krlGeomOperator /[:]/ containedin=krlLabel,krlParamdef
    107 highlight default link krlGeomOperator Operator
    108 " }}} Operator
    109 
    110 " Type, StorageClass and Typedef {{{
    111 " Simple data types
    112 syn keyword krlType bool char real int
    113 " External program and function
    114 syn keyword krlType ext extfct extfctp extp
    115 " Communication
    116 syn keyword krlType signal channel
    117 highlight default link krlType Type
    118 " StorageClass
    119 syn keyword krlStorageClass const struc enum
    120 syn match krlStorageClass /\<decl\>/
    121 syn match krlStorageClass /\<global\>/
    122 highlight default link krlStorageClass StorageClass
    123 " .dat file public
    124 syn keyword krlDatStorageClass public
    125 highlight default link krlDatStorageClass StorageClass
    126 " Parameter StorageClass
    127 " Do not move the :in/:out
    128 " Must be present after krlGeomOperator
    129 syn match krlParamdef /[:]\s*in\>/
    130 syn match krlParamdef /[:]\s*out\>/
    131 highlight default link krlParamdef StorageClass
    132 " Not a typedef but I like to have those highlighted
    133 " different then types, structures or strorage classes
    134 syn keyword krlTypedef DEF DEFFCT ENDFCT DEFDAT ENDDAT
    135 syn match krlTypedef /^\s*END\>/
    136 highlight default link krlTypedef Typedef
    137 " }}} Type, StorageClass and Typedef
    138 
    139 " Delimiter {{{
    140 syn match krlDelimiter /[\[\](),\\]/
    141 highlight default link krlDelimiter Delimiter
    142 " }}} Delimiter
    143 
    144 " Constant values {{{
    145 " Boolean
    146 syn keyword krlBoolean true false containedin=krlStructVal
    147 highlight default link krlBoolean Boolean
    148 " Binary integer
    149 syn match krlBinaryInt /'b[01]\+'/ containedin=krlStructVal
    150 highlight default link krlBinaryInt Number
    151 " Hexadecimal integer
    152 syn match krlHexInt /'h[0-9a-fA-F]\+'/ containedin=krlStructVal
    153 highlight default link krlHexInt Number
    154 " Integer
    155 syn match krlInteger /\W\@1<=[+-]\?\d\+/ containedin=krlStructVal,krlFloat contains=krlArithOperator
    156 highlight default link krlInteger Number
    157 " Float
    158 syn match krlFloat /\v\W@1<=[+-]?\d+\.?\d*%(\s*[eE][+-]?\d+)?/ containedin=krlStructVal
    159 highlight default link krlFloat Float
    160 " String
    161 syn region krlString start=/"/ end=/"/ oneline containedin=krlStructVal contains=@Spell
    162 highlight default link krlString String
    163 syn match krlSpecialChar /[|]/ containedin=krlString
    164 highlight default link krlSpecialChar SpecialChar
    165 " String within a fold line
    166 syn region krlSingleQuoteString start=/'/ end=/'/ oneline contained contains=@Spell
    167 highlight default link krlSingleQuoteString String
    168 " Enum
    169 syn match krlEnumVal /#\s*\a\w*/ containedin=krlStructVal
    170 highlight default link krlEnumVal Constant
    171 " }}} Constant values
    172 
    173 " Predefined Structure and Enum {{{
    174 " Predefined structures and enums found in
    175 " /r1/mada/$*.dat, /r1/steu/$*.dat and
    176 " /r1/system/$config.dat as well as
    177 " basisTech, gripperTech and spotTech
    178 "
    179 syn keyword krlStructure call_stack
    180 " Predefined data types found in $operate*.dat
    181 syn keyword krlStructure aux_pt_mode correction_struc delta_workspace deri_exax deri_struc deri_vector emd_struc energy_data_struc energy_measuring_struc energy_module_struc extended_ret force_val_struc iobus_info_t krl_bp_t loop_axis_inc mbw_para_offset mbw_para_target mbw_result memory_info opc_par_bool_t opc_par_int_t opc_par_real_t opc_par_string_t pathtime_struc pos_axis prog_info p_last_info slave_axis_inc spl_fctctrl spl_fctdef spl_tech spl_techfct spl_techsys spl_tech_map spl_vel_restr_struc ssb_active_t strike_out_components strike_out_struc target_pt_mode tension_struc torqlimitparam t_cs vector vmdirection vmparam vmparam_pull vmparam_push vmstate vmstrategy ws_state
    182 syn keyword krlEnum abs_accur_state accu_state aux_pt_values axesmask_info ax_slave_type bin_parity_t braketest_time_info brake_state buff_mode_t eco_level ediagwritemode energy_config_state_t ext_ipo_mode integration_mode int_typ_e kcp_type laser_mode ldc_ereaction ldc_eresult mbw_error msgbufmsgtype_t prog_int_e prog_status recovery_pose remote_ctrl_mode req_status rob_stop_t seek_mode_t sigdtyp sigtyp spl_techfct_mode spl_tech_bound spl_vel_mode spo_reaction target_pt_values trigger_up_type vmcontrol_s vmerror vmoffoption vmpull vmredundancy_s vmselection_s waittype wait_cmd_e ws_reference
    183 "
    184 " Predefined data types found in krc1
    185 syn keyword krlStructure servopara keymove powermodul trace techangle tech techfct techcps techfctctrl axis_inc axis_cal date display_var pro_ip con bus 
    186 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 
    187 "
    188 " Predefined data types found in kss functions
    189 syn keyword krlEnum ediagstate rdc_fs_state ret_c_psync_e var_type cancel_psync_e sys_vars 
    190 syn keyword krlStructure siginf rw_rdc_file rw_mam_file diagpar_t error_t stopmess case_sense_t msgbuf_t e3pos e3axis diagopt_t 
    191 "
    192 " Predefined structures for movement
    193 syn keyword krlStructure frame e6pos pos e6axis axis
    194 syn keyword krlStructure fdat ldat pdat
    195 syn keyword krlStructure load inertia
    196 "
    197 " Predefined structures for shapes
    198 syn keyword krlStructure axbox cylinder box
    199 "
    200 " Predefined structures and enums found in /r1/mada/$machine.dat
    201 syn keyword krlStructure cp fra acc_car jerk_struc dhart spin trpspin ex_kin et_ax maxtool
    202 syn keyword krlEnum individual_mames supply_voltage kinclass main_axis wrist_axis sw_onoff
    203 "
    204 " Predefined structures and enums found in /r1/mada/$robcor.dat
    205 " syn keyword krlStructure
    206 syn keyword krlEnum adap_acc model_type control_parameter eko_mode
    207 "
    208 " Predefined structures and enums found in /steu/mada/$custom.dat
    209 syn keyword krlStructure pro_io_t ser ext_mod_t coop_krc ws_config bin_type coop_update_t ldc_reaction
    210 syn keyword krlEnum axis_of_coordinates motion_mode spline_para_variant spreadstartpolicy target_status cp_vel_type cp_statmon
    211 "
    212 " Predefined structures and enums found in /steu/mada/$machine.dat
    213 syn keyword krlStructure emstop_path boxstatesafein boxstatesafeout
    214 syn keyword krlEnum digincode
    215 "
    216 " Predefined structures and enums found in /steu/mada/$option.dat
    217 syn keyword krlStructure installed_motion_modes msg_t 
    218 syn keyword krlEnum step_enum
    219 " syn keyword krlEnum
    220 "
    221 " Predefined structures and enums found in /r1/system/$config.dat
    222 " BasisTech
    223 syn keyword krlStructure dig_out_type ctrl_in_t ctrl_out_t fct_out_t fct_in_t odat hdat 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
    224 syn keyword krlEnum bas_command out_modetype ipo_m_t apo_mode_t funct_type p00_command timer_actiontype
    225 "
    226 " Types found in System Variable demo
    227 syn keyword krlStructure int_info
    228 "
    229 " GripperTech
    230 syn keyword krlStructure grp_typ grp_types grp_sugg_t
    231 syn keyword krlEnum on_off_typ apo_typ
    232 "
    233 " SpotTech
    234 syn keyword krlStructure spot_type spot_sugg_t
    235 syn keyword krlEnum s_command s_pair_slct command_retr
    236 "
    237 " VW
    238 syn keyword krlStructure vw_mpara_typ zangentyp zangenbedingung ibszangentyp last_ibs_typ verr_typ verrcheck_t t_fb_state kollisionsdaten state_t modus_t
    239 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
    240 "
    241 " ProgCoop
    242 syn keyword krlStructure ydat
    243 " syn keyword krlEnum
    244 "
    245 " bas.src
    246 syn keyword krlStructure cont
    247 syn keyword krlEnum esys ipo_mode circ_mode circ_type ori_type var_state
    248 "
    249 " MsgLib.src
    250 syn keyword krlStructure KrlMsg_T KrlMsgParType_T KrlMsgPar_T KrlMsgOpt_T KrlMsgDlgSK_T
    251 syn keyword krlEnum EKrlMsgType
    252 "
    253 highlight default link krlStructure Structure
    254 highlight default link krlEnum Structure
    255 " }}} Predefined Structure and Enum
    256 
    257 " System variable {{{
    258 syn match krlSysvars /\<\$\a[a-zA-Z0-9_.]*/
    259 if g:krlGroupName
    260  highlight default link krlSysvars Sysvars
    261 else
    262  " default color for Sysvars
    263 endif
    264 " }}} System variable
    265 
    266 " Statements, keywords et al {{{
    267 " continue
    268 syn keyword krlContinue continue
    269 if g:krlGroupName
    270  highlight default link krlContinue Continue
    271 else
    272  highlight default link krlContinue Statement
    273 endif
    274 " interrupt 
    275 syn match krlStatement /\v\c%(<global>\s+)?<interrupt>%(\s+<decl>)?/ contains=krlStorageClass
    276 " keywords
    277 syn keyword krlStatement wait on off enable disable stop trigger with when distance onstart delay prio import is minimum maximum confirm on_error_proceed
    278 syn match krlStatement /\<do\>/
    279 syn match krlStatement /\v\c%(<wait\s+)@7<=<sec>/
    280 syn match krlStatement /\v\c%(<when\s+)@7<=<path>/
    281 highlight default link krlStatement Statement
    282 " Conditional
    283 syn keyword krlConditional if then else endif switch case default endswitch skip endskip
    284 highlight default link krlConditional Conditional
    285 " Repeat
    286 syn keyword krlRepeat to endfor endwhile repeat loop endloop exit
    287 syn match krlRepeat /\<for\>/
    288 syn match krlRepeat /\<while\>/
    289 syn match krlRepeat /\<until\>/
    290 " STEP is used as variable in VKRC, this pattern should match STEP -, 5(constant number) or VAR
    291 syn match krlRepeat /\v\cstep\s+%(-|\w)/me=e-1
    292 highlight default link krlRepeat Repeat
    293 " Label
    294 syn keyword krlLabel goto
    295 syn match krlLabel /^\s*\w\+:\ze\s*\%(;.*\)\?$/
    296 highlight default link krlLabel Label
    297 " Keyword
    298 syn keyword krlKeyword anin anout digin
    299 highlight default link krlKeyword Keyword
    300 " Exception
    301 syn keyword krlException return resume halt
    302 highlight default link krlException Exception
    303 " }}} Statements, keywords et al
    304 
    305 " special keywords for movement commands {{{
    306 syn keyword krlMovement PTP PTP_REL LIN LIN_REL CIRC CIRC_REL SPL SPL_REL SPTP SPTP_REL SLIN SLIN_REL SCIRC SCIRC_REL
    307 " VKRC movement
    308 syn keyword krlMovement CIR KCIR KLIN
    309 " Async movement
    310 syn keyword krlMovement ASYPTP ASYCONT ASYSTOP ASYCANCEL MOVE_EMI
    311 syn match krlMovement /\v\c^\s*<BRAKE(\s+F)?>/
    312 if g:krlGroupName
    313  highlight default link krlMovement Movement
    314 else
    315  highlight default link krlMovement Special
    316 endif
    317 " movement modifiers
    318 syn match krlMoveBlockInst /\c\v^\s*TIME_BLOCK\s+(START|PART|END)/
    319 syn match krlMoveBlockInst /\c\v^\s*CONST_VEL\s+(START|END)/
    320 syn keyword krlMoveBlockInst ptp_spline spline endspline
    321 highlight default link krlMoveBlockInst Statement
    322 syn keyword krlMoveMod ca c_ptp c_dis c_vel c_ori c_spl
    323 if g:krlGroupName
    324  highlight default link krlMoveMod Movement
    325 else
    326  highlight default link krlMoveMod Special
    327 endif
    328 " }}} special keywords for movement commands
    329 
    330 " Structure value {{{
    331 " avoid coloring structure component names
    332 syn match krlNames /\.[a-zA-Z_][.a-zA-Z0-9_$]*/
    333 syn match krlNames contained /[a-zA-Z_][.a-zA-Z0-9_$]*/
    334 " highlight default link krlNames None
    335 " Structure value
    336 syn region krlStructVal start=/{/ end=/}/ oneline containedin=krlStructVal contains=krlNames
    337 highlight default link krlStructVal Delimiter
    338 " }}} Structure value
    339 
    340 " BuildInFunction {{{
    341 syn keyword krlBuildInFunction contained Pulse
    342 syn keyword krlBuildInFunction contained m_comment
    343 syn keyword krlBuildInFunction contained is_key_pressed 
    344 syn keyword krlBuildInFunction contained set_opt_filter 
    345 syn keyword krlBuildInFunction contained timer_limit 
    346 syn keyword krlBuildInFunction contained tool_adj 
    347 syn keyword krlBuildInFunction contained FRand 
    348 syn keyword krlBuildInFunction contained ExecFunc eb_abs eb_test_abs eb_test EB EK EO LK mbx_rec 
    349 " $operate*.dat
    350 " brake point
    351 syn keyword krlBuildInFunction contained chg_krl_bp clr_all_krl_bp clr_krl_bp disable_krl_bp enable_krl_bp set_krl_bp
    352 " other
    353 syn keyword krlBuildInFunction contained InterimEnergy activate_force_mode DynBrakeTest test_brake
    354 " coll monitor
    355 syn keyword krlBuildInFunction contained get_collmon_set reset_collmon_set 
    356 " safe robot
    357 syn keyword krlbuildinfunction contained get_AxesMask get_BrakeTest_Time
    358 " math
    359 syn keyword krlBuildInFunction contained Abs Acos Atan2 Cos Sin Sqrt Tan
    360 syn keyword krlBuildInFunction contained Forward Inverse inv_pos
    361 " cFoo sFoo
    362 syn keyword krlBuildInFunction contained cClose cOpen cRead cWrite sRead sWrite 
    363 " string
    364 syn keyword krlBuildInFunction contained StrToBool StrToInt StrToReal StrToString StrToFrame StrToPos StrToE3Pos StrToE6Pos StrToAxis StrToE3Axis StrToE6Axis 
    365 syn keyword krlBuildInFunction contained StrAdd StrClear StrCopy StrComp StrFind StrLen StrDeclLen StrToBool StrToInt StrToReal StrToString
    366 " diag
    367 syn keyword krlBuildInFunction contained diag_start diag_stop get_DiagState 
    368 " rdc mam pid
    369 syn keyword krlBuildInFunction contained CheckPidOnRdc check_mam_on_rdc get_rdc_fs_state 
    370 syn keyword krlBuildInFunction contained set_mam_on_hd copy_mam_hd_to_rdc copy_mam_rdc_to_hd 
    371 syn keyword krlBuildInFunction contained PidToHd PidToRdc 
    372 syn keyword krlBuildInFunction contained cal_to_rdc rdc_file_to_hd 
    373 syn keyword krlBuildInFunction contained delete_pid_on_rdc delete_rdc_content 
    374 syn keyword krlBuildInFunction contained create_rdc_archive restore_rdc_archive 
    375 " ioctl
    376 syn keyword krlBuildInFunction contained IOCtl cIOCtl 
    377 syn keyword krlBuildInFunction contained WSpaceGive WSpaceTake 
    378 " sync
    379 syn keyword krlBuildInFunction contained Sync SyncCmd CancelProgSync 
    380 " remote
    381 syn keyword krlBuildInFunction contained RemoteCmd RemoteRead 
    382 " msg/dlg
    383 syn keyword krlBuildInFunction contained IsMessageSet clear_KrlMsg get_MsgBuffer exists_KrlDlg exists_KrlMsg set_KrlDlg set_KrlDlgAnswer set_KrlMsg 
    384 " robvers
    385 syn keyword krlBuildInFunction contained maximize_UsedxRobvers set_UsedxRobvers 
    386 " md_foo
    387 syn keyword krlBuildInFunction contained md_Cmd md_GetState md_SetState md_Asgn 
    388 " emi
    389 syn keyword krlBuildInFunction contained emi_ActPos emi_EndPos emi_StartPos emi_RecState emi_RecName 
    390 " var
    391 syn keyword krlBuildInFunction contained cast_from cast_to
    392 syn keyword krlBuildInFunction contained GetVarsize GetCycDef get_sig_inf get_decl_place VarType VarState 
    393 " sys
    394 syn keyword krlBuildInFunction contained GetSysState get_system_data set_system_data set_system_data_delayed 
    395 " err
    396 syn keyword krlBuildInFunction contained err_clear err_raise
    397 " motion
    398 syn keyword krlBuildInFunction contained AdvancedVectorMoveOn delete_backward_buffer move_backward rob_stop rob_stop_release set_brake_delay suppress_repositioning VectorMoveOn VectorMoveOff
    399 " torque
    400 syn keyword krlBuildInFunction contained set_torque_limits reset_torque_limits
    401 " krc1
    402 syn keyword krlBuildInFunction contained clCopy cCurPos cNew cClear cRelease cKey
    403 if g:krlGroupName
    404  highlight default link krlBuildInFunction BuildInFunction
    405 else
    406  highlight default link krlBuildInFunction Function
    407 endif
    408 " }}} BuildInFunction
    409 
    410 " Function {{{
    411 syn match krlFunction /[$a-zA-Z_]\w* *(/me=e-1 contains=krlBuildInFunction
    412 highlight default link krlFunction Function
    413 " }}} Function
    414 
    415 " Error {{{
    416 if get(g:, 'krlShowError', 1)
    417  " some more or less common typos
    418  "
    419  " vars or funcs >24 chars are not possible in krl. a234567890123456789012345
    420  syn match krlError0 /\w\{25,}/ containedin=krlFunction,krlNames,krlLabel,krlEnumVal,krlSysvars
    421  "
    422  " should be interrupt (on|off) \w+
    423  syn match krlError1 /\vinterrupt[ \t(]+[_$a-zA-Z0-9]+[_$a-zA-Z0-9.\[\]()+\-*/]*[ \t)]+o%(n|ff)>/
    424  "
    425  " for bla==5 to 7...
    426  "        ||
    427  syn match krlError3 /\v%(^\s*for%(\(|\s)+[_$a-zA-Z]+[_$a-zA-Z0-9.\[\]()+\-*/ ]*\s*)@<=[:=]\=/
    428  "
    429  " wait for a=b
    430  "           |
    431  syn match krlError4 /\v%(^\s*%(return|wait\s+for|if|while|until|%(global\s+)?interrupt\s+decl)>[^;]+[^;<>=])@<=:?\=[^=]/me=e-1
    432  "
    433  " wait for a><b
    434  "           ||
    435  syn match krlError5 /\v%(^\s*%(return|wait\s+for|if|while|until|%(global\s+)?interrupt\s+decl)>[^;]+)@<=\>\s*\</
    436  "
    437  " if (a==5) (b==6) ...
    438  "         |||
    439  syn match krlError6 /\v%(^\s*%(return|wait\s+for|if|while|until|%(global\s+)?interrupt\s+decl)>[^;]+[^;])@<=\)\s*\(/
    440  "
    441  " a == b + 1
    442  " a := b + 1
    443  "   ||
    444  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*)@<=[:=]\=/
    445  syn match krlError7 /\v%(^\s*%(decl\s+)%(global\s+)?%(const\s+)?\w+\s+\w+\s*)@<=[:=]\=/
    446  syn match krlError7 /\v%(^\s*%(decl\s+)?%(global\s+)?%(const\s+)?%(bool\s+|int\s+|real\s+|char\s+)\w+\s*)@<=[:=]\=/
    447  "
    448  " this one is tricky. Make sure this does not match trigger instructions; OK, next try, now search for false positives
    449  " a = b and c or (int1=int2)
    450  "                     |
    451  syn match krlError8 /\v%(^\s*[_$a-zA-Z]+[_$a-zA-Z0-9.\[\]()+\-*/]*\s*\=[^;]*[^;<>=])@<=\=\ze[^=]/
    452  "
    453  " <(distance|delay|prio|minimum|maximum)> :=
    454  " <(distance|delay|prio|minimum|maximum)> ==
    455  "                                         ||
    456  syn match krlError9 /\v%(^[^;]*<(distance|delay|prio|minimum|maximum)\s*)@<=[:=]\=/
    457  "
    458  " DO is not used at KRL repeat loops (for, while, until)
    459  syn match krlError10 /\v%(^\s*%(for|while|until)[^;]+)@<=<do>/
    460  "
    461  " global decl must be decl global
    462  syn match krlError11 /\v%(^\s*)@<=global\s+decl>/
    463  "
    464  highlight default link krlError0 Error
    465  highlight default link krlError1 Error
    466  highlight default link krlError2 Error
    467  highlight default link krlError3 Error
    468  highlight default link krlError4 Error
    469  highlight default link krlError5 Error
    470  highlight default link krlError6 Error
    471  highlight default link krlError7 Error
    472  highlight default link krlError8 Error
    473  highlight default link krlError9 Error
    474  highlight default link krlError10 Error
    475  highlight default link krlError11 Error
    476 endif
    477 " }}} Error
    478 
    479 " Finish {{{
    480 let &cpo = s:keepcpo
    481 unlet s:keepcpo
    482 
    483 let b:current_syntax = "krl"
    484 " }}} Finish
    485 
    486 " vim:sw=2 sts=2 et fdm=marker