Grafik sınıflarına dayalı dize sınıfı?


9

Neden kod noktaları veya karakterler yerine Unicode grapheme kümeleri dizesini temsil eden bazı dize sınıfları yok merak ediyorum. Bana öyle geliyor ki, çoğu uygulamada programcıların bir grafik bileşeninin bileşenlerine erişmeleri gerektiğinde bunları kod noktalarından düzenlemek zorunda kalmaktan daha kolay olacaktır. (en azından teoride). Dahili olarak bir dize sınıfı UTF-8, UTF-16 gibi bir değişken uzunluk kodlaması kullanabilir veya bu bağlamda UTF-32 bile değişken uzunluktur; veya hepsi için alt sınıflar uygulamak (ve isteğe bağlı olarak seçimi çalışma zamanında yapılandırmak, böylece farklı diller en uygun kodlamalarını kullanabilir). Ancak programcılar bir dizeyi incelerken grafik birimlerini "görebilirse",


Sanırım biraz zaman geçti ve şimdi bunu yapan birkaç dilimiz var. : D
Trejkaz

Yanıtlar:


4

Doğruluğu elde etmenin en iyi yolu, programcıların "dize hackleme" yapmasını engellemektir ... kendi sözcük kaydırma, tireleme, kelime sayısı, gerekçe, imleç hareketi, vb rutinleri yazmak sorun değil. Tüm modern UI çerçeveleri bu günlerde sizin için yapacak.

Yani, genellikle üzerinde çalışacağınız soyutlama, GTK gibi daha çok bir "paragraf görüntüleme nesnesidir": http://library.gnome.org/devel/pango/stable/pango-Layout-Objects.html

http://library.gnome.org/devel/pango/stable/pango-Glyph-Storage.html gibi bir grafik dizesi yerine

Bir glif dizisine ulaşmak için yalnızca "görünüm" düzeyinde kullanılabilen bilgilere ihtiyacınız vardır, bu nedenle dizelerin çoğu kullanımı bu bilgiye sahip olmayabilir. Örneğin, yazı tipini bilmeniz gerekir, çünkü yazı tipleri farklı bitişik harflere sahip olabilir.

Bu tür pratik maddelerin yanı sıra, glifler muhtemelen istediğiniz şey değildir.

Birçok bağlamda, bu API'da gösterilen uygun Unicode niteliklerini kullanmak istersiniz, örneğin: http://library.gnome.org/devel/pango/stable/pango-Text-Processing.html#PangoLogAttr

Bu yapıdan görebileceğiniz gibi (Unicode algoritmalarını yansıtan), glif sınırlarında çeşitli şeyler yapmak, karakter sınırlarında yapmaktan daha doğru değildir.

Bu iki özellik, farklı sınır türleri bulmak için algoritmaları açıklar:

Metin işlemeyi yapmak algoritmalarla bu sınırları bulmayı ve sonra sınırlarla çalışmayı içerir.

Tüm dilleri doğru bir şekilde ele almanın ne kadar zor olduğunu araştırmaya başlarsanız, tüm paragraflara bakan ve doğru şekilde işleyen bir kütüphaneye ihtiyacınız olduğunu çok hızlı bir şekilde fark edeceksiniz. Windows, Mac, Linux (Qt ve GTK) ve Java'nın hepsi bunun için olanaklarla birlikte gelir, örneğin http://site.icu-project.org/ var .

Web uygulamaları yazarken maalesef, bildiğim kadarıyla tarayıcının (muhtemelen işletim sisteminin yardımcı olduğu) bu şeyleri yapmasına izin vermelisiniz. JavaScript veya sunucu tarafında yapabileceğiniz tek şey karışıklıktır.

Belki de cevabı şöyle özetleyebilirim: doğal dil metni üzerindeki çoğu dize manipülasyonu bozuldu, bu yüzden dize sınıfı hakkında endişelenecek çok fazla nokta yok, belki de üzerinde yöntem olmayan bir tane olması ;-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.