summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/krl.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/syntax/krl.vim')
-rw-r--r--runtime/syntax/krl.vim461
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