2015-07-06 3 views
7

Есть ли у Perl 6 что-то, что эквивалентно методу Unicode::GCStringcolumns?Perl 6 и печатные колонки

Perl 5 Пример:

#!/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 

ответ

4

Perl6 имеет встроенную поддержку Unicode, с родной Uni и NFC/NFD/NFKC/NFKD нормированные типов.

Что я смутно понимаю, что метод Unicode :: GCString :: columns определяет поддержку линейного языка восточноазиатского языка. 合 состоит из 2 "слогов" (они называют это «графем кластерами») друг на друга, таким образом, 2 столбца.

Это означает, что perl6 внутри (на уровне MoarVM) имеет доступ к базе данных юникода, где хранятся свойства linebreaking, но, насколько мне известно, в настоящее время нет модуля, такого как Unicode :: UCD, доступного для создания свойств East_Asian_Width для чего-то вроде Unicode :: GCString.

С другой стороны, преобразование Unicode :: LineBreak в perl6 выглядит достаточно легко, доступ к библиотеке sombok через NativeCall.

+0

Упрощенный, потому что Рейни делает ключевое слово - делая все, что нужно, чтобы попытаться с пользой переместить эту проблему вперед. Сначала я публикую этот комментарий, чтобы уравновесить то, что я сейчас скажу. – raiph

+0

Графема - это то, что человек обычно называет одним персонажем. Итак, 合 одна графема, а не две. Таким образом, используя недавний Rakudo, «say» 合 «.chars.say» возвращает 1. – raiph

+0

Вещь, лежащая в основе рассматриваемой функции столбцов, является «понятием присущей ширине символа [восточно-азиатский]. Эта ширина принимает либо двух значений: узких или широких ». (от http://www.unicode.org/reports/tr11/tr11-29.html) – raiph

Смежные вопросы