" Vim syntax file " Language: Kuka Robot Language " Maintainer: Patrick Meiser-Knosowski " Version: 3.0.0 " Last Change: 22. Jun 2023 " 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', " ") =~ '\[^;]*/ 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>[^;]*[^;]*/ 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*|\s*)@!.*$/ 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 " External program and function syn keyword krlType ext extfct extfctp extp " Communication syn keyword krlType signal channel 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 motion_mode spline_para_variant spreadstartpolicy 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 installed_motion_modes msg_t syn keyword krlEnum step_enum " 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 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 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%(\s+)?%(\s+)?/ 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%(/ syn match krlStatement /\v\c%(/ 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 endfor while endwhile repeat until loop endloop exit " STEP is used as variable in VKRC, this pattern should match STEP -, 5(constant number) or VAR syn match krlRepeat /\v\cstep\s+%(-|\w)/me=e-1 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*/ 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,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>[^;]+)@<=\>\s*\[^;]+[^;])@<=\)\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=])@<=\=\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)>[^;]*/ " 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