Class: Ucode::Parsers::Blocks
Overview
Parses ‘Blocks.txt` — one block range per line.
Format (UAX #44):
XXXX..XXXX; Block Name
The ‘id` is the block name with runs of whitespace collapsed to a single underscore. The `name` is preserved verbatim. Per the project rules (CLAUDE.md), block names are NOT otherwise slugified.
‘plane_number` is derived from the high bits of `range_first`.
Class Method Summary collapse
-
.each_record(path) ⇒ Object
Yields one Block per non-comment line.
Methods inherited from Base
each_line, parse_codepoint_or_range, parse_field, parse_hex_cp
Class Method Details
.each_record(path) ⇒ Object
Yields one Block per non-comment line. Returns a lazy Enumerator when called without a block.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/ucode/parsers/blocks.rb', line 22 def each_record(path) return enum_for(:each_record, path) unless block_given? each_line(path) do |line| fields = line.fields next if fields.length < 2 range_field = fields[0] name = fields[1] next if name.nil? || name.empty? range = parse_codepoint_or_range(range_field) yield build_block(range, name) end nil end |