Module: VisualWidth

Included in:
Formatter::Align, Table
Defined in:
lib/visual_width/data.rb,
lib/visual_width.rb,
lib/visual_width/version.rb,
lib/visual_width/string_refine.rb

Overview

THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT IT!

Unicode version 6.3.0 of EastAsianWidth characters

see www.unicode.org/reports/tr11/ for specification see www.unicode.org/Public/UNIDATA/EastAsianWidth.txt for data

Defined Under Namespace

Modules: Formatter Classes: Table

Constant Summary collapse

EAST_ASIAN =
true
Wide =
'[' +
'\u{1100}-\u{115F}' +
'\u{2329}-\u{232A}' +
'\u{2E80}-\u{2FFF}' +
'\u{3001}-\u{303E}' +
'\u{3041}-\u{3247}' +
'\u{3250}-\u{4DBF}' +
'\u{4E00}-\u{A4CF}' +
'\u{A960}-\u{A97F}' +
'\u{AC00}-\u{D7AF}' +
'\u{F900}-\u{FAFF}' +
'\u{FE10}-\u{FE1F}' +
'\u{FE30}-\u{FE6F}' +
'\u{1B000}-\u{1CFFF}' +
'\u{1F200}-\u{1F2FF}' +
'\u{20000}-\u{E0000}' +
']'
Fullwide =
'[' +
'\u{3000}' +
'\u{FF01}-\u{FF60}' +
'\u{FFE0}-\u{FFE7}' +
']'
Ambiguous =
'[' +
'\u{00A1}' +
'\u{00A4}' +
'\u{00A7}-\u{00A8}' +
'\u{00AA}' +
'\u{00AD}-\u{00AE}' +
'\u{00B0}-\u{00B4}' +
'\u{00B6}-\u{00BA}' +
'\u{00BC}-\u{00BF}' +
'\u{00C6}' +
'\u{00D0}' +
'\u{00D7}-\u{00D8}' +
'\u{00DE}-\u{00E1}' +
'\u{00E6}' +
'\u{00E8}-\u{00EA}' +
'\u{00EC}-\u{00ED}' +
'\u{00F0}' +
'\u{00F2}-\u{00F3}' +
'\u{00F7}-\u{00FA}' +
'\u{00FC}' +
'\u{00FE}' +
'\u{0101}' +
'\u{0111}' +
'\u{0113}' +
'\u{011B}' +
'\u{0126}-\u{0127}' +
'\u{012B}' +
'\u{0131}-\u{0133}' +
'\u{0138}' +
'\u{013F}-\u{0142}' +
'\u{0144}' +
'\u{0148}-\u{014B}' +
'\u{014D}' +
'\u{0152}-\u{0153}' +
'\u{0166}-\u{0167}' +
'\u{016B}' +
'\u{01CE}' +
'\u{01D0}' +
'\u{01D2}' +
'\u{01D4}' +
'\u{01D6}' +
'\u{01D8}' +
'\u{01DA}' +
'\u{01DC}' +
'\u{0251}' +
'\u{0261}' +
'\u{02C4}' +
'\u{02C7}' +
'\u{02C9}-\u{02CB}' +
'\u{02CD}' +
'\u{02D0}' +
'\u{02D8}-\u{02DB}' +
'\u{02DD}' +
'\u{02DF}' +
'\u{0300}-\u{036F}' +
'\u{0391}-\u{03A9}' +
'\u{03B1}-\u{03C1}' +
'\u{03C3}-\u{03C9}' +
'\u{0401}' +
'\u{0410}-\u{044F}' +
'\u{0451}' +
'\u{2010}' +
'\u{2013}-\u{2016}' +
'\u{2018}-\u{2019}' +
'\u{201C}-\u{201D}' +
'\u{2020}-\u{2022}' +
'\u{2024}-\u{2027}' +
'\u{2030}' +
'\u{2032}-\u{2033}' +
'\u{2035}' +
'\u{203B}' +
'\u{203E}' +
'\u{2074}' +
'\u{207F}' +
'\u{2081}-\u{2084}' +
'\u{20AC}' +
'\u{2103}' +
'\u{2105}' +
'\u{2109}' +
'\u{2113}' +
'\u{2116}' +
'\u{2121}-\u{2122}' +
'\u{2126}' +
'\u{212B}' +
'\u{2153}-\u{2154}' +
'\u{215B}-\u{215E}' +
'\u{2160}-\u{216B}' +
'\u{2170}-\u{2179}' +
'\u{2189}-\u{2199}' +
'\u{21B8}-\u{21B9}' +
'\u{21D2}' +
'\u{21D4}' +
'\u{21E7}' +
'\u{2200}' +
'\u{2202}-\u{2203}' +
'\u{2207}-\u{2208}' +
'\u{220B}' +
'\u{220F}' +
'\u{2211}' +
'\u{2215}' +
'\u{221A}' +
'\u{221D}-\u{2220}' +
'\u{2223}' +
'\u{2225}' +
'\u{2227}-\u{222C}' +
'\u{222E}' +
'\u{2234}-\u{2237}' +
'\u{223C}-\u{223D}' +
'\u{2248}' +
'\u{224C}' +
'\u{2252}' +
'\u{2260}-\u{2261}' +
'\u{2264}-\u{2267}' +
'\u{226A}-\u{226B}' +
'\u{226E}-\u{226F}' +
'\u{2282}-\u{2283}' +
'\u{2286}-\u{2287}' +
'\u{2295}' +
'\u{2299}' +
'\u{22A5}' +
'\u{22BF}' +
'\u{2312}' +
'\u{2460}-\u{24E9}' +
'\u{24EB}-\u{254B}' +
'\u{2550}-\u{2573}' +
'\u{2580}-\u{258F}' +
'\u{2592}-\u{2595}' +
'\u{25A0}-\u{25A1}' +
'\u{25A3}-\u{25A9}' +
'\u{25B2}-\u{25B3}' +
'\u{25B6}-\u{25B7}' +
'\u{25BC}-\u{25BD}' +
'\u{25C0}-\u{25C1}' +
'\u{25C6}-\u{25C8}' +
'\u{25CB}' +
'\u{25CE}-\u{25D1}' +
'\u{25E2}-\u{25E5}' +
'\u{25EF}' +
'\u{2605}-\u{2606}' +
'\u{2609}' +
'\u{260E}-\u{260F}' +
'\u{2614}-\u{2615}' +
'\u{261C}' +
'\u{261E}' +
'\u{2640}' +
'\u{2642}' +
'\u{2660}-\u{2661}' +
'\u{2663}-\u{2665}' +
'\u{2667}-\u{266A}' +
'\u{266C}-\u{266D}' +
'\u{266F}' +
'\u{269E}-\u{269F}' +
'\u{26BE}-\u{26BF}' +
'\u{26C4}-\u{26CD}' +
'\u{26CF}-\u{26E1}' +
'\u{26E3}' +
'\u{26E8}-\u{2700}' +
'\u{273D}' +
'\u{2757}' +
'\u{2776}-\u{277F}' +
'\u{2B55}-\u{2BFF}' +
'\u{3248}-\u{324F}' +
'\u{E000}-\u{F8FF}' +
'\u{FE00}-\u{FE0F}' +
'\u{FFFD}-\u{FFFF}' +
'\u{1F100}-\u{1F12D}' +
'\u{1F130}-\u{1F169}' +
'\u{1F170}-\u{1F1E5}' +
']'
VERSION =
"0.0.6"
@@c1 =
/( #{r1}+ )/x
@@c0 =
/( #{r0}+ )/x
@@t1 =
/( #{r1} ) | . /x
@@t0 =
/( #{r0} ) | . /x

Class Method Summary collapse

Class Method Details

.count(*args) ⇒ Object



18
19
20
21
# File 'lib/visual_width.rb', line 18

def count(*args)
  warn "count() is deprecated. use measure() instead"
  measure(*args)
end

.each_width(str, max_width, east_asian: EAST_ASIAN) ⇒ Object

requires block



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/visual_width.rb', line 32

def each_width(str, max_width, east_asian: EAST_ASIAN) # requires block
  rx = east_asian ? @@t1 : @@t0
  pos = 0
  width = 0
  str.scan(rx) do |wide,|
    width += wide ? 2 : 1
    pos += 1

    next_char = str[pos]
    next_char_width = next_char ? measure(next_char, east_asian: east_asian) : 0
    if (width + next_char_width) > max_width
      yield str.slice(0, pos)
      str = str.slice(pos, str.length)
      pos = 0
      width = 0
    end
  end
  if str.length > 0
    yield str
  end
end

.measure(str, east_asian: EAST_ASIAN) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/visual_width.rb', line 23

def measure(str, east_asian: EAST_ASIAN)
  rx = east_asian ? @@c1 : @@c0
  full_width = 0
  str.scan(rx) do |wide,|
    full_width += wide.length
  end
  (full_width * 2) + (str.length - full_width)
end

.truncate(str, max_length, omission: '...', east_asian: EAST_ASIAN) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# File 'lib/visual_width.rb', line 54

def truncate(str, max_length, omission: '...', east_asian: EAST_ASIAN)
  max = max_length - omission.length
  each_width(str, max, east_asian: east_asian) do |line|
    if line.length == str.length
      return line
    else
      return line + omission
    end
  end
end