aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2024-11-19 22:29:18 +0100
committerChristian Clason <ch.clason+github@icloud.com>2024-11-20 09:31:15 +0100
commitde9ed1ca5478481679df23f894b92b6756be7aed (patch)
tree26195a48d09fe13aa8feded19a3c112ad7951d85
parentfd57f39766c9f26da739214288f90be74223c3cd (diff)
downloadrneovim-de9ed1ca5478481679df23f894b92b6756be7aed.tar.gz
rneovim-de9ed1ca5478481679df23f894b92b6756be7aed.tar.bz2
rneovim-de9ed1ca5478481679df23f894b92b6756be7aed.zip
vim-patch:9.1.0874: filetype: karel files are not detected
Problem: filetype: karel files are not detected Solution: detect '*.kl' files as karel filetype, include syntax and filetype plugin (Kirill Morozov) closes: vim/vim#16075 https://github.com/vim/vim/commit/fdac54d7bbf6d68a8bf741e734b86d0f1998ac86 Co-authored-by: Kirill Morozov <kirill@robotix.pro> Co-authored-by: KnoP-01 <knosowski@graeffrobotics.de>
-rw-r--r--runtime/ftplugin/karel.vim16
-rw-r--r--runtime/lua/vim/filetype.lua2
-rw-r--r--runtime/syntax/karel.vim112
-rw-r--r--test/old/testdir/test_filetype.vim1
4 files changed, 131 insertions, 0 deletions
diff --git a/runtime/ftplugin/karel.vim b/runtime/ftplugin/karel.vim
new file mode 100644
index 0000000000..8ccc2b32ce
--- /dev/null
+++ b/runtime/ftplugin/karel.vim
@@ -0,0 +1,16 @@
+" Vim filetype plugin file
+" Language: KAREL
+" Last Change: 2024-11-18
+" Maintainer: Kirill Morozov <kirill@robotix.pro>
+" Credits: Patrick Meiser-Knosowski for the initial implementation.
+
+if exists("b:did_ftplugin")
+ finish
+endif
+let b:did_ftplugin = 1
+
+setlocal comments=:--
+setlocal commentstring=--\ %s
+setlocal suffixesadd+=.kl,.KL
+
+let b:undo_ftplugin = "setlocal com< cms< sua<"
diff --git a/runtime/lua/vim/filetype.lua b/runtime/lua/vim/filetype.lua
index e1e73d63fe..9010adf777 100644
--- a/runtime/lua/vim/filetype.lua
+++ b/runtime/lua/vim/filetype.lua
@@ -653,6 +653,8 @@ local extension = {
jsp = 'jsp',
jl = 'julia',
just = 'just',
+ kl = 'karel',
+ KL = 'karel',
kdl = 'kdl',
kv = 'kivy',
kix = 'kix',
diff --git a/runtime/syntax/karel.vim b/runtime/syntax/karel.vim
new file mode 100644
index 0000000000..85c78529e6
--- /dev/null
+++ b/runtime/syntax/karel.vim
@@ -0,0 +1,112 @@
+" Vim syntax file
+" Language: KAREL
+" Last Change: 2024-11-17
+" Maintainer: Kirill Morozov <kirill@robotix.pro>
+" Credits: Jay Strybis for the initial implementation and Patrick Knosowski
+" for a couple of fixes.
+
+if exists("b:current_syntax")
+ finish
+endif
+
+" KAREL is case-insensitive
+syntax case ignore
+
+" Identifiers
+syn match karelIdentifier /[a-zA-Z0-9_]\+/
+hi def link karelIdentifier Identifier
+
+" Constants
+syn keyword karelConstant CR
+syn region karelString start="'" end="'"
+syn match karelReal /\d\+\.\d\+/
+syn match karelInteger /\d\+/
+syn keyword karelBoolean true false
+hi def link karelConstant Constant
+hi def link karelString String
+hi def link karelInteger Number
+hi def link karelReal Float
+hi def link karelBoolean Boolean
+
+" Directives
+syn match karelDirective /%[a-zA-Z]\+/
+hi def link karelDirective PreProc
+
+" Operators
+syn keyword karelOperator AND OR NOT DIV MOD
+syn match karelOperator /[\+\-\*\/\<\=\>\:\#\@]/
+syn match karelOperator /<=/
+syn match karelOperator />=/
+syn match karelOperator /<>/
+syn match karelOperator />=</
+hi def link karelOperator Operator
+
+" Types
+syn keyword karelType ARRAY BOOLEAN BYTE CONFIG DISP_DAT_T FILE INTEGER JOINTPOS PATH POSITION QUEUE_TYPE REAL SHORT STD_PTH_NODE STRING VECTOR XYZWPR XYZWPREXT
+syn keyword karelStructure STRUCTURE ENDSTRUCTURE
+hi def link karelType Type
+hi def link karelStructure Typedef
+
+syn keyword karelAction NOABORT NOMESSAGE NOPAUSE PAUSE PULSE RESUME STOP UNHOLD UNPAUSE
+syn match karelAction /SIGNAL EVENT/
+syn match karelAction /SIGNAL SEMAPHORE/
+hi def link karelAction Keyword
+
+syn keyword karelFunction ABS ACOS APPROACH ARRAY_LEN ASIN ATAN2 ATTACH BYNAME BYTES_LEFT CHR COS CURJPOS CURPOS CURR_PROG EXP
+syn keyword karelFunction FRAME GET_FILE_POS GET_JPOS_REG GET_JPOS_TPE GET_PORT_ATR GET_POS_REG GET_POS_TPE GET_USEC_TIM INDEX
+syn keyword karelFunction IN_RANGE INV IO_STATUS J_IN_RANGE JOINT2POS LN MIRROR MOTION_CTL NODE_SIZE ORD ORIENT PATH_LEN POS POS2JOINT
+syn keyword karelFunction ROUND SEMA_COUNT SIN SQRT STR_LEN SUB_STR TAN TRUNC UNINIT
+hi def link karelFunction Function
+
+syn keyword karelClause EVAL FROM IN WHEN WITH
+hi def link karelClause Keyword
+
+syn keyword karelConditional IF THEN ELSE ENDIF SELECT ENDSELECT CASE
+hi def link karelConditional Conditional
+
+syn keyword karelRepeat WHILE DO ENDWHILE FOR
+hi def link karelRepeat Repeat
+
+syn keyword karelProcedure ABORT_TASK ACT_SCREEN ACT_TBL ADD_BYNAMEPC ADD_DICT ADD_INTPC ADD_REALPC ADD_STRINGPC APPEND_NODE APPEND_QUEUE
+syn keyword karelProcedure ATT_WINDOW_D ATT_WINDOW_S AVL_POS_NUM
+syn keyword karelProcedure BYTES_AHEAD
+syn keyword karelProcedure CALL_PROG CALL_PROGLIN CHECK_DICT CHECK_EPOS CHECK_NAME CLEAR CLEAR_SEMA CLOSE_TEP CLR_IO_STAT CLR_PORT_SIM CLR_POS_REG
+syn keyword karelProcedure CNC_DYN_DISB CNC_DYN_DISE CNC_DYN_DISI CNC_DYN_DISP CNC_DYN_DISR CNC_DYN_DISS CNCL_STP_MTN CNV_CNF_STRG CNV_CONF_STR CNV_INT_STR CNV_JPOS_REL CNV_REAL_STR CNV_REL_JPOS CNV_STR_CONF CNV_STR_INT CNV_STR_REAL CNV_STR_TIME CNV_TIME_STR
+syn keyword karelProcedure COMPARE_FILE CONT_TASK COPY_FILE COPY_PATH COPY_QUEUE COPY_TPE CREATE_TPE CREATE_VAR
+syn keyword karelProcedure DAQ_CHECKP DAQ_REGPIPE DAQ_START DAQ_STOP DAQ_UNREG DAQ_WRITE DEF_SCREEN DEF_WINDOW
+syn keyword karelProcedure DELETE_FILE DELETE_NODE DELETE_QUEUE DEL_INST_TPE DET_WINDOW DISCTRL_ALPH DISCTRL_FORM DISCTRL_LIST DISCTRL_PLMN DISCTRL_SBMN DISCTRL_TBL DISMOUNT_DEV DOSFILE_INF
+syn keyword karelProcedure ERR_DATA FILE_LIST FORCE_SPMENU FORMAT_DEV GET_ATTR_PRG GET_PORT_ASG GET_PORT_CMT GET_PORT_MOD GET_PORT_SIM GET_PORT_VAL GET_POS_FRM GET_POS_TYP GET_PREG_CMT GET_QUEUE
+syn keyword karelProcedure GET_REG GET_REG_CMT GET_SREG_CMT GET_STR_REG GET_TIME GET_TPE_CMT GET_TPE_PRM GET_TSK_INFO GET_USEC_SUB GET_VAR
+syn keyword karelProcedure INI_DYN_DISB INI_DYN_DISE INI_DYN_DISI INI_DYN_DISP INI_DYN_DISR INI_DYN_DISS INIT_QUEUE INIT_TBL INSERT_NODE INSERT_QUEUE IO_MOD_TYPE
+syn keyword karelProcedure KCL KCL_NO_WAIT KCL_STATUS LOAD LOAD_STATUS LOCK_GROUP MODIFY_QUEUE MOUNT_DEV MOVE_FILE MSG_CONNECT MSG_DISO MSG_PING
+syn keyword karelProcedure OPEN_TPE PAUSE_TASK PEND_SEMA PIPE_CONFIG POP_KEY_RD POS_REG_TYPE POST_ERR POST_ERR_L POST_SEMA PRINT_FILE PROG_BACKUP PROG_CLEAR PROG_RESTORE PROG_LIST
+syn keyword karelProcedure PURGE_DEV PUSH_KEY_RD READ_DICT READ_DICT_V READ_KB REMOVE_DICT RENAME_FILE RENAME_VAR RENAME_VARS RESET RUN_TASK SAVE SAVE_DRAM SELECT_TPE SEND_DATAPC SEND_EVENTPC SET_ATTR_PRG SET_CURSOR SET_EPOS_REG SET_EPOS_TPE
+syn keyword karelProcedure SET_FILE_ATR SET_FILE_POS SET_INT_REG SET_JPOS_REG SET_JPOS_TPE SET_LANG SET_PERCH SET_PORT_ASG SET_PORT_ATR SET_PORT_CMT SET_PORT_MOD SET_PORT_SIM SET_PORT_VAL SET_POS_REG SET_POS_TPE SET_PREG_CMT SET_REAL_REG SET_REG CMT SET_SREG_CMT SET_STR_REG SET_TIME SET_TPE_CMT SET_TRNS_TPE SET_TSK_ATTR SET_TSK_NAME SET_VAR
+syn keyword karelProcedure TRANSLATE UNLOCK_GROUP UNPOS V_CAM_CALIB V_GET_OFFSET V_GET_PASSFL V_GET_QUEUE V_INIT_QUEUE V_RALC_QUEUE V_RUN_FIND V_SET_REF V_START_VTRK V_STOP_VTRK VAR_INFO VAR_LIST VOL_SPACE VREG_FND_POS VREG_OFFSET
+syn keyword karelProcedure WRITE_DICT WRITE_DICT_V XML_ADDTAG XML_GETDATA XML_REMTAG XML_SCAN XML_SETVAR
+hi def link karelProcedure Function
+
+syn keyword karelStatement ABORT CONDITION ENDCONDITION CONTINUE DELAY ERROR EVENT FOR ENDFOR HOLD READ RELEASE REPEAT RETURN SEMAPHORE UNTIL USING ENDUSING WRITE
+syn match karelStatement /CANCEL FILE/
+syn match karelStatement /CLOSE FILE/
+syn match karelStatement /CLOSE HAND/
+syn match karelStatement /CONNECT TIMER/
+syn match karelStatement /DISABLE CONDITION/
+syn match karelStatement /DISCONNECT TIMER/
+syn match karelStatement /ENABLE CONDITION/
+syn match karelStatement /GO TO/
+syn match karelStatement /OPEN FILE/
+syn match karelStatement /OPEN HAND/
+syn match karelStatement /PURGE CONDITION/
+syn match karelStatement /RELAX HAND/
+syn match karelStatement /WAIT FOR/
+hi def link karelStatement Statement
+
+syn keyword karelKeyword BEGIN CONST END PROGRAM ROUTINE STRUCT TYPE VAR
+hi def link karelKeyword Keyword
+
+" Comments
+syn region karelComment start="--" end="$"
+hi def link karelComment Comment
+
+let b:current_syntax = "karel"
diff --git a/test/old/testdir/test_filetype.vim b/test/old/testdir/test_filetype.vim
index 19b7d41552..2749a6a200 100644
--- a/test/old/testdir/test_filetype.vim
+++ b/test/old/testdir/test_filetype.vim
@@ -392,6 +392,7 @@ func s:GetFilenameChecks() abort
\ 'jsp': ['file.jsp'],
\ 'julia': ['file.jl'],
\ 'just': ['justfile', 'Justfile', '.justfile', 'config.just'],
+ \ 'karel': ['file.kl', 'file.KL'],
\ 'kconfig': ['Kconfig', 'Kconfig.debug', 'Kconfig.file', 'Config.in', 'Config.in.host'],
\ 'kdl': ['file.kdl'],
\ 'kivy': ['file.kv'],