JaggerDer 90 Опубликовано: 13 января, 2016 (изменено) Библиотека CURSOR ...позволяет создавать виртуальный курсор и предоставляет набор функций для управления им. Предполагается, что библиотека будет использоваться для создания различных текстовых полей, текстовых редакторов и т.п. Что умеет? Умеет перемещать курсор по тексту! А так же реализует основные возможности простейшего текстового редактора, такие как удалить символ, вставить символ, перенос строки, слияние двух строк... Немного о устройстве Библиотека позволяет создавать несколько независимых друг от друга курсоров, каждый из которых имеет свою позицию на тексте в трех экземплярах: Абсолютное положение Относительное положение Разность абсолютного и относительного - иначе просто дельта Кроме того каждый курсор хранит в себе массив строк. Получить мультикурсор как в 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 Изменено 13 января, 2016 пользователем JaggerDer 5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах