Class: Ucode::Parsers::Blocks

Inherits:
Base
  • Object
show all
Defined in:
lib/ucode/parsers/blocks.rb

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

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