Pergunta

Eu estou escrevendo um jogo que está levando a entrada do usuário e tornando-o na tela. O motor que estou usando para isso é inteiramente amigável-unicode, então eu gostaria de manter isso, se possível. O problema é que os olhares de loop de renderização como este:

"string".each_byte do |c|
    render_this_letter(c)
end

Eu não sei muita coisa sobre i18n, mas sei o suficiente para saber o código acima é só nunca vai trabalhar para mim e as pessoas que falam a minha língua. Eu prefiro algo como:

"unicode string".each_unicode_letter do |u|
    render_unicode_letter(u)
end

Será que isso existe na distribuição do núcleo? Estou um pouco avessos a adição de requisitos adicionais para a instalação, mas se é a única maneira de fazê-lo, eu vou viver.

Para o divertimento extra, eu não tenho nenhuma maneira de saber se a cadeia é, na verdade, uma seqüência de caracteres Unicode.

EDIT: A biblioteca que estou usando pode realmente tornar cordas inteiras, no entanto eu estou deixando o usuário editar o que surge na mosca - se bater 'backspace', essencialmente, eu preciso saber quantos bytes para cortar fora da final.

Foi útil?

Solução

Infelizmente 1.8.x rubi tem suporte unicode pobres. Ele está sendo abordada em 1.9. Mas nesse meio tempo, as bibliotecas como este ( http://snippets.dzone.com/posts / mostrar / 4527 ) são uma boa solução. Usando a biblioteca vinculado, seu código seria algo parecido com isto:

"unicode_string".each_utf8_char do |u| 
    render_unicode_letter(u)
end

Outras dicas

Você poderia tentar incluindo a ActiveSupport :: CoreExtensions :: string: : módulo de Unicode dos trilhos base de código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top