Функции, обеспечивающие базовую поддержку кодировки UTF-8
До апгрейда интерпретатора Lua Hammerspoon до версии 5.3, поддержка UTF8 обеспечивалась включением бета-версии библиотеки utf8 Lua 5.3 в качестве модуля Hammerspoon. Это больше не требуется, но для сохранения совместимости библиотека Lua utf8 по-прежнему доступна через hs.utf8. Документация по библиотеке utf8 доступна по адресу http://www.lua.org/manual/5.3/ или в консоли Hammerspoon с помощью команды help: help.lua.utf8. Это затрагивает следующие функции и переменные:
hs.utf8.char - справка доступна через help.lua.utf8.char
hs.utf8.charPattern - справка доступна через help.lua.utf8.charpattern
hs.utf8.codepoint - справка доступна через help.lua.utf8.codepoint
hs.utf8.codes - справка доступна через help.lua.utf8.codes
hs.utf8.len - справка доступна через help.lua.utf8.len
hs.utf8.offset - справка доступна через help.lua.utf8.offset
Дополнительные функции, специфичные для Hammerspoon, которые предоставляют расширенную поддержку UTF8, документированы здесь.
Коллекция символов UTF-8, уже преобразованных из кодовых точек и доступных в виде удобных пар ключ-значение. UTF-8 печатные версии распространенных специальных символов Apple и OS X предварительно определены, и другие можно добавить с помощью hs.utf8.registerCodepoint(label, codepoint), для вашего использования.
Примечания
Эта таблица имеет метаметод __tostring(), что позволяет перечислить её содержимое в консоли Hammerspoon, набрав hs.utf8.registeredKeys.
Для соответствия hs.utf8.registeredLabels, это также можно вызвать как функцию, т.е. hs.utf8.registeredKeys["cmd"] эквивалентно hs.utf8.registeredKeys("cmd")
Возвращает предоставленную строку со всеми непечатаемыми символами ASCII, за исключением Возврата каретки, Перевода строки и Табуляции.
Параметры
строка - входная строка, в которой все непечатаемые символы ASCII должны быть экранированы как \x## (шестнадцатеричное число с одним байтом).
все - необязательный булевый параметр (по умолчанию false), указывающий, следует ли также рассматривать Возврат каретки, Перевод строки и Табуляцию как «непечатаемые»
Возвращаемое значение
Очищенная строка с экранированными непечатаемыми символами.
Примечания
Поскольку символы Юникода, находящиеся за пределами основного алфавита ASCII, являются многобайтовыми символами, любой символ UTF8 или другой символы Юникода будет разделен на отдельные байты и, вероятно, экранирован этой функцией.
Эта функция полезна для отображения двоичных данных в удобочитаемой форме, которая в противном случае может быть невыразима в консоли Hammerspoon или другом месте назначения. Например:
utf8.charpattern, содержащий регулярное выражение для соответствия допустимым кодировкам UTF8, приводит к (null) в консоли Hammerspoon, но hs.utf8.asciiOnly(utf8.charpattern) отобразит [\x00-\x7F\xC2-\xF4][\x80-\xBF]*.
Обёртка для utf8.char(...), которая гарантирует, что все кодовые точки возвращают допустимые символы UTF8.
Параметры
кодовые_точки - ряд числовых кодовых точек Юникода, которые должны быть преобразованы в последовательности байтов UTF-8. Если кодовая точка является строкой (и не начинается с U+, она используется в качестве ключа для поиска в hs.utf8.registeredKeys[]
Возвращаемое значение
Строка, содержащая последовательности байтов UTF-8, соответствующие предоставленным кодовым точкам, как объединённая строка.
Примечания
Допустимые значения кодовых точек находятся в диапазоне от 0x0000 до 0x10FFFF (0 – 1114111)
Если предоставленная кодовая точка является строкой, начинающейся с U+, то 'U+' преобразуется в '0x', чтобы Lua мог правильно обрабатывать значение как числовое.
Неверные кодовые точки возвращаются как символ замены Юникода (U+FFFD)
Это включает в себя кодовые точки за пределами диапазона, а также кодовые точки замещения Юникода (U+D800 – U+DFFF)
Заменяет неверные последовательности символов UTF8 в inString на replacementChar, чтобы их можно было безопасно отобразить в консоли или другом месте назначения, которое требует правильной кодировки UTF8.
Параметры
inString - строка символов, которая может содержать неверные последовательности байтов UTF8
replacementChar - необязательный параметр для замены неверных последовательностей байтов в inString. Если этот параметр не указан, используется символ замены UTF8 по умолчанию U+FFFD.
Возвращаемое значение
outString - содержимое inString со всеми неверными последовательностями байтов UTF8, заменёнными на replacementChar.
posTable - таблица индексов в outString соответствующая местоположениям, где replacementChar был использован.
Примечания
Эта функция является небольшой модификацией кода, найденного по адресу http://notebook.kulchenko.com/programming/fixing-malformed-utf8-in-lua.
Если replacementChar является многобайтовым символом (например, U+FFFD) или многосимвольной строкой, то длина строки outString будет больше длины строки inString. Позиции символов в posTable будут отражать эти новые позиции в outString.
Для вычисления позиции символа неверных символов в inString, используйте что-то вроде следующего:
outString, outErrors = hs.utf8.fixUTF8(inString, replacement) inErrors = {} for i,p in ipairs(outErrors) do table.insert(inErrors, p - ((i - 1) * string.length(replacement) - 1)) end
Где replacement — utf8.char(0xFFFD), если вы опустите его из функции hs.utf8.fixUTF8 в первой строке.
Возвращает шестнадцатеричный дамп предоставленной строки. Это в первую очередь полезно для просмотра точного состава двоичных данных, содержащихся в строке Lua, как отдельных байтов в целях отладки.
Параметры
inputString - данные, которые должны быть отображены как отдельные шестнадцатеричные байты для просмотра.
count - необязательный параметр, определяющий количество байтов для отображения в строке (по умолчанию 16)
Регистрирует кодовую точку Юникода под заданным меткой как строку байтов UTF-8, на которую можно ссылаться по метке позднее в вашем коде как hs.utf8.registeredKeys[label] для удобства и читаемости.
Параметры
метка - строковая метка, используемая в качестве удобочитаемой ссылки при получении последовательности байтов UTF-8 для использования в других строках и функциях вывода.
кодовая_точка - кодовая точка Юникода в числовом или U+xxxx формате для регистрации с заданной меткой.
Возвращаемое значение
Возвращает последовательность байтов UTF-8 для зарегистрированной кодовой точки Юникода.
Примечания
Если кодовая точка метки была ранее зарегистрирована, это перезапишет предыдущее значение новым. Поскольку многие специальные ключи, которые вы можете захотеть зарегистрировать, имеют различные варианты, это позволяет легко изменять существующие предопределённые значения, чтобы они соответствовали вашим предпочтениям.
Возвращаемое значение — просто синтаксический сахар, и вам не нужно сохранять его локально; его можно безопасно игнорировать — последующий доступ к предварительно преобразованной кодовой точке должен быть получен как hs.utf8.registeredKeys[label] в вашем коде. Однако, выглядит хорошо, когда вызывается из консоли ☺.
Возвращает имя метки для символа UTF8, как оно зарегистрировано в hs.utf8.registeredKeys[].
Параметры
utf8char — символ для поиска в hs.utf8.registeredKeys[]
Возвращаемое значение
Строковая метка для символа UTF8 или строка в формате «U+XXXX», если она не определена в hs.utf8.registeredKeys[], или nil, если utf8char не является допустимым символом UTF8.
Примечания
Для соответствия hs.utf8.registeredKeys, это также можно вызвать, как если бы это был массив: например, hs.utf8.registeredLabels(char) эквивалентно hs.utf8.registeredLabels[char]