Bram Moolenaar | 75ab590 | 2022-04-18 15:36:40 +0100 | [diff] [blame] | 1 | " Vim syntax file |
| 2 | " Language: Kuka Robot Language |
| 3 | " Maintainer: Patrick Meiser-Knosowski <knosowski@graeffrobotics.de> |
| 4 | " Version: 3.0.0 |
Patrick Meiser-Knosowski | 92f076e | 2023-08-09 20:35:35 +0200 | [diff] [blame] | 5 | " Last Change: 22. Jun 2023 |
Bram Moolenaar | 75ab590 | 2022-04-18 15:36:40 +0100 | [diff] [blame] | 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 containedin=krlFoldComment |
| 66 | syn match krlFoldHighlights /\c\v<(M|F|E|A|t|i|bin|binin|UP|SPSMAKRO)\d+>/ 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 |
Patrick Meiser-Knosowski | 92f076e | 2023-08-09 20:35:35 +0200 | [diff] [blame] | 112 | syn keyword krlType bool char real int |
Bram Moolenaar | 75ab590 | 2022-04-18 15:36:40 +0100 | [diff] [blame] | 113 | " External program and function |
Patrick Meiser-Knosowski | 92f076e | 2023-08-09 20:35:35 +0200 | [diff] [blame] | 114 | syn keyword krlType ext extfct extfctp extp |
Bram Moolenaar | 75ab590 | 2022-04-18 15:36:40 +0100 | [diff] [blame] | 115 | " Communication |
Patrick Meiser-Knosowski | 92f076e | 2023-08-09 20:35:35 +0200 | [diff] [blame] | 116 | syn keyword krlType signal channel |
Bram Moolenaar | 75ab590 | 2022-04-18 15:36:40 +0100 | [diff] [blame] | 117 | highlight default link krlType Type |
| 118 | " StorageClass |
| 119 | syn keyword krlStorageClass decl global const struc enum |
| 120 | highlight default link krlStorageClass StorageClass |
| 121 | " .dat file public |
| 122 | syn keyword krlDatStorageClass public |
| 123 | highlight default link krlDatStorageClass StorageClass |
| 124 | " Parameter StorageClass |
| 125 | " Do not move the :in/:out |
| 126 | " Must be present after krlGeomOperator |
| 127 | syn match krlParamdef /[:]\s*in\>/ |
| 128 | syn match krlParamdef /[:]\s*out\>/ |
| 129 | highlight default link krlParamdef StorageClass |
| 130 | " Not a typedef but I like to have those highlighted |
| 131 | " different then types, structures or strorage classes |
| 132 | syn keyword krlTypedef DEF DEFFCT ENDFCT DEFDAT ENDDAT |
| 133 | syn match krlTypedef /^\s*END\>/ |
| 134 | highlight default link krlTypedef Typedef |
| 135 | " }}} Type, StorageClass and Typedef |
| 136 | |
| 137 | " Delimiter {{{ |
| 138 | syn match krlDelimiter /[\[\](),\\]/ |
| 139 | highlight default link krlDelimiter Delimiter |
| 140 | " }}} Delimiter |
| 141 | |
| 142 | " Constant values {{{ |
| 143 | " Boolean |
| 144 | syn keyword krlBoolean true false containedin=krlStructVal |
| 145 | highlight default link krlBoolean Boolean |
| 146 | " Binary integer |
| 147 | syn match krlBinaryInt /'b[01]\+'/ containedin=krlStructVal |
| 148 | highlight default link krlBinaryInt Number |
| 149 | " Hexadecimal integer |
| 150 | syn match krlHexInt /'h[0-9a-fA-F]\+'/ containedin=krlStructVal |
| 151 | highlight default link krlHexInt Number |
| 152 | " Integer |
| 153 | syn match krlInteger /\W\@1<=[+-]\?\d\+/ containedin=krlStructVal,krlFloat contains=krlArithOperator |
| 154 | highlight default link krlInteger Number |
| 155 | " Float |
| 156 | syn match krlFloat /\v\W@1<=[+-]?\d+\.?\d*%(\s*[eE][+-]?\d+)?/ containedin=krlStructVal |
| 157 | highlight default link krlFloat Float |
| 158 | " String |
| 159 | syn region krlString start=/"/ end=/"/ oneline containedin=krlStructVal contains=@Spell |
| 160 | highlight default link krlString String |
| 161 | syn match krlSpecialChar /[|]/ containedin=krlString |
| 162 | highlight default link krlSpecialChar SpecialChar |
| 163 | " String within a fold line |
| 164 | syn region krlSingleQuoteString start=/'/ end=/'/ oneline contained contains=@Spell |
| 165 | highlight default link krlSingleQuoteString String |
| 166 | " Enum |
| 167 | syn match krlEnumVal /#\s*\a\w*/ containedin=krlStructVal |
| 168 | highlight default link krlEnumVal Constant |
| 169 | " }}} Constant values |
| 170 | |
| 171 | " Predefined Structure and Enum {{{ |
| 172 | " Predefined structures and enums found in |
| 173 | " /r1/mada/$*.dat, /r1/steu/$*.dat and |
| 174 | " /r1/system/$config.dat as well as |
| 175 | " basisTech, gripperTech and spotTech |
| 176 | " |
| 177 | " Predefined data types found in krc1 |
| 178 | syn keyword krlStructure servopara keymove powermodul trace techangle tech techfct techcps techfctctrl axis_inc axis_cal date display_var pro_ip con bus |
| 179 | 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 |
| 180 | " |
| 181 | " Predefined data types found in kss functions |
| 182 | syn keyword krlEnum ediagstate rdc_fs_state ret_c_psync_e var_type cancel_psync_e sys_vars |
| 183 | syn keyword krlStructure siginf rw_rdc_file rw_mam_file diagpar_t error_t stopmess case_sense_t msgbuf_t e3pos e3axis diagopt_t |
| 184 | " |
| 185 | " Predefined structures for movement |
| 186 | syn keyword krlStructure frame e6pos pos e6axis axis |
| 187 | syn keyword krlStructure fdat ldat pdat |
| 188 | syn keyword krlStructure load inertia |
| 189 | " |
| 190 | " Predefined structures for shapes |
| 191 | syn keyword krlStructure axbox cylinder box |
| 192 | " |
| 193 | " Predefined structures and enums found in /r1/mada/$machine.dat |
| 194 | syn keyword krlStructure cp fra acc_car jerk_struc dhart spin trpspin ex_kin et_ax maxtool |
| 195 | syn keyword krlEnum individual_mames supply_voltage kinclass main_axis wrist_axis sw_onoff |
| 196 | " |
| 197 | " Predefined structures and enums found in /r1/mada/$robcor.dat |
| 198 | " syn keyword krlStructure |
| 199 | syn keyword krlEnum adap_acc model_type control_parameter eko_mode |
| 200 | " |
| 201 | " Predefined structures and enums found in /steu/mada/$custom.dat |
| 202 | syn keyword krlStructure pro_io_t ser ext_mod_t coop_krc ws_config bin_type coop_update_t ldc_reaction |
Patrick Meiser-Knosowski | 92f076e | 2023-08-09 20:35:35 +0200 | [diff] [blame] | 203 | syn keyword krlEnum axis_of_coordinates motion_mode spline_para_variant spreadstartpolicy target_status cp_vel_type cp_statmon |
Bram Moolenaar | 75ab590 | 2022-04-18 15:36:40 +0100 | [diff] [blame] | 204 | " |
| 205 | " Predefined structures and enums found in /steu/mada/$machine.dat |
| 206 | syn keyword krlStructure emstop_path boxstatesafein boxstatesafeout |
| 207 | syn keyword krlEnum digincode |
| 208 | " |
| 209 | " Predefined structures and enums found in /steu/mada/$option.dat |
Patrick Meiser-Knosowski | 92f076e | 2023-08-09 20:35:35 +0200 | [diff] [blame] | 210 | syn keyword krlStructure installed_motion_modes msg_t |
| 211 | syn keyword krlEnum step_enum |
Bram Moolenaar | 75ab590 | 2022-04-18 15:36:40 +0100 | [diff] [blame] | 212 | " syn keyword krlEnum |
| 213 | " |
| 214 | " Predefined structures and enums found in /r1/system/$config.dat |
| 215 | " BasisTech |
Patrick Meiser-Knosowski | 92f076e | 2023-08-09 20:35:35 +0200 | [diff] [blame] | 216 | 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 |
Bram Moolenaar | 75ab590 | 2022-04-18 15:36:40 +0100 | [diff] [blame] | 217 | syn keyword krlEnum bas_command out_modetype ipo_m_t apo_mode_t funct_type p00_command timer_actiontype |
| 218 | " |
| 219 | " GripperTech |
| 220 | syn keyword krlStructure grp_typ grp_types grp_sugg_t |
| 221 | syn keyword krlEnum on_off_typ apo_typ |
| 222 | " |
| 223 | " SpotTech |
| 224 | syn keyword krlStructure spot_type spot_sugg_t |
| 225 | syn keyword krlEnum s_command s_pair_slct command_retr |
| 226 | " |
| 227 | " VW |
| 228 | syn keyword krlStructure vw_mpara_typ zangentyp zangenbedingung ibszangentyp last_ibs_typ verr_typ verrcheck_t t_fb_state kollisionsdaten state_t modus_t |
| 229 | 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 |
| 230 | " |
| 231 | " ProgCoop |
| 232 | syn keyword krlStructure ydat |
| 233 | " syn keyword krlEnum |
| 234 | " |
| 235 | " bas.src |
| 236 | syn keyword krlStructure cont |
| 237 | syn keyword krlEnum esys ipo_mode circ_mode circ_type ori_type var_state |
| 238 | " |
| 239 | " MsgLib.src |
| 240 | syn keyword krlStructure KrlMsg_T KrlMsgParType_T KrlMsgPar_T KrlMsgOpt_T KrlMsgDlgSK_T |
| 241 | syn keyword krlEnum EKrlMsgType |
| 242 | " |
| 243 | highlight default link krlStructure Structure |
| 244 | highlight default link krlEnum Structure |
| 245 | " }}} Predefined Structure and Enum |
| 246 | |
| 247 | " System variable {{{ |
| 248 | syn match krlSysvars /\<\$\a[a-zA-Z0-9_.]*/ |
| 249 | if g:krlGroupName |
| 250 | highlight default link krlSysvars Sysvars |
| 251 | else |
| 252 | " default color for Sysvars |
| 253 | endif |
| 254 | " }}} System variable |
| 255 | |
| 256 | " Statements, keywords et al {{{ |
| 257 | " continue |
| 258 | syn keyword krlContinue continue |
| 259 | if g:krlGroupName |
| 260 | highlight default link krlContinue Continue |
| 261 | else |
| 262 | highlight default link krlContinue Statement |
| 263 | endif |
| 264 | " interrupt |
| 265 | syn match krlStatement /\v\c%(<global>\s+)?<INTERRUPT>%(\s+<decl>)?/ contains=krlStorageClass |
| 266 | " keywords |
| 267 | 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 |
| 268 | syn match krlStatement /\v\c%(<wait\s+)@7<=<sec>/ |
| 269 | syn match krlStatement /\v\c%(<when\s+)@7<=<path>/ |
| 270 | highlight default link krlStatement Statement |
| 271 | " Conditional |
| 272 | syn keyword krlConditional if then else endif switch case default endswitch skip endskip |
| 273 | highlight default link krlConditional Conditional |
| 274 | " Repeat |
Patrick Meiser-Knosowski | 92f076e | 2023-08-09 20:35:35 +0200 | [diff] [blame] | 275 | syn keyword krlRepeat for to endfor while endwhile repeat until loop endloop exit |
| 276 | " STEP is used as variable in VKRC, this pattern should match STEP -, 5(constant number) or VAR |
| 277 | syn match krlRepeat /\v\cstep\s+%(-|\w)/me=e-1 |
Bram Moolenaar | 75ab590 | 2022-04-18 15:36:40 +0100 | [diff] [blame] | 278 | highlight default link krlRepeat Repeat |
| 279 | " Label |
| 280 | syn keyword krlLabel goto |
| 281 | syn match krlLabel /^\s*\w\+:\ze\s*\%(;.*\)\?$/ |
| 282 | highlight default link krlLabel Label |
| 283 | " Keyword |
| 284 | syn keyword krlKeyword anin anout digin |
| 285 | highlight default link krlKeyword Keyword |
| 286 | " Exception |
| 287 | syn keyword krlException return resume halt |
| 288 | highlight default link krlException Exception |
| 289 | " }}} Statements, keywords et al |
| 290 | |
| 291 | " special keywords for movement commands {{{ |
| 292 | syn keyword krlMovement PTP PTP_REL LIN LIN_REL CIRC CIRC_REL SPL SPL_REL SPTP SPTP_REL SLIN SLIN_REL SCIRC SCIRC_REL |
| 293 | syn keyword krlMovement ASYPTP ASYCONT ASYSTOP ASYCANCEL MOVE_EMI |
| 294 | syn match krlMovement /\v\c^\s*<BRAKE(\s+F)?>/ |
| 295 | if g:krlGroupName |
| 296 | highlight default link krlMovement Movement |
| 297 | else |
| 298 | highlight default link krlMovement Special |
| 299 | endif |
| 300 | " movement modifiers |
| 301 | syn match krlMoveBlockInst /\c\v^\s*TIME_BLOCK\s+(START|PART|END)/ |
| 302 | syn match krlMoveBlockInst /\c\v^\s*CONST_VEL\s+(START|END)/ |
| 303 | syn keyword krlMoveBlockInst ptp_spline spline endspline |
| 304 | highlight default link krlMoveBlockInst Statement |
| 305 | syn keyword krlMoveMod ca c_ptp c_dis c_vel c_ori c_spl |
| 306 | if g:krlGroupName |
| 307 | highlight default link krlMoveMod Movement |
| 308 | else |
| 309 | highlight default link krlMoveMod Special |
| 310 | endif |
| 311 | " }}} special keywords for movement commands |
| 312 | |
| 313 | " Structure value {{{ |
| 314 | " avoid coloring structure component names |
| 315 | syn match krlNames /\.[a-zA-Z_][.a-zA-Z0-9_$]*/ |
| 316 | syn match krlNames contained /[a-zA-Z_][.a-zA-Z0-9_$]*/ |
| 317 | " highlight default link krlNames None |
| 318 | " Structure value |
| 319 | syn region krlStructVal start=/{/ end=/}/ oneline containedin=krlStructVal contains=krlNames |
| 320 | highlight default link krlStructVal Delimiter |
| 321 | " }}} Structure value |
| 322 | |
| 323 | " BuildInFunction {{{ |
| 324 | syn keyword krlBuildInFunction contained Pulse |
| 325 | syn keyword krlBuildInFunction contained m_comment |
| 326 | syn keyword krlBuildInFunction contained is_key_pressed |
| 327 | syn keyword krlBuildInFunction contained set_opt_filter |
| 328 | syn keyword krlBuildInFunction contained timer_limit |
| 329 | syn keyword krlBuildInFunction contained tool_adj |
| 330 | syn keyword krlBuildInFunction contained FRand |
| 331 | syn keyword krlBuildInFunction contained ExecFunc eb_test EB EK EO LK mbx_rec |
| 332 | " safe robot |
| 333 | syn keyword krlbuildinfunction contained get_AxesMask get_BrakeTest_Time |
| 334 | " math |
| 335 | syn keyword krlBuildInFunction contained Abs Sin Cos Acos Tan Atan Atan2 Sqrt |
| 336 | syn keyword krlBuildInFunction contained Forward Inverse inv_pos |
| 337 | " cFoo sFoo |
| 338 | syn keyword krlBuildInFunction contained cClose cOpen cRead cWrite sRead sWrite |
| 339 | " string |
| 340 | syn keyword krlBuildInFunction contained StrToBool StrToInt StrToReal StrToString StrToFrame StrToPos StrToE3Pos StrToE6Pos StrToAxis StrToE3Axis StrToE6Axis |
| 341 | syn keyword krlBuildInFunction contained StrAdd StrClear StrCopy StrComp StrFind StrLen StrDeclLen StrToBool StrToInt StrToReal StrToString |
| 342 | " diag |
| 343 | syn keyword krlBuildInFunction contained diag_start diag_stop get_DiagState |
| 344 | " rdc mam pid |
| 345 | syn keyword krlBuildInFunction contained CheckPidOnRdc check_mam_on_rdc get_rdc_fs_state |
| 346 | syn keyword krlBuildInFunction contained set_mam_on_hd copy_mam_hd_to_rdc copy_mam_rdc_to_hd |
| 347 | syn keyword krlBuildInFunction contained PidToHd PidToRdc |
| 348 | syn keyword krlBuildInFunction contained cal_to_rdc rdc_file_to_hd |
| 349 | syn keyword krlBuildInFunction contained delete_pid_on_rdc delete_rdc_content |
| 350 | syn keyword krlBuildInFunction contained create_rdc_archive restore_rdc_archive |
| 351 | " ioctl |
| 352 | syn keyword krlBuildInFunction contained IOCtl cIOCtl |
| 353 | syn keyword krlBuildInFunction contained WSpaceGive WSpaceTake |
| 354 | " sync |
| 355 | syn keyword krlBuildInFunction contained Sync SyncCmd CancelProgSync |
| 356 | " remote |
| 357 | syn keyword krlBuildInFunction contained RemoteCmd RemoteRead |
| 358 | " msg/dlg |
| 359 | syn keyword krlBuildInFunction contained IsMessageSet clear_KrlMsg get_MsgBuffer exists_KrlDlg exists_KrlMsg set_KrlDlg set_KrlDlgAnswer set_KrlMsg |
| 360 | " robvers |
| 361 | syn keyword krlBuildInFunction contained maximize_UsedxRobvers set_UsedxRobvers |
| 362 | " md_foo |
| 363 | syn keyword krlBuildInFunction contained md_Cmd md_GetState md_SetState md_Asgn |
| 364 | " emi |
| 365 | syn keyword krlBuildInFunction contained emi_ActPos emi_EndPos emi_StartPos emi_RecState emi_RecName |
| 366 | " var |
| 367 | syn keyword krlBuildInFunction contained cast_from cast_to |
| 368 | syn keyword krlBuildInFunction contained GetVarsize GetCycDef get_sig_inf get_decl_place VarType VarState |
| 369 | " sys |
| 370 | syn keyword krlBuildInFunction contained GetSysState get_system_data set_system_data set_system_data_delayed |
| 371 | " err |
| 372 | syn keyword krlBuildInFunction contained err_clear err_raise |
| 373 | " motion |
| 374 | syn keyword krlBuildInFunction contained delete_backward_buffer rob_stop rob_stop_release set_brake_delay suppress_repositioning VectorMoveOn VectorMoveOff |
| 375 | " torque |
| 376 | syn keyword krlBuildInFunction contained set_torque_limits reset_torque_limits |
| 377 | " krc1 |
| 378 | syn keyword krlBuildInFunction contained cLcopy cCurpos cNew cClear cRelease cKey |
| 379 | if g:krlGroupName |
| 380 | highlight default link krlBuildInFunction BuildInFunction |
| 381 | else |
| 382 | highlight default link krlBuildInFunction Function |
| 383 | endif |
| 384 | " }}} BuildInFunction |
| 385 | |
| 386 | " Function {{{ |
| 387 | syn match krlFunction /[a-zA-Z_]\w* *(/me=e-1 contains=krlBuildInFunction |
| 388 | highlight default link krlFunction Function |
| 389 | " }}} Function |
| 390 | |
| 391 | " Error {{{ |
| 392 | if get(g:, 'krlShowError', 1) |
| 393 | " some more or less common typos |
| 394 | " |
| 395 | " vars or funcs >24 chars are not possible in krl. a234567890123456789012345 |
Patrick Meiser-Knosowski | 92f076e | 2023-08-09 20:35:35 +0200 | [diff] [blame] | 396 | syn match krlError0 /\w\{25,}/ containedin=krlFunction,krlNames,krlLabel,krlEnumVal,krlSysvars |
Bram Moolenaar | 75ab590 | 2022-04-18 15:36:40 +0100 | [diff] [blame] | 397 | " |
| 398 | " should be interrupt (on|off) \w+ |
| 399 | syn match krlError1 /\vinterrupt[ \t(]+[_$a-zA-Z0-9]+[_$a-zA-Z0-9.\[\]()+\-*/]*[ \t)]+o%(n|ff)>/ |
| 400 | " |
| 401 | " for bla==5 to 7... |
| 402 | " || |
| 403 | syn match krlError3 /\v%(^\s*for%(\(|\s)+[_$a-zA-Z]+[_$a-zA-Z0-9.\[\]()+\-*/ ]*\s*)@<=[:=]\=/ |
| 404 | " |
| 405 | " TODO optimize performance |
| 406 | " wait for a=b |
| 407 | " | |
| 408 | syn match krlError4 /\v%(^\s*%(return|wait\s+for|if|while|until|%(global\s+)?interrupt\s+decl)>[^;]+[^;<>=])@<=\=[^=]/ |
| 409 | " |
| 410 | " wait for a><b |
| 411 | " || |
| 412 | syn match krlError5 /\v%(^\s*%(return|wait\s+for|if|while|until|%(global\s+)?interrupt\s+decl)>[^;]+)@<=\>\s*\</ |
| 413 | " |
| 414 | " if (a==5) (b==6) ... |
| 415 | " ||| |
| 416 | syn match krlError6 /\v%(^\s*%(return|wait\s+for|if|while|until|%(global\s+)?interrupt\s+decl)>[^;]+[^;])@<=\)\s*\(/ |
| 417 | " |
| 418 | " TODO optimize performance |
| 419 | " a == b + 1 |
| 420 | " a := b + 1 |
| 421 | " || |
| 422 | 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*)@<=[:=]\=/ |
| 423 | syn match krlError7 /\v\c%(^\s*%(decl\s+)%(global\s+)?%(const\s+)?\w+\s+\w+\s*)@<=[:=]\=/ |
| 424 | syn match krlError7 /\v\c%(^\s*%(decl\s+)?%(global\s+)?%(const\s+)?%(bool\s+|int\s+|real\s+|char\s+)\w+\s*)@<=[:=]\=/ |
| 425 | " |
| 426 | " this one is tricky. Make sure this does not match trigger instructions; OK, next try, now search for false positives |
| 427 | " TODO optimize performance |
| 428 | " a = b and c or (int1=int2) |
| 429 | " | |
| 430 | syn match krlError8 /\v(^\s*[_$a-zA-Z]+[_$a-zA-Z0-9.\[\]()+\-*/]*\s*\=[^;]*[^;<>=])@<=\=\ze[^=]/ |
| 431 | " |
| 432 | " <(distance|delay|prio)> := |
| 433 | " <(distance|delay|prio)> == |
| 434 | " || |
| 435 | syn match krlError9 /\v(^[^;]*<(distance|delay|prio|minimum|maximum)\s*)@<=[:=]\=/ |
| 436 | " |
| 437 | " 'for', 'while' or 'repeat' followed by 'do' |
| 438 | syn match krlError10 /\c\v^\s*(until|while|for)>[^;]*<do>/ |
| 439 | " |
| 440 | highlight default link krlError0 Error |
| 441 | highlight default link krlError1 Error |
| 442 | highlight default link krlError2 Error |
| 443 | highlight default link krlError3 Error |
| 444 | highlight default link krlError4 Error |
| 445 | highlight default link krlError5 Error |
| 446 | highlight default link krlError6 Error |
| 447 | highlight default link krlError7 Error |
| 448 | highlight default link krlError8 Error |
| 449 | highlight default link krlError9 Error |
| 450 | highlight default link krlError10 Error |
| 451 | endif |
| 452 | " }}} Error |
| 453 | |
| 454 | " Finish {{{ |
| 455 | let &cpo = s:keepcpo |
| 456 | unlet s:keepcpo |
| 457 | |
| 458 | let b:current_syntax = "krl" |
| 459 | " }}} Finish |
| 460 | |
| 461 | " vim:sw=2 sts=2 et fdm=marker |