Контекстные формы арабских букв не имеют никакого присоединяющегося поведения.Это означает, что они не изменят форму других букв, окружающих их.
Если вы хотите, чтобы общие буквы соединялись с контекстными формами, вам нужно вставить невидимый символ ZERO WIDTH JOINER (U + 200D),Этот символ заставит общие формы соединяться с ним, поэтому будет выглядеть, как будто они действительно соединяются с контекстными формами.
Чтобы использовать ваши примеры:
- 062D FEB4 FEE6: حﺴﻦ
- 062D 200D FEB4 FEE6: حﺴﻦ
- 0639 FE8E FEA9: عﺎﺩ
- 0639 200D FE8E FEA9: عﺎﺩ
Относительно того, как вы бы это реализовали: в принципе, вы можете просто вставить Zero Width Joiner после каждой «начальной» контекстной формы, до и после каждой «медиальной» контекстной формыи перед каждой «окончательной» контекстной формой.Это автоматически обеспечит правильное формирование.Тем не менее, это решение также вставит много ненужных соединителей с нулевой шириной, но это не является большой проблемой, поскольку они не вызывают каких-либо проблем визуально.
Если вы все же хотите избежать этих ненужных соединителей с нулевой ширинойВам нужно написать более сложный алгоритм, который учитывает поведение объединения всех букв.Например, вы можете вставить Zero Width Joiner только после «начальной» контекстной формы, если следующая буква в слове - это общая форма, которая может соединяться справа.Стандарт Unicode имеет символьное свойство с именем Joining_Type
, которое кодирует это поведение для всех букв.Возможно, вы захотите разобраться в этом, если вы хотите, чтобы скрытый текст был как можно более коротким, но простого решения, которое я объяснил в предыдущем абзаце, должно быть достаточно для вас.