-
Notifications
You must be signed in to change notification settings - Fork 0
Inline
Inline — это фреймворк на базе службы специальных возможностей Android (Accessibility Service), позволяющий расширять и автоматизировать взаимодействие с полями ввода текста. С помощью модулей, написанных на Lua (совместимых с Lua 5.2), вы можете добавлять пользовательские команды, автоматизировать ввод, создавать пользовательские интерфейсы и многое другое.
Каждый модуль представляет собой отдельный Lua-файл (.lua), расположенный в директории модулей Inline /sdcard/inline или во внутренней директории приложения.
local function hellocmd(_, query)
query:answer "Hello, world!"
end
return function(module)
module:registerCommand("hello", hellocmd, "Prints hello world")
endКоманды представляют собой функции, которые можно вызвать по названию, передав необходимый аргумент в виде строки. Команды могут быть сгруппированы по категориям и содержать описание, что позволяет получать список доступных команд с помощью команды {help}$.
В функцию передается экземпляр AccessibilityNodeInfo, представляющий информацию о ноде поля ввода, на котором пользователь вызвал команду, а также объект запроса пользователя, который хранит текст и аргументы, позволяя сформировать ответ.
Позволяет выводить результат выполнения команды, а также хранит аргументы и текст поля ввода.
local function democmd(_, query)
local args = query:getArgs() -- аргумент
query:answer("Вызов команды с аргументом " .. args)
end
return function(module)
module:registerCommand("demo", democmd)
end-
query:getText() -> string- Получить текущую строку поля ввода. -
query:getExpression() -> string- Получить строку выражения вызова команды. -
query:getArgs() -> string- Получить строку аргумента команды. -
query:getAccessibilityNodeInfo() -> AccessibilityNodeInfo- Получить информацию о ноде поля ввода. -
query:replaceExpression(string) -> string- Возвращает полную исходную строку поля ввода, где выражение вызова команды (expression) заменено на replacementText. Важно: Этот метод не изменяет поле ввода сам по себе, он лишь возвращает измененную строку. -
query:answer(text = "")- Устанавливает текст в поле ввода заместо вызова команды.
Функция обратного вызова, вызываемая при совпадении с маской события, указанной при регистрации наблюдателя.
На вход получает экземпляр AccessibilityNodeInfo, представляющий информацию о ноде поля ввода, в котором произошло событие.
Доступные типы событий:
inline.TYPE_TEXT_CHANGED - при изменении текста в поле ввода.
inline.TYPE_SELECTION_CHANGED - при изменении позиции курсора в поле ввода.
inline.TYPE_ALL_MASK - все события, перечисленные выше.
-- Пример: Логирование изменений текста
local function logger(input)
local text = inline:getText(input)
inline:toast("Текст изменен в поле: " .. text)
end
return function(module)
-- Регистрируем наблюдатель только для изменений текста
module:registerWatcher(logger, inline.TYPE_TEXT_CHANGED)
endПредставляет собой экземпляр службы AccessibilityService и предоставляет доступ к функциям Android API и управлению полями ввода. Доступен глобально во всех ваших Lua-скриптах.
-
inline:setText(node, text)- Устанавливает текст в переданной AccessibilityNodeInfo. -
inline:getText(node)- Получить текст из переданной AccessibilityNodeInfo. -
inline:setSelection(node, start, end)- Устанавливает позицию курсора в переданной AccessibilityNodeInfo. -
inline:cut(node)- Вырезает текст в буфер обмена в переданной AccessibilityNodeInfo. -
inline:copy(node)- Копирует текст в буфер обмена в переданной AccessibilityNodeInfo. -
inline:paste(node)- Вставляет текст из буфера обмена в переданной AccessibilityNodeInfo. -
inline:insertText(node, text)- Вставить текст заместо курсора в переданной AccessibilityNodeInfo.
-
inline:toast(string)- Выводит сообщение на экран пользователю. -
inline:timerTask(function)- Создает объект java.util.TimerTask из Lua-функции. -
inline:getTimer() -> Timer- Возвращает java.util.Timer для планирования задачTimerTask. -
inline:getSharedPreferences(name)- Возвращает SharedPreferences по названию. -
inline:getDefaultSharedPreferences()- Возвращает SharedPreferences по умолчанию. -
inline:getLoadedModules() -> HashMap<String, Module>- Возвращает загруженные модули (ключ — путь к файлу, значение — объект Module). -
inline:getAllCommands() -> HashMap<String, Command>- Возвращает все зарегистрированные команды (ключ — имя команды). -
inline:getAllWatchers() -> HashMap<LuaValue, Int>- Возвращает всех зарегистрированных наблюдателей (ключ — функция, значение — маска событий). -
inline:getAllPreferences() -> HashMap<String, HashSet<PreferencesItem>>- Возвращает все зарегистрированные предпочтения (ключ — категория). -
inline:getAllCommandFinders() -> HashSet<LuaValue>- Возвращает все зарегистрированные функции поиска команд.
-
module:setCategory(name)- Указывает категорию, которая будет применяться к следующим регистрациям команд и предпочтений. -
module:getCategory() -> string- Получить текущее название категории. -
module:getFilepath() -> string- Получить путь к модулю. -
module:registerCommand(name, function [, description])- Регистрирует новую команду (см. раздел "Команды"). -
module:registerWatcher(function, mask = inline.TYPE_TEXT_CHANGED)- Регистрирует новый наблюдатель для указанного типа событий (см. раздел "Наблюдатели"). -
module:registerCommandFinder(function)- Регистрирует поиск команд. -
module:registerPreferences(sharedPreferences, function)- Регистрирует каталог предпочтений с указанными SharedPreferences. -
module:registerPreferences(function)- Регистрирует каталог предпочтений. -
module:unregisterCommand(name)- Отменяет регистрацию команды по имени. Полезно для динамического управления командами модуля. -
module:unregisterWatcher(function)- Отменяет регистрацию наблюдателя (требуется ссылка на ту же функцию, что была передана при регистрации). -
module:unregisterCommandFinder(function)- Отменяет регистрацию поиска команд по функции. -
module:unload()- Отменяет регистрации модуля. -
module:saveLazyLoad()- Сохраняет кэш ленивой загрузки, позволяет загрузить модуль только при вызове одной из команд модуля.
Inline позволяет создавать два типа UI: страницы настроек (Предпочтения) и Плавающие окна. Оба используют один и тот же набор элементов интерфейса, создаваемых через таблицу-строитель.
local prefs = inline:getDefaultSharedPreferences()
local function getPreferences(builder)
return {
builder.checkBox("my_module_enabled", "Включить фичу X"):setDefault(true),
builder.textInput("user_api_key", "API Ключ пользователя"),
builder.slider("update_interval", 100):setDefault(30) -- Пример со Slider
}
end
return function(module)
module:setCategory "Мой Супер Модуль"
module:registerPreferences(getPreferences)
-- Пример чтения настройки в команде
module:registerCommand("doFeatureX", function(_, query)
local isEnabled = prefs:getBoolean("my_module_enabled", true) -- Читаем значение
if isEnabled then
local apiKey = prefs:getString("user_api_key", "")
query:answer("Фича X включена! API Ключ: " .. apiKey)
else
query:answer "Фича X отключена в настройках."
end
end, "Выполнить фичу X, если включена")
end-
builder:create(title, [sharedPreferences], builders...)- Создает новый диалог предпочтений. -
builder:cancel()- Закрыть текущий диалог предпочтений.
Позволяют отображать кастомный UI поверх других приложений. Используются для интерактивных инструментов, панелей быстрого доступа и т.д.
require "windows"
windows.create({ noLimits = true }, function(ui)
return {
"Text",
{
ui.button("Info", function()
end),
ui.spacer(8),
ui.button("Close", function()
ui:close()
end)
}
}
end)-
windows.getBoundsInScreen(node) -> Rect- Получить положение на экране переданной AccessibilityNodeInfo. -
windows.getScreenWidth() -> Int- Получить ширину экрана. -
windows.getScreenHeight() -> Int- Получить высоту экрана. -
windows.isSupported() -> boolean- Возвращает булево значение, указывающее на поддержку плавающих окон. -
windows.insertText() -> AccessibilityNodeInfo | false- Вставляет текст после курсора в последней ноде с которой взаимодействовал пользователь и возвращает AccessibilityNodeInfo. Если нода отсутствует или текущий фокус на окне то возвращает false. -
windows.supportInsert()- Включает поддержку вставки текста. Единожды -
windows.isInsertAvailable() -> boolean- Проверяет доступность вставки текста. -
windows.getLastNode() -> AccessibilityNodeInfo | nil- Возвращает последнюю отслеживаемую ноду поля ввода. -
windows.getLastText() -> string | nil- Возвращает текст последнего отслеживаемого поля ввода. -
windows.getLastPackage() -> string | nil- Возвращает имя пакета приложения, которому принадлежит последнее поле. -
windows.closeAll()- Закрывает все активные плавающие окна. -
windows.create(config, builderFunction) -> FloatingWindow- Создает плавающее окно с указанной таблицей конфигурации и функции возвращающая предпочтения. -
windows.createAligned(node, config, builderFunction) -> FloatingWindow- Создает плавающее окно над переданной AccessibilityNodeInfo.
-
autoFocus = true- Автофокус на элементах ввода в окне, разфокусировка при клике вне окна. -
cornerRadius = 16- Радиус скругления углов окна (в dp). -
paddingLeft, paddingTop, paddingRight, paddingBottom- Внутренние отступы окна (в dp). -
noLimits = false- Может ли окно выходить за пределы экрана. -
noBackground = false- Окно без фона. -
allowTouchMove = true- Позволяет перетаскивать окно пальцем. -
positionX = 0- Позиция X окна в пикселях. -
positionY = 0- Позиция Y окна в пикселях. -
offsetX = 0- Отступ по X окна в dp относительно позиции AccessibilityNodeInfo. -
offsetY = 0- Отступ по Y окна в dp относительно позиции AccessibilityNodeInfo. -
align = "right" | "left"- Гравитация у окна созданного над AccessibilityNodeInfo. -
gravity = gravityInt- Гравитация окна. -
backgroundColor = ARGBInt- Цвет фона окна (по умолчанию - в зависимости от темы). -
sharedPreferences = prefs- Объект SharedPreferences для элементов окна (по умолчанию - SharedPreferences по умолчанию).
Функции обратного вызова (продублируется в таблице конструктора):
-
onFocusChanged = nil- При изменении фокуса окна при автофокусе. -
onMove = nil- При перемещении окна. -
onClose = nil- При закрытии окна.
Внутри builderFunction плавающего окна
-
ui:close()- Закрыть окно. -
ui:isFocused() -> boolean- Возвращает состояние автофокуса. -
ui.layout -> View- Родительский элемент окна. -
ui.windowManager -> WindowManager- WindowManager.
Для создания предпочтений и пользовательского интерфейса, передается таблица Builder, предоставляющий методы для создания различных элементов интерфейса.
Унаследован от MaterialButton
-
builder.button(text, function)- Конструктор с слушателем. -
builder.button(text)- Конструктор. -
button:setListener(function)- Установить слушатель кнопки, возвращает себя.
Унаследован от MaterialCheckBox
-
builder.checkBox(sharedKey, text)- Конструктор. -
builder.checkBox(text, function)- Конструктор с слушателем. -
builder.checkBox(text)- Конструктор. -
checkBox:setListener(function)- Установить слушатель, возвращает себя. -
checkBox:setSharedKey(string)- Установить ключ предпочтения, возвращает себя. -
checkBox:setDefault(boolean)- Установить значение по умолчанию, возвращает себя.
Унаследован от MaterialSlider
builder.seekBarостаётся как алиас для обратной совместимости.
-
builder.slider(sharedKey, max)- Конструктор с указанием максимального значения. -
builder.slider(onStopTracking, max)- Конструктор с слушателем. -
builder.slider(onStopTracking)- Конструктор с слушателем. -
slider:setStep(number)- Установить шаг, возвращает себя. -
slider:setOnStopTracking(function)- Установить слушатель остановки перемещения ползунка, возвращает себя. -
slider:setOnProgressChanged(function)- Установить слушатель изменения прогресса, возвращает себя. -
slider:setSharedKey(string)- Установить ключ предпочтения, возвращает себя. -
slider:setDefault(number)- Установить значение по умолчанию, возвращает себя. -
slider:useInt()- Использовать целые числа вместо float, возвращает себя.
Унаследован от AppCompatSpinner
-
builder.spinner(sharedKey, choices)- Конструктор с указанием ключа предпочтения и списка вариантов. -
builder.spinner(choices, listener)- Конструктор с указанием списка вариантов и слушателя. -
spinner:setListener(function)- Установить слушатель выбора, возвращает себя. -
spinner:setSharedKey(string)- Установить ключ предпочтения, возвращает себя.
Унаследован от AppCompatTextView
-
builder.text(text)- Конструктор с указанием текста для отображения. -
"Text"- Строка в Lua также интерпретируется как текстовый элемент.
Унаследован от MaterialButton
-
builder.smallButton(text, function)- Конструктор с слушателем. -
builder.smallButton(text)- Конструктор. -
smallButton:setListener(function)- Установить слушатель кнопки, возвращает себя.
Унаследован от TextInputLayout
-
builder.textInput(sharedKey, hint)- Конструктор с указанием ключа предпочтения и подсказки. -
builder.textInput(hint, listener)- Конструктор с указанием подсказки и слушателя. -
builder.textInput(hint)- Конструктор с указанием только подсказки. -
textInput:setListener(function)- Установить слушатель ввода, возвращает себя. -
textInput:setSharedKey(string)- Установить ключ предпочтения, возвращает себя. -
textInput:setDefault(string)- Установить значение по умолчанию, возвращает себя. -
textInput:setDefault(number)- Установить значение по умолчанию, возвращает себя. -
textInput:setSingleLine(boolean)- Установить однострочный режим, возвращает себя. -
textInput:hidePassword()- Скрыть пароль, возвращает себя. -
textInput:showPassword()- Отменить скрытие, возвращает себя. -
textInput:setInputType(table)- Установить тип ввода, таблица состоит из названия полей в android.text.InputType, возвращает себя. -
textInput:useFloat()- Использовать float, возвращает себя. -
textInput:useInt()- Использовать int, возвращает себя. -
textInput:useLong()- Использовать long, возвращает себя.
Унаследован от LinearLayout
-
builder.column(views)- Конструктор для создания вертикальной колонки, принимающий таблицуviews, содержащую элементы интерфейса. -
{}(внутри Row или по умолчанию) - Создает колонку элементов, внутри строки элементов.
Унаследован от LinearLayout
-
builder.row(views)- Конструктор для создания горизонтальной строки, принимающий таблицуviews, содержащую элементы интерфейса. -
{}(внутри Column) - Создает строку элементов, внутри колонки элементов.
Унаследован от View
-
builder.spacer(padding)- Конструктор для создания элемента-прокладки с указанным значением отступа (padding).
Унаследован от View
Растягивающийся спейсер, заполняющий доступное пространство в LinearLayout с использованием layout weight.
-
builder.flexSpacer()- Конструктор с весом 1 по умолчанию. -
builder.flexSpacer(weight)- Конструктор с указанным весом.
Унаследован от View
Тонкий разделитель, автоматически адаптирующий ориентацию в зависимости от родительского LinearLayout.
-
builder.divider()- Конструктор.
Унаследован от MaterialCardView
Стилизованный контейнер с обводкой, скруглением и тенью для группировки элементов.
-
builder.card(views)- Конструктор, принимающий таблицу элементов. -
card:setCornerRadius(number)- Установить радиус скругления углов (dp), возвращает себя. -
card:setCardBackgroundColor(ARGBInt)- Установить цвет фона, возвращает себя. -
card:setStrokeColor(ARGBInt)- Установить цвет обводки, возвращает себя. -
card:setStrokeWidth(number)- Установить толщину обводки (dp), возвращает себя. -
card:setCardElevation(number)- Установить высоту тени, возвращает себя.
Унаследован от MaterialSwitch
-
builder.switch(sharedKey, text)- Конструктор. -
builder.switch(text, function)- Конструктор с слушателем. -
builder.switch(text)- Конструктор. -
switch:setListener(function)- Установить слушатель, возвращает себя. -
switch:setSharedKey(string)- Установить ключ предпочтения, возвращает себя. -
switch:setDefault(boolean)- Установить значение по умолчанию, возвращает себя.
Унаследован от ScrollView
-
builder.vscroll(view)- Конструктор для вертикальной прокрутки, принимающий элемент интерфейса.
Унаследован от HorizontalScrollView
-
builder.hscroll(view)- Конструктор для горизонтальной прокрутки, принимающий элемент интерфейса.
Встроенная библеотека menu позволяет создавать кликабельные интерактивные меню прямо в тексте.
require "menu"
local function showGreeting(_, query)
query:answer "Hello from the greeting menu!"
end
local function mainMenu(_, query)
local items = {
"Main Menu:\n",
{ caption = "[Greet]", action = showGreeting },
" ",
{ caption = "[Exit]", action = function(_, query) query:answer() end },
}
menu.create(query, items)
end
return function(module)
module:registerCommand("mainmenu", mainMenu, "Displays the main menu")
end-
menu.create(query, items [, cancelAction])- Создает текстовое меню и заменяет текст команды результатом.-
query (object): Объект запроса (query) из Inline, представляющий текстовое поле, в котором вызывается меню. Меню заменяет текст команды, вызвавшей его. -
items (table): Таблица, описывающая структуру меню. Каждый элемент таблицы может быть строкой (для простого текста) или таблицей (для интерактивного элемента меню). -
cancelAction (function): Функция, которая будет вызвана, если меню будет прервано, по умолчанию удаление меню
Формат элементов
items:- Строка: Отображает простой текст в меню.
-
Таблица: Представляет интерактивный элемент меню. Должна содержать следующие поля:
-
caption (string): Текст, отображаемый для этого элемента меню. -
action (function): Функция, которая будет вызвана, когда пользователь выберет этот элемент меню. Функция должна принимать объектquery.
-
-
Импорт происходит с помощью функции require.
Инструмент для форматирования текста с использованием HTML-подобных тегов.
require "colorama"
local function hellocmd(_, query)
-- Форматируем вывод с использованием colorama
local formattedText = colorama.bold("Привет, ") .. colorama.italic("мир") .. colorama.font("!", "red")
-- Отправляем отформатированный текст в поле ввода
query:answer(formattedText)
end
return function(module)
module:registerCommand("hello_colored", colorama.wrap(hellocmd), "Prints a formatted hello world message.")
end-
colorama.newline -> string- Строка для переноса (<br>). -
colorama.wrap(command) -> function- Оборачивает функцию команды для поддержки форматированного вывода черезcoloramaQuery. -
colorama.of(query) -> ColoramaQuery- Возвращает специальный объектcoloramaQueryдля форматированного ответа. -
colorama.quote(text) -> string- Экранирует специальные HTML символы в тексте. -
colorama.font(text, color) -> string- Оборачивает текст в тег<font color="...">. -
colorama.text(sep, text...) -> string- Объединяет строкиtextчерез разделительsep. -
colorama.bold(text) -> string- Оборачивает текст в тег<b>. -
colorama.italic(text) -> string- Оборачивает текст в тег<i>. -
colorama.small(text) -> string- Оборачивает текст в тег<small>. -
colorama.big(text) -> string- Оборачивает текст в тег<big>. -
colorama.strike(text) -> string- Оборачивает текст в тег<strike>. -
colorama.subscript(text) -> string- Оборачивает текст в тег<sub>. -
colorama.pre(text) -> string- Оборачивает текст в тег<pre>. -
colorama.h1(text) -> string- Оборачивает текст в тег<h1>. -
colorama.h2(text) -> string- Оборачивает текст в тег<h2>. -
colorama.h3(text) -> string- Оборачивает текст в тег<h3>. -
colorama.h4(text) -> string- Оборачивает текст в тег<h4>. -
colorama.h5(text) -> string- Оборачивает текст в тег<h5>. -
colorama.h6(text) -> string- Оборачивает текст в тег<h6>.
Библиотека для выполнения HTTP-запросов с использованием OkHttp3.
require "http"
client.post({
url = "https://your-api.example.com/endpoint",
json = { key1 = "value1", key2 = "value2" }
},
function(call, response, body)
print("Response: " .. body)
end,
function(call, exception)
print("Exception: " .. exception:getMessage())
end
)-
http.Request -> userdata- Классokhttp3.Requestдля создания запросов. -
http(client) -> table- Возвращает новую таблицу http с указаннымOkHttpClient. -
http.buildUrl(url, params) -> okhttp3.HttpUrl- Строит объектokhttp3.HttpUrlиз базового URL и таблицы GET-параметров. -
http.buildFormBody(data) -> okhttp3.FormBody- Строит тело запросаokhttp3.FormBodyиз таблицы данных формы. -
http.buildMultipartBody(data) -> okhttp3.MultipartBody- Строит составное тело запросаokhttp3.MultipartBodyиз таблицы частей. -
http.buildBody(data, mediaType) -> okhttp3.RequestBody- Строит тело запросаokhttp3.RequestBodyиз строки и медиа-типа. -
http.buildHeaders(table) -> okhttp3.Headers- Строит объектokhttp3.Headersиз таблицы заголовков. -
http.newBuilder() -> okhttp3.OkHttpClient- Возвращает новыйOkHttpClient.Builder. -
http.buildRequest(table) -> okhttp3.Request- Строит объектokhttp3.Requestна основе переданной таблицы параметров.Формат таблицы HTTP-запроса
-
url(string) - адрес -
params(table) - Lua таблица параметров url -
method(string) - адрес -
json(string | table) - JSON строка или Lua таблица -
body(string | table) - таблица FormData либо строка, в таком случае mediaType обязателен
-
-
http.post(table [, onResponse [, onFailure ] ])- Выполняет HTTP-запрос с методом POST, сформированный из переданной таблицы параметров. -
http.get(table [, onResponse [, onFailure ] ])- Выполняет HTTP-запрос с методом GET, сформированный из переданной таблицы параметров. -
http.patch(table [, onResponse [, onFailure ] ])- Выполняет HTTP-запрос с методом PATCH, сформированный из переданной таблицы параметров. -
http.delete(table [, onResponse [, onFailure ] ])- Выполняет HTTP-запрос с методом DELETE, сформированный из переданной таблицы параметров. -
http.put(table [, onResponse [, onFailure ] ])- Выполняет HTTP-запрос с методом PUT, сформированный из переданной таблицы параметров. -
http.call(request [, onResponse [, onFailure ] ])- Выполняет HTTP запрос асинхронно, вызывая колбэкиonResponse(call, response, bodyString)илиonFailure(call, exception).
Набор вспомогательных утилит.
require "utils"
local function addOne(node, query)
local num = tonumber(query:getArgs())
if num then
query:answer(tostring(num + 1))
else
query:answer "Invalid number"
end
end
return function(module)
module:registerCommand("addone", utils.hasArgs(addOne), "Adds 1 to a number")
end-
utils.split(string, regex [, limit ]) -> table- Разделяет строкуstringпо регулярному выражениюregexна массив строк (не болееlimitчастей). -
utils.escape(string) -> string- Экранирует символы в строке, имеющие специальное значение в паттернах Lua. -
utils.parseArgs(string) -> table- Разбирает строку на массив аргументов, используя правила, схожие с Unix shell (учитывает кавычки). -
utils.command(command, count [, error]) -> function- Оборачивает команду с целью проверки количества аргументов, предварительно их разделив как в -
utils.hasArgs(command [, error]) -> function- То же самое, что иutils.command, но деление на аргументы не происходит, проверяется наличие любого текста после имени команды. Если текст присутствует, вызываетсяcommand; иначе вызываетсяerror(или стандартное сообщение об ошибке "Empty argument"). Вcommandне передается таблица аргументов. -
utils.mapEntries(javaMap) -> function- Возвращает итератор по записям Java Map. Каждый вызов итератора возвращает пару (key, value). Удобно для использования в циклеfor. -
utils.listValues(javaCollection) -> function- Возвращает итератор по элементам Java Collection/Iterable. Каждый вызов итератора возвращает следующий элемент. -
utils.map(table, function) -> table- Применяет функцию к каждому элементу таблицы и возвращает новую таблицу с результатами. Функция принимает(value, key). -
utils.filter(table, function) -> table- Фильтрует элементы таблицы, возвращая новую таблицу только с элементами, для которых функция вернулаtrue. Функция принимает(value, key). -
utils.keys(table) -> table- Возвращает таблицу-массив, содержащую все ключи переданной таблицы. -
utils.trim(string) -> string- Удаляет пробельные символы в начале и конце строки. -
utils.startsWith(string, prefix) -> boolean- Проверяет, начинается ли строка с указанного префикса. -
utils.endsWith(string, suffix) -> boolean- Проверяет, заканчивается ли строка указанным суффиксом.
Функции для корректной работы со строками в кодировке UTF-8.
-
utf8.charpattern -> string- Паттерн Lua, соответствующий одному символу UTF-8. -
utf8.len(string) -> number- Возвращает количество символов (code points) в строке UTF-8. -
utf8.sub(string, start [, end]) -> string- Возвращает подстроку строки UTF-8, используя индексы символов (start,end), а не байт. -
utf8.char(...) -> string- Создает строку из последовательности кодов символов Unicode. Принимает переменное количество числовых аргументов, каждый из которых представляет собой код символа. -
utf8.isLower(string) -> boolean- Проверяет, состоит ли строка только из символов в нижнем регистре (и не состоит только из символов в верхнем регистре). -
utf8.isUpper(string) -> boolean- Проверяет, состоит ли строка только из символов в верхнем регистре (и не состоит только из символов в нижнем регистре).
Кодировщик и декодер JSON.
require "json"
-- Преобразование таблицы в JSON строку
local data = { name = "Alice", age = 30 }
local jsonString = json.dump(data)
print(jsonString) -- Выведет: {"name":"Alice","age":30}
-- Преобразование JSON строки в таблицу
local parsedData = json.load('{"name":"Bob", "age": 25}')
print(parsedData.name) -- Выведет: Bob
print(parsedData.age) -- Выведет: 25-
json.emptyObject -> userdata- Пустой JSON объект. -
json.null -> userdata- JSON null. -
json.dump(table) -> string- Сериализует Lua таблицу в JSON строку. -
json.load(string) -> table- Десериализует JSON строку в Lua таблицу. -
json.dumpObject(table) -> userdata- Сериализует Lua таблицу в JSON объект (JSONObject или JSONArray). -
json.loadObject(object) -> table- Десериализует JSON объект (JSONObject или JSONArray) в Lua таблицу.