Перейти к содержимому
JaggerDer

Cursor

Рекомендуемые сообщения

yo6PKp6X5UY.jpg

 

Библиотека CURSOR

 

...позволяет создавать виртуальный курсор и предоставляет набор функций для управления им. Предполагается, что библиотека будет использоваться для создания различных текстовых полей, текстовых редакторов и т.п.

 

Что умеет?

 

Умеет перемещать курсор по тексту! А так же реализует основные возможности простейшего текстового редактора, такие как удалить символ, вставить символ, перенос строки, слияние двух строк...

 

Немного о устройстве

 

Библиотека позволяет создавать несколько независимых друг от друга курсоров, каждый из которых имеет свою позицию на тексте в трех экземплярах:

  1. Абсолютное положение
  2. Относительное положение
  3. Разность абсолютного и относительного - иначе просто дельта

Кроме того каждый курсор хранит в себе массив строк.

 

 

Получить мультикурсор как в SublimeText у вас скорее всего не выйдет. Можно конечно попытаться, присвоив массиву строку второго курсора массив строк первого(в lua массивы передаются по ссылке).

 

 

 

Абсолютные координаты для определения курсора в тексте;

Относительные координаты используются только в пределах зоны редактирования текста;

Дельта говорит нам о том насколько сильно разошлись эти значения: эта информация полезна для отрисовки текста.

Вот и все, такая небольшая библиотека вышла.

 

Описание функций

 

Все функции описаны в файле с кодом.
Выдержка:

 

Описание функций библиотеки cursor:
	1. Служебное:
		1.1. range(_, bottom:number, top:number, value:number, step:number):number
		1.2. isPositive(_, value:number):boolean
		1.3. isPositive_zero(_, value:number):number or boolean

	2. Функции библиотеки:
		2.1. cursor.add([x:number, y:number, width:number, height:number]):table
			создает и инциализирует объект cursor, который содержит информацию о местоположении курсора,
			размере и положении поля ввода и массив с обрабатываемыми строками.
			Возвращает готовый объект.

		2.2. addString(value:string, [position:number]):nil
			добавляет строку value в массив строк в позицию position(если не указано, то вставляет строку в конец).
			Кроме того функция вызывает перерасчет позиции курсора.

		2.3. removeString([position:number]):nil
			удаляет из массива строку строку в позиции position(если не указано, то удаляется последняя строка).
			Вызывает перерасчет позиции курсора.

		2.4. replaceString(value:string, [position:number]):nil
			заменяет строку в позиции position(если не указано, то заменяет последнюю строку) на строку value. 
			Вызывает перерасчет позиции курсора.

		2.5. insertChar(value:string):nil
			вставляет строку value в разрыв строки на которой находится курсор.
			Вызывает перерасчет позиции курсора.

		2.6. replaceChar(value:string):nil
			заменяет символ в позиции курсора на строку value.
			Вызывает перерасчет позиции курсора.

		2.7. removeChar():nil
			удаляет символ в позиции курсора.
			Вызывает перерасчет позиции курсора.

		2.8. splitLine():nil
			разрывает строку в позиции курсора и переносит вторую разорванную часть на новую строку.
			Вызывает перерасчет позиции курсора.

		2.9. concatLine():nil
			соединяет текущую строку с предыдущей.
			Вызывает перерасчет позиции курсора.

		2.10. cursor:onEndLine():boolean
			проверяет, находится ли курсор в конце строки. Если да, то возвращается true, а false в противном случае.

		2.11. cursor:onHomeLine():boolean
			проверяет, находится ли курсор в начале строки. Если да, то возвращается true, а false в противном случае.

		2.12. cursor:onBottom():boolean
			проверяет, находится ли курсор на последней строке. Если да, то возвращается true, а false в противном случае.

		2.13. cursor:onTop():boolean
			проверяет, находится ли курсор на первой строке. Если да, то возвращается true, а false в противном случае.

		2.14. cursor:checkLine(step:number):boolean, boolean
			проверяет, сможет ли курсор переместиться на step шагов.
			Возвращет true, если возможно, а false в противном случае.
			Второе возвращаемое значение говорит о том, меньше ли текущая строка проверяемой строки.

		2.14. set(absolute_x:number, absolute_y:number):nil
			устанавливает курсор в абсолютную позицию x, y.
			Вызывает перерасчет позиции курсора.

		2.15. move(step_x:number, step_y:number):nil
			перемещает курсор на x, y шагов, если это возможно.
			Вызывает перерасчет позиции курсора.

		2.16. cursor:moveHome():nil
			перемещает курсор на начало текущей строки.

		2.17. cursor:moveEnd():nil
			перемещает курсор в конец текущей строки.

		2.18. cursor:moveHomeNextLine(step:number):nil
			перемещает курсор на начало следующей строки, если это возможно.

		2.19. cursor:moveEndNextLine(step:number):nil
			перемещает курсор в конец следующей строки, если это возможно.

		2.20. cursor:moveEndPrevLine(step:number):nil
			перемещает курсор в конец предыдущей строки, если это возможно.

 

 

 

Скачать

 

https://github.com/Pirnogion/OpenComputers_library/blob/master/cursor/cursor.lua

https://github.com/Pirnogion/OpenComputers_library/blob/master/cursor/cursor-demo.lua

Библиотека: wget https://raw.githubusercontent.com/Pirnogion/OpenComputers_library/master/cursor/cursor.lua lib/cursor.lua -f
Демонстрация: wget https://raw.githubusercontent.com/Pirnogion/OpenComputers_library/master/cursor/cursor-demo.lua cursor-demo.lua -f
Изменено пользователем JaggerDer

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...