D7: editor multi-cursor support

Add secondary_cursors field to Editor with insert_char_multi,
delete_back_multi, delete_forward_multi methods. Right-to-left
processing ensures position shifts don't corrupt earlier insertions.

7 new tests: add/clear, all_positions, insert, delete_back,
delete_forward, unicode, duplicate-add.
This commit is contained in:
2026-07-05 22:29:19 +03:00
parent 7a2b0d5160
commit b8aac3c9bc
2226 changed files with 876572 additions and 2382 deletions
@@ -0,0 +1,28 @@
cmake_minimum_required(VERSION 3.16)
project(custom_defines VERSION 6.7.0)
include(../test-and-comparison-helpers.cmake)
include(ECMGeneratePkgConfigFile)
include(ECMSetupVersion)
ecm_setup_version(PROJECT VARIABLE_PREFIX ATTICA
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/attica_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF6AtticaConfigVersion.cmake"
SOVERSION 6)
set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/KF6Attica.pc")
ecm_generate_pkgconfig_file(BASE_NAME KF6Attica
DESCRIPTION "Qt library to access Open Collaboration Services"
LIB_NAME KF6Attica
INCLUDE_INSTALL_DIR /usr/include/Attica
DEFINES -I\${prefix}/include/foo -I\${prefix}/include/bar
DEPS Qt6Core Qt6Network
FILENAME_VAR OutputFile
)
compare_files(GENERATED ${OutputFile}
ORIGINALS ${origfiles})
file(REMOVE ${OutputFile})
@@ -0,0 +1,29 @@
cmake_minimum_required(VERSION 3.16)
project(no_description_parameter_metainfo_with_description-param VERSION 5.43)
include(../test-and-comparison-helpers.cmake)
include(ECMGeneratePkgConfigFile)
include(ECMSetupVersion)
ecm_setup_version(PROJECT VARIABLE_PREFIX KCOREADDONS
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
SOVERSION 5)
set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/KF5CoreAddons2.pc")
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/metainfo_with_description.yaml
DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/metainfo_with_description.yaml ${CMAKE_CURRENT_SOURCE_DIR}/metainfo.yaml)
ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons2
DEPS Qt5Core
INCLUDE_INSTALL_DIR /usr/KCoreAddons
FILENAME_VAR OutputFile)
compare_files(GENERATED ${OutputFile}
ORIGINALS ${origfiles})
file(REMOVE ${OutputFile})
file(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/metainfo.yaml)
@@ -0,0 +1,29 @@
cmake_minimum_required(VERSION 3.16)
project(no_description_parameter_metainfo_with_description-param VERSION 5.43)
include(../test-and-comparison-helpers.cmake)
include(ECMGeneratePkgConfigFile)
include(ECMSetupVersion)
ecm_setup_version(PROJECT VARIABLE_PREFIX KCOREADDONS
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
SOVERSION 5)
set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/KF5CoreAddons3.pc")
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/metainfo_with_empty_description.yaml
DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/metainfo_with_empty_description.yaml ${CMAKE_CURRENT_SOURCE_DIR}/metainfo.yaml)
ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons3
DEPS Qt5Core
INCLUDE_INSTALL_DIR /usr/KCoreAddons
FILENAME_VAR OutputFile)
compare_files(GENERATED ${OutputFile}
ORIGINALS ${origfiles})
file(REMOVE ${OutputFile})
file(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/metainfo.yaml)
@@ -0,0 +1,29 @@
cmake_minimum_required(VERSION 3.16)
project(no_description_parameter_metainfo_without_description VERSION 5.43)
include(../test-and-comparison-helpers.cmake)
include(ECMGeneratePkgConfigFile)
include(ECMSetupVersion)
ecm_setup_version(PROJECT VARIABLE_PREFIX KCOREADDONS
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
SOVERSION 5)
set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/KF5CoreAddons3.pc")
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/metainfo_without_description.yaml
DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/metainfo_without_description.yaml ${CMAKE_CURRENT_SOURCE_DIR}/metainfo.yaml)
ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons3
DEPS Qt5Core
INCLUDE_INSTALL_DIR /usr/KCoreAddons
FILENAME_VAR OutputFile)
compare_files(GENERATED ${OutputFile}
ORIGINALS ${origfiles})
file(REMOVE ${OutputFile})
file(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/metainfo.yaml)
@@ -0,0 +1,24 @@
cmake_minimum_required(VERSION 3.16)
project(no_optional_arguments VERSION 5.43)
include(../test-and-comparison-helpers.cmake)
include(ECMGeneratePkgConfigFile)
include(ECMSetupVersion)
ecm_setup_version(PROJECT VARIABLE_PREFIX KCOREADDONS
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
SOVERSION 5)
set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/KF5CoreAddons.pc")
ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons
DESCRIPTION "KF5CoreAddons test"
DEPS Qt5Core
FILENAME_VAR OutputFile)
compare_files(GENERATED ${OutputFile}
ORIGINALS ${origfiles})
file(REMOVE ${OutputFile})
@@ -0,0 +1,32 @@
set(ECM_MODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../modules")
set(CMAKE_MODULE_PATH "${ECM_MODULE_DIR}")
set(CMAKE_INSTALL_PREFIX "/usr")
function (compare_files)
set(options)
set(oneValueArgs GENERATED ORIGINALS)
set(multiValueArgs)
cmake_parse_arguments(CF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
list(LENGTH CF_GENERATED count)
math(EXPR last "${count}-1")
foreach(i RANGE ${last})
list(GET CF_GENERATED ${i} generated_file)
if (NOT EXISTS "${generated_file}")
message(FATAL_ERROR "${generated_file} was not generated")
endif()
file(READ "${generated_file}" file_contents)
string(STRIP "${file_contents}" file_contents)
list(GET CF_ORIGINALS ${i} original_file)
if (NOT EXISTS "${original_file}")
message(FATAL_ERROR "Original ${original_file} was not found")
endif()
file(READ "${original_file}" original_contents)
string(STRIP "${original_contents}" original_contents)
if(NOT original_contents STREQUAL file_contents)
message(FATAL_ERROR "Different files: ${original_file} ${generated_file}")
endif()
endforeach()
endfunction()
@@ -0,0 +1,26 @@
cmake_minimum_required(VERSION 3.16)
project(with_an_URL_parameter VERSION 5.43)
include(../test-and-comparison-helpers.cmake)
include(ECMGeneratePkgConfigFile)
include(ECMSetupVersion)
ecm_setup_version(PROJECT VARIABLE_PREFIX KCOREADDONS
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
SOVERSION 5)
set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/KF5CoreAddons5.pc")
ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons5
DESCRIPTION "KF5CoreAddons test"
URL "https://www.example.org/"
DEPS Qt5Core
INCLUDE_INSTALL_DIR /usr/KCoreAddons
FILENAME_VAR OutputFile)
compare_files(GENERATED ${OutputFile}
ORIGINALS ${origfiles})
file(REMOVE ${OutputFile})
@@ -0,0 +1,29 @@
cmake_minimum_required(VERSION 3.16)
project(with_public_and_private_dependencies VERSION 5.43)
include(../test-and-comparison-helpers.cmake)
include(ECMGeneratePkgConfigFile)
include(ECMSetupVersion)
ecm_setup_version(PROJECT VARIABLE_PREFIX KCOREADDONS
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
SOVERSION 5)
set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/KF5CoreAddons4.pc")
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../../../tests/ECMGeneratePkgConfigFile/metainfo_without_description.yaml
DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})
file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/metainfo_without_description.yaml ${CMAKE_CURRENT_SOURCE_DIR}/metainfo.yaml)
ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons4
DEPS Public1 PRIVATE Private1 Private2 PUBLIC Public2
INCLUDE_INSTALL_DIR /usr/KCoreAddons
FILENAME_VAR OutputFile)
compare_files(GENERATED ${OutputFile}
ORIGINALS ${origfiles})
file(REMOVE ${OutputFile})
file(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/metainfo.yaml)