TermBuf::Unicode::Tables
Character properties packed one UInt16 to a range of code points.
Unicode is the way in; nothing here is meant to be read directly.
Constants
AMBIGUOUS_BIT = 64_u16
EMOJI_BIT = 1024_u16
GCB_MASK = 15_u16
IGNORABLE_BIT = 2048_u16
INCB_MASK = 768_u16
INCB_SHIFT = 8_u16
PICTOGRAPHIC_BIT = 128_u16
RANGE_COUNT = 2557
RANGE_PROPS = begin
slice = Slice(UInt16).new(RANGE_COUNT, 0_u16)
decode(PROP_WORDS, RANGE_COUNT) do |index, word| slice[index] = word.to_u16 end
slice
end
Packed properties for the range beginning at the same index.
RANGE_START = begin
slice = Slice(Int32).new(RANGE_COUNT, 0)
running = 0
decode(START_DELTAS, RANGE_COUNT) do |index, delta|
running = running + delta
slice[index] = running
end
slice
end
First code point of each range, ascending. Range n runs from
RANGE_START[n] through RANGE_START[n + 1] - 1, so the ranges tile
the whole code point space and a lookup never misses.
UNICODE_VERSION = "16.0.0"
WIDTH_MASK = 48_u16
WIDTH_SHIFT = 4_u16