суббота, 27 ноября 2010 г.

И последнее слово о FINAL SIGMA

Это перевод The last word on the FINAL SIGMA. Автор: Майкл Каплан.

Ранее я обсудил сценарий, когда двойное изменение регистра не даёт исходную строку в .NET.

В любом случае, позавчера мне пришло письмо от какого-то читателя моего блога, ищущего все односторонние проецирования в лингвистических таблицах (доступ к которым есть через флаг LCMAP_LINGUISTIC_CASING). И он хотел знать, почему этот символ, FINAL SIGMA, не может быть просто помещён в лингвистическую таблицу, если это одностороннее проецирование.

Справедливый вопрос, и я думаю, стоящий отдельного поста в блоге :-)

Если вы говорите на греческом, то вы знаете, что и ς (U+03c2, a.k.a. GREEK SMALL LETTER FINAL SIGMA), и σ (U+03c3, a.k.a. GREEK SMALL LETTER SIGMA) в верхнем регистре дают Σ (U+03a3, a.k.a. GREEK CAPITAL LETTER SIGMA). Но если бы мы добавили этот символ в лингвистические таблицы, то неожиданно ς перестало бы работать в функциях вроде CharUpper/CharUpperBuff (которые не используют лингвистическое изменение регистра) и не работало бы по умолчанию в вызове LCMapString с флагом LCMAP_UPPERCASE.

Очевидно, это было бы совсем не здорово.

Представьте, как бы вам понравилось, если бы приведение к верхнему регистру строчки hello дало бы вам HELLo? Вы бы не подумали, что это баг? Особенно, если раньше вы получали HELLO? Вы могли бы сказать такой платформе GooDBYE.

Конечно же, в идеальном случае, функции должны замечать, когда Σ стоит в конце слова и решать, делать ли её ς и σ. Но LCMapString работает только на символьном уровне. Чтобы реализовать в ней такую логику, надо сначала подняться на уровень выше.

Некоторые приложения могут делать такую работу самостоятельно, если им это надо. Хотя я им не завидую; граница слова - очень размытое понятие, особенно когда у вас после ς идёт не греческий символ. Это конец слова или продолжение слова? Это такой вопрос, где API никогда не может выиграть. Потому что не имеет значения, что вы ответите, как вы реализуете это поведение - всегда найдутся люди, которым это не понравится.

В любом случае, вот почему ς не заносится в лингвистические таблицы.

This post brought to you by "ς" (U+03c2, a.k.a. GREEK SMALL LETTER FINAL SIGMA)
Символ, который философствует, был бы ли Unicode проще, если бы Unicode не имел для него отдельной кодовой точки, позволяя выбирать форму символа вызывающему коду...

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.