Как определить широкие символы в Ruby?(Китайский, японский, корейский) - PullRequest
1 голос
/ 21 февраля 2011

Я пытаюсь определить физическую ширину пикселя строки.

например:

FONT_SIZE = 10
str="123456789"
width = str.length * FONT_SIZE  # which will be 9 * 10 = 90px

ПРОБЛЕМА: Но для китайского, японского или корейского:

FONT_SIZE = 10
str="一二三四五六七八九"
width = str.length * FONT_SIZE  # this still result in 90 (9*10)

Но это действительно должно быть 180, так как они по 2 символа на каждого символа.

Как мне сделать эту функцию (возвращает true / false)?

def is_wide_char char
  #how to?
end

class String
  def wlength
    l = 0
    self.each{|c| is_wide_char(c)? l+=2: l+=1}
    l
  end
end

1 Ответ

1 голос
/ 21 февраля 2011

Как я могу обнаружить символы CJK в строке в Ruby? дает ответ

class String
  def contains_cjk?
    !!(self =~ /\p{Han}|\p{Katakana}|\p{Hiragana}\p{Hangul}/)
  end
end

strings= ['日本', '광고 프로그램', '艾弗森将退出篮坛', 'Watashi ha bakana gaijin desu.']
strings.each{|s| puts s.contains_cjk?}

#true
#true
#true
#false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...