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

ECS

Гуру
  • Публикации

    533
  • Зарегистрирован

  • Посещение

  • Победитель дней

    203

Все публикации пользователя ECS

  1. Ссылка на скачивание: pastebin get CcusRikg lib/scale.luaДанная библиотека избавит вас от надоедливых "черных полос", возникающих при выставлении собственного разрешения экрана. Она крайне проста в использовании: --Подгружаем библиотеку local scale = require("scale") --Выставляем масштаб монитора scale.set(1) Функция scale.set() требует одно-единственное число в диапазоне от 0.1 до 1, при этом 1 представляет собой максимальный масштаб. Она универсальна, работает с любыми типами мониторов и видеокарт, работает также с вертикальной ориентацией экрана. Ниже несколько примеров использования:
  2. Это аналог string:sub() по сути. Если строка имеет 1000 символов, то логично, что ее нужно обрезать по ширине экрана, чтобы не рисовался лишний кал и не нагружался gpu. Limit этим и занимается. И не нужно писать "по-моему" - мне, как автору либы, лучше знать, ограничивает данный аргумент что-то или нет. Насчет обрезки слева - да, сделаю в ближайшем времени, спасибо
  3. Для сторонних программ, разумеется. Меня стандартный Edit не устраивает ни коим образом, буду допиливать свою среду разработки. А помимо этой среды подсветку буду юзать в предпросмотре файлов в клиенте Pastebin - то есть мы уже имеем как минимум две программы, где потребуется данная либа. Не дублировать же один и тот же код в каждой из них, верно? А вот за это большое спасибо, люблю конструктив. Сейчас потестирую быстродействие. UPD: прироста скорости не заметил вовсе. Если она и возросла, то визуально это не подтвердилось.
  4. Вступление: Решил я на днях написать хорошую IDE для OpenComputers и столкнулся с тем, что в ванильной OpenOS напрочь отсутствует подсветка синтаксиса. Надо это исправить! Если найдутся какие-либо недочеты в плане правильности подсветки - пишите, пофиксим. Скачать библиотеку: https://github.com/IgorTimofeev/MineOS/blob/2967e780d35c2e4363dd7fe81de5ba78310c3d55/lib/oldSyntax.lua Инструкция по использованию: --Подключаем библиотеку local syntax = require("syntax") --Создаем любую строку с операторами lua local stroka = "while true do print(\"Hello world!\")" --x, y - стартовые координаты отрисовки текста. --limit - ограничение отрисовки по ширине строки. Зачем рисовать лишние пиксели? local x, y, limit = 2, 2, 20 --Выводим строку на экран в подсвеченном варианте syntax.highlightAndDraw(x, y, limit, stroka) На экране отобразится следующее: Другие функции: ● syntax.setColorScheme(цветовая схема) Устанавливает цветовую схему по выбору пользователя. На данный момент есть лишь две схемы: "midnight" и "sunrise". ● syntax.highlightFileForDebug(путь к файлу [,цветовая схема]) Открывает обычный файл по указанному пути и выводит его содержимое в подсвеченном виде на экран. Размер содержимого ограничен размером экрана. Пример использования этой функции предоставлен на самом первом скриношоте. Насчет оптимизации и ускорения: Я постарался минимизировать задержки в выполнении скрипта различными путями. Во-первых, отрисовка выполняется не попиксельно, а построчно. То есть если мы имеем строку красного цвета, то функция отрисовки выведет на экран сразу всю строку, а не каждый символ по отдельности. Во-вторых, цвет текста изменяется только тогда, когда это необходимо, а не каждый раз при смене символов. На данный момент у программы есть существенный минус: при отрисовке выполняется поиск совпадений шаблонов по строке через оператор string.find(), однако изначально он не дружит с юникодом. Поэтому пришлось использовать костыль unicode.find(), существенно замедляющий процесс поиска. Если у кого-то имеется более оптимизированный костыль или способ поиска по юникоду, буду крайне благодарен за помощь в этом деле. Для ясности прикладываю видосик: http://www.youtube.com/watch?v=T-f8jGdYO0M&feature=youtu.be Исходный код unicode.find(): function unicode.find(str, pattern, init, plain) if init then if init < 0 then init = -#unicode.sub(str,init) elseif init > 0 then init = #unicode.sub(str,1,init-1)+1 end end a, b = string.find(str, pattern, init, plain) if a then local ap,bp = str:sub(1,a-1), str:sub(a,b) a = unicode.len(ap)+1 b = a + unicode.len(bp)-1 return a,b else return a end end
×
×
  • Создать...