Как получить все символы Unicode из определенных категорий?

Как получить, например... шаблон кода x-y\uxxxx\Uxxxxxxxxx из категории "Знаки соединителя" (Pc) для сканирования идентификаторов ECMAScript 3/JavaScript?

Оригинальный вопрос

Мне нужна помощь для проверки действительного символа (кодовой точки) идентификатора ECMA-262 ( издание 3º, 7.6) для лексического сканера.

Синтаксическая цитата

Identifier::

  • IdentifierName но нет ReservedWord

IdentifierName::

  • IdentifierStart
  • IdentifierNameIdentifierPart
  • IdentifierStart::
  • UnicodeLetter
  • $
  • _
  • \UnicodeEscapeSequence # нет необходимости проверять это

IdentifierPart::

  • IdentifierStart
  • UnicodeCombiningMark
  • UnicodeDigit
  • UnicodeConnectorPunctuation

UnicodeLetter::

  • любой символ в категориях Unicode "Прописная буква (Lu)", "Строчная буква> буква (Ll)", "Буква заглавной буквы (Lt)", "Буква модификатора (Lm)", "Другая буква (Lo)" или "Буква номер (Nl) ".

UnicodeCombiningMark::

  • любой символ в категориях Unicode "Метка без пробелов (Mn)" или "Метка с интервалом (Mc)"

UnicodeDigit::

  • любой символ в категории Unicode "Десятичное число (Nd)"

UnicodeConnectorPunctuation::

  • любой символ в категории Unicode "Знаки препинания (Pc)"

Как видите, для этого требуется любой персонаж определенных категорий.

Мне нужно иметь все эти возможные символы, поэтому мой первый шаг - найти пунктуацию "Connector" на этом графике Unicode 5.0, но 0 соответствует, и я считаю, что я делаю это неправильно. Так кто-нибудь может мне помочь?

2 ответа

Решение

Unicode предлагает этот инструмент для определения наборов символов. Он использует регулярные выражения с парами свойство-значение, заключенными в [::],

Для всех символов в Unicode 5 вы хотите сделать [:age=5.0:],

Остальные являются "общими категориями" (gc). Так например [:age=5.0:]&[:gc=Lu:] найдет все заглавные буквы в Unicode 5 (gc=L найдете все буквы в общем).

Для IdentifierStart вам нужно [:age=5.0:]&[[:gc=L:][:gc=Nl:]\$_], Для IdentifierPart вам нужно [:age=5.0:]&[[:gc=L:][:gc=Nl:][:gc=Mn:][:gc=Mc:][:gc=Nd:][:gc=Pc:]\$_],

Юникод также имеет свойства с именами ID_Start и ID_Continue, но они не содержат те же символы, что и ваши спецификации.

Здесь также представлен обзор всех свойств символов Unicode.

Я ОП. На самом деле я использую другой подход для определения общей категории Unicode. Я сделал инструмент для преобразованияUnicodeData.txtфайл в очень оптимальные бинарники: https://github.com/matheusdiasdesouzads/unicode-general-category/tree/master/data и библиотека для работы с общими категориями: https://github.com/matheusdiasdesouzads/unicode-general- категория/дерево/мастер/язык/javascript-nodejs

      let cat = GeneralCategory.from(0x41);
cat.toString(); // 'Lu'
Другие вопросы по тегам