diff options
Diffstat (limited to 'runtime/syntax/krl.vim')
-rw-r--r-- | runtime/syntax/krl.vim | 461 |
1 files changed, 461 insertions, 0 deletions
diff --git a/runtime/syntax/krl.vim b/runtime/syntax/krl.vim new file mode 100644 index 0000000..6808a48 --- /dev/null +++ b/runtime/syntax/krl.vim @@ -0,0 +1,461 @@ +" Vim syntax file +" Language: Kuka Robot Language +" Maintainer: Patrick Meiser-Knosowski <knosowski@graeffrobotics.de> +" 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', " ") =~ '\<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 +" 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%(<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 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*<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,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 |