Re: Nitra и UTF-16
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.04.16 18:27
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>
WH>regex HighSurrogates = ['\uD800'..'\uDBFF'];
WH>regex LowSurrogates  = ['\uDC00'..'\uDFFF'];
WH>regex Any = HighSurrogates LowSurrogates | ['\u0000'..'\uFFFF'];
WH>


Это вообще не верный код. Он автомат на первом символе всегда сожрет один любой.
Должно быть что-то вроде:
regex Any16         = ['\u0000'..'\uFFFF'];
regex HighSurrogate = ['\uD800'..'\uDBFF']; // DBFF - это граница корректного HighSurrogate
regex NonSurrogate  = Any16 - HighSurrogate;
regex Any = HighSurrogate Any16 | NonSurrogate;


Вот тогда он сожрет или правильную сурогатную пару, или два отдельных символа, в которых может быть грязь.

DBFF — это граница корректного HighSurrogate все что между ним и DFFF — это некорректрый сурогат. Это значение должно встречаться в LowSurrogates.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 21.04.2016 18:32 VladD2 . Предыдущая версия . Еще …
Отредактировано 21.04.2016 18:31 VladD2 . Предыдущая версия .
Отредактировано 21.04.2016 18:29 VladD2 . Предыдущая версия .
Отредактировано 21.04.2016 18:27 VladD2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.