API Chr - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Chr

Оглавление · Алфавитный указатель · BASIC built-ins

ClassicUO • Runtime API

Создаёт строку по Unicode-коду.

Точный синтаксис

Chr(value:Integer) -> String

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • value — Код Unicode как Integer. Значения ниже 0 ограничиваются до 0, выше 0x10FFFF — до 0x10FFFF. Диапазон суррогатов 0xD800..0xDFFF не является допустимым кодом символа и вызывает ошибку.

Возвращает

String — один Unicode-символ: одна или две единицы UTF-16. Chr(0) содержит NUL, а не пустую строку. Для символов вне BMP ASC(Chr(value)) возвращает первый суррогат, не исходный полный код.

Поведение

  • Выполняется локально и не обращается к игровому серверу. Исходная строка не изменяется: результат нужно сохранить или передать дальше.
  • Позиции и длины строк считаются в единицах UTF-16. Символ за пределами BMP, например emoji, занимает две единицы. Это не количество байтов UTF-8.

Примеры

Пример 1. Латинская буква

# Латинская буква
#
# Создаёт строку по Unicode-коду.
#
# String — один Unicode-символ: одна или две единицы UTF-16. Chr(0) содержит NUL, а не пустую
# строку. Для символов вне BMP ASC(Chr(value)) возвращает первый суррогат, не исходный полный
# код.

SUB Main()
    # value=65 — код A.
    # Ожидаемый результат: строка A. В result сохраняется результат выражения; Print только
    # показывает его.

    VAR result = Chr(65)
    UO.Print(CStr(result))
END SUB

Разбор параметров и выполнения:

  • value=65 — код A.
  • Ожидаемый результат: строка A. В result сохраняется результат выражения; Print только показывает его.

Пример 2. Кириллица

# Кириллица
#
# Создаёт строку по Unicode-коду.
#
# String — один Unicode-символ: одна или две единицы UTF-16. Chr(0) содержит NUL, а не пустую
# строку. Для символов вне BMP ASC(Chr(value)) возвращает первый суррогат, не исходный полный
# код.

SUB Main()
    # value=0x0410 — кириллическая А, отличная от латинской A.
    # Ожидаемый результат: строка А. В result сохраняется результат выражения; Print только
    # показывает его.

    VAR result = Chr(0x0410)
    UO.Print(CStr(result))
END SUB

Разбор параметров и выполнения:

  • value=0x0410 — кириллическая А, отличная от латинской A.
  • Ожидаемый результат: строка А. В result сохраняется результат выражения; Print только показывает его.

Пример 3. Длина символа вне BMP

# Длина символа вне BMP
#
# Создаёт строку по Unicode-коду.
#
# String — один Unicode-символ: одна или две единицы UTF-16. Chr(0) содержит NUL, а не пустую
# строку. Для символов вне BMP ASC(Chr(value)) возвращает первый суррогат, не исходный полный
# код.

SUB Main()
    # Chr создаёт emoji из двух единиц UTF-16; Len считает эти единицы.
    # Ожидаемый результат: 2. В result сохраняется результат выражения; Print только показывает его.

    VAR result = Len(Chr(0x1F600))
    UO.Print(CStr(result))
END SUB

Разбор параметров и выполнения:

  • Chr создаёт emoji из двух единиц UTF-16; Len считает эти единицы.
  • Ожидаемый результат: 2. В result сохраняется результат выражения; Print только показывает его.