Поиск по сайту
Результаты поиска по тегам 'Подсветка синаксиса'.
Найдено 1 результат
-
Вступление: Решил я на днях написать хорошую 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