2015-07-06 9 views
7

Hat Perl 6 etwas, das der Unicode::GCString 's columns Methode entspricht?Perl 6 und Druckspalten

Perl 5 Beispiel:

#!/usr/bin/env perl 
use warnings; 
use strict; 
use 5.10.0; 
use utf8; 
use open qw(:std :utf8); 
use Unicode::GCString; 

my $s = '合'; # U+5408 

say length $s;  # 1 

my $gcs = Unicode::GCString->new($s); 
say $gcs->columns; # 2 

Antwort

4

Perl6 gebautet hat Unicode-Unterstützung, mit nativer Uni und NFC/NFD/NFKC/NFKD normalisierte Typen.

Was ich vage verstehe, ist, dass die Unicode :: GCString :: columns-Methode Ostasia Sprache Zeilenunterbrechungsunterstützung bestimmt. 合 besteht aus 2 "Silben" (sie nennen es "Graphem-Cluster") übereinander, also 2 Spalten.

Das hat Perl6 intern (auf der MoarVM-Ebene) Zugriff auf die Unicode-Datenbank, wo die Zeilenumbruch-Eigenschaften gespeichert werden, aber meines Wissens ist derzeit kein Modul wie Unicode :: UCD verfügbar, um die East_Asian_Width-Eigenschaften verfügbar zu machen für etwas wie einen Unicode :: GCString.

Auf der anderen Seite sieht die Konvertierung von Unicode :: LineBreak in Perl6 einfach genug aus, indem Sie über NativeCall auf die Sombok-Bibliothek zugreifen.

+0

Upvoted, weil Reini das Schlüsselwort tut - das zu tun, was nötig ist, um dieses Problem sinnvoll zu lösen. Ich poste diesen Kommentar zuerst, um die Dinge auszugleichen, die ich als nächstes sagen werde. – raiph

+0

Ein Graphem ist, was ein Mensch normalerweise einen Charakter nennen würde. Also ist one ein Graphem, nicht zwei. Daher gibt 'say". ".chars.say 'mit einem kürzlichen Rakudo 1 zurück. – raiph

+0

Die der Funktion der Spalten zugrunde liegende Funktion ist" das Konzept einer inhärenten Breite eines [ostasiatischen] Zeichens. Diese Breite nimmt entweder an von zwei Werten: schmal oder breit. " (von http://www.unicode.org/reports/tr11/tr11-29.html) – raiph

Verwandte Themen