Как получить все символы Unicode из определенных категорий?
Как получить, например... шаблон кода x-y\uxxxx\Uxxxxxxxxx
из категории "Знаки соединителя" (Pc) для сканирования идентификаторов ECMAScript 3/JavaScript?
Оригинальный вопрос
Мне нужна помощь для проверки действительного символа (кодовой точки) идентификатора ECMA-262 ( издание 3º, 7.6) для лексического сканера.
Синтаксическая цитата
Identifier
::
IdentifierName
но нетReservedWord
IdentifierName
::
IdentifierStart
IdentifierName
IdentifierPart
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'