Об корейский
Jan. 13th, 2023 12:19 amКороче, я понял, корейский вас интересует больше, чем вечерние купания.
Так вот. Во первых, корейский, хоть и выглядит как кракозябры, на самом деле алфавит. Только, видимо все же под влиянием китайского, буквы группируются в слоги, в смысле буквы/звуки одного слога пишутся один рядом/под другим и вписаны в типа квадрат. Каждый слог состоит примерно из начального согласного, гласного и конечного согласного, примерно, которые пишется один над другим. Один из согласных может отсутствовать, для этого специальное обозначение, по крайней мере для первого. Кстати, корейский алфавит придумал лично какой-то их король в 16-ом веке. До этого они писали более-менее на китайском, как я понимаю. И до сих пор немного (или много, я не смог понять) используют иероглифы.
Что это означает с точки зрения компьютера и программиста? Что нельзя просто показать корейские буквы одна за другой справа налево. А надо их хитро размещать одну рядом/под другой. Причем иногда рядом, иногда под, в зависимости от того, что дальше в слоге.
Простым решением было сделать фонт, в котором каждый слог нарисован уже целиком, и так его и показывать. Коды для этих знаков не случайные, а вполне себе вычислимые: [(initial) × 588 + (medial) × 28 + (final)] + 44032
Последнее 44032 думаю юникодовская добавка.
Вот пример из Википедии:
Чтобы найти код слога "한" in Unicode:
Код начальной согласной (ㅎ) - 18.
Код гласной (ㅏ) - 0.
Код конечной согласной (ㄴ) - 4.
Подставляем в формулу и получаем [(18 × 588) + (0 × 28) + 4] + 44032 = 54620. В Unicode код слога 한 это 54620.
(Я когда-то примерно знал буквы, но забыл, так что я не знаю, какой это слог. Ок, это, оказывается, хан)
Полюбуйтесь, как они нетривиально расположены. Неудивительно, что решили нарисовать весь слог заранее.
Хорошо, а как мы их вводим? А очень просто - по одной букве, ведь это же алфавит. Кстати, для отдельных букв у нас тоже есть символы, хотя реально в корейском тексте отдельные буквы не встречаются. Значит, человек нажимает Х, мы ставим/рисуем Х, дальше человек нажимает А, опа, стираем последнее Х, и пишем вместо этого ХА, человек нажимает Н - стираем ХА и пишем ХАН, т.е. символ Х*588 + А*18 + Н + 44032.
А если он ошибся, хочет исправить и нажал backspace, то стираем символ ХАН, считаем, из каких букв он был составлен, и пишем ХА. Красота.
Казалось бы, в нынешние времена процессору делать в основном нечего и он вполне может сам посчитать и отрендерить ХАН в правильном порядке, так же как он может показать â, закодированный при помощи обычного a, за которым идёт circumflex.
Но нет, ещё 7 лет назад то ли айфон то ли андроид правильно показывал только pre-composed syllables, а отдельные буквы так и показывал по-отдельности.