Cambiar el color de los caracteres individuales en un glifo

Según lo entiendo, una cadena contiene glifos y un glifo puede constar de caracteres individuales. Para mí, este es un problema, ya que me gustaría cambiar el color de algunos diacríticos en una cadena.

Digamos que tenemos la siguiente cadena:

วาีม

Para esta cadena, me gustaría hacer que las consonantes tengan un color diferente, ya que es diacrítico. Es decir: quiero un color diferente para วาม y วาม .

De mis testings parece que solo soy capaz de colorear glifos individuales. Parece que no puedo cambiar el color a un nivel de carácter (diacrítico). Algún código de ejemplo:

 let text = NSMutableAttributedString(string: "วาีม") text.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: NSMakeRange(0, 1)) text.addAttribute(NSForegroundColorAttributeName, value: UIColor.networking, range: NSMakeRange(1, 1)) text.addAttribute(NSForegroundColorAttributeName, value: UIColor.green, range: NSMakeRange(2, 1)) text.addAttribute(NSForegroundColorAttributeName, value: UIColor.orange, range: NSMakeRange(3, 1)) label.attributedText = text 

Lo anterior se representaría de la siguiente manera:

introduzca la descripción de la imagen aquí

Como se puede ver, el diacrítico no se representa con un color verde.

¿Alguien sabe si hay alguna forma de lograr el resultado que quiero?

Dudo que encuentres una buena forma de hacer esto. El glifo para าี en la fuente es una cosa completamente diferente al glifo para . Por ejemplo, en la fuente de Thonburi en mi Mac, el primero es el glifo 1507 y el último es el glifo 78. Cada input del glifo en la fuente es una pequeña descripción completamente separada de cómo dibujar el glifo. Para el glifo combinado, el diacrítico no es una cosa separada. El sistema no tiene forma de saber cuándo dibuja el carácter base y cuándo dibuja el diacrítico. Es solo dibujar una cosa. Por lo tanto, no puede aplicar diferentes colors.

No estoy completamente familiarizado con el tailandés, así que solo estoy especulando para esta próxima parte, aunque ciertamente es cierto para algunos idiomas: sospecho que hay glifos para combinar secuencias que son radicalmente diferentes de lo que obtendría simplemente superponiendo el componente partes encima de la otra. Entonces, incluso en principio, no está claro que haya una forma diacrítica separable visualmente frente al personaje base.

Una alternativa es colocar dos tags una encima de la otra; uno que contiene el text con los diacríticos en el color que desea para los diacríticos; uno encima con el mismo text pero sin los diacríticos, en el color que desea para el text.

Al renderizar, los bits idénticos del text deben cancelarse exactamente, dejándote con text y diacríticos en los colors correctos.