runtime(cmake): sync runtime files with upstream (#13597)

Signed-off-by: e-kwsm@users.noreply.github.com
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/indent/cmake.vim b/runtime/indent/cmake.vim
index af27c0d..c1aa3bf 100644
--- a/runtime/indent/cmake.vim
+++ b/runtime/indent/cmake.vim
@@ -3,9 +3,9 @@
 " Author:       Andy Cedilnik <andy.cedilnik@kitware.com>
 " Maintainer:   Dimitri Merejkowsky <d.merej@gmail.com>
 " Former Maintainer: Karthik Krishnan <karthik.krishnan@kitware.com>
-" Last Change:  2022 Apr 06
+" Last Change:  2023 Dec 12
 "
-" Licence:      The CMake license applies to this file. See
+" License:      The CMake license applies to this file. See
 "               https://cmake.org/licensing
 "               This implies that distribution with Vim is allowed
 
@@ -55,32 +55,41 @@
   let cmake_indent_open_regex = '^\s*' . cmake_regex_identifier .
                     \           '\s*(' . cmake_regex_arguments .
                     \           '\(' . cmake_regex_comment . '\)\?$'
-
   let cmake_indent_close_regex = '^' . cmake_regex_arguments .
                     \            ')\s*' .
                     \            '\(' . cmake_regex_comment . '\)\?$'
 
-  let cmake_indent_begin_regex = '^\s*\(IF\|MACRO\|FOREACH\|ELSE\|ELSEIF\|WHILE\|FUNCTION\)\s*('
-  let cmake_indent_end_regex = '^\s*\(ENDIF\|ENDFOREACH\|ENDMACRO\|ELSE\|ELSEIF\|ENDWHILE\|ENDFUNCTION\)\s*('
+  let cmake_closing_parens_line = '^\s*\()\+\)\s*$'
 
-  " Add
-  if previous_line =~? cmake_indent_comment_line " Handle comments
-    let ind = ind
+  let cmake_indent_begin_regex = '^\s*\(BLOCK\|IF\|MACRO\|FOREACH\|ELSE\|ELSEIF\|WHILE\|FUNCTION\)\s*('
+  let cmake_indent_end_regex = '^\s*\(ENDBLOCK\|ENDIF\|ENDFOREACH\|ENDMACRO\|ELSE\|ELSEIF\|ENDWHILE\|ENDFUNCTION\)\s*('
+
+  if this_line =~? cmake_closing_parens_line
+    if previous_line !~? cmake_indent_open_regex
+      let ind = ind - shiftwidth()
+    endif
   else
-    if previous_line =~? cmake_indent_begin_regex
-      let ind = ind + shiftwidth()
+    " Add
+    if previous_line =~? cmake_indent_comment_line " Handle comments
+      let ind = ind
+    else
+      if previous_line =~? cmake_indent_begin_regex
+        let ind = ind + shiftwidth()
+      endif
+      if previous_line =~? cmake_indent_open_regex
+        let ind = ind + shiftwidth()
+      endif
     endif
-    if previous_line =~? cmake_indent_open_regex
-      let ind = ind + shiftwidth()
-    endif
-  endif
 
-  " Subtract
-  if this_line =~? cmake_indent_end_regex
-    let ind = ind - shiftwidth()
-  endif
-  if previous_line =~? cmake_indent_close_regex
-    let ind = ind - shiftwidth()
+    " Subtract
+    if this_line =~? cmake_indent_end_regex
+      let ind = ind - shiftwidth()
+    endif
+    if previous_line !~? cmake_closing_parens_line
+      if previous_line =~? cmake_indent_close_regex
+        let ind = ind - shiftwidth()
+      endif
+    endif
   endif
 
   return ind