module TermBuf::Unicode::Tables

Overview

Character properties packed one UInt16 to a range of code points.

Unicode is the way in; nothing here is meant to be read directly.

Defined in:

termbuf/unicode/tables.cr

Constant Summary

AMBIGUOUS_BIT = 64_u16
GCB_MASK = 15_u16
INCB_MASK = 768_u16
INCB_SHIFT = 8_u16
PICTOGRAPHIC_BIT = 128_u16
RANGE_COUNT = 2447
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