Module: Fontisan::Audit::CodepointRangeCoalescer

Defined in:
lib/fontisan/audit/codepoint_range_coalescer.rb

Overview

Coalesces a flat codepoint list into contiguous Models::Audit::CodepointRanges.

Single static call site, deterministic output. Used by the Coverage extractor to produce the compact range view that is the default AuditReport shape.

Class Method Summary collapse

Class Method Details

.call(codepoints) ⇒ Array<Models::Audit::CodepointRange>

Returns contiguous, sorted.

Parameters:

  • codepoints (Enumerable<Integer>)

    any enumeration of integers

Returns:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/fontisan/audit/codepoint_range_coalescer.rb', line 15

def call(codepoints)
  return [] if codepoints.nil? || codepoints.empty?

  sorted = codepoints.sort.uniq
  ranges = []
  range_start = sorted[0]
  prev = sorted[0]

  sorted[1..].each do |cp|
    next if cp == prev # defensive: .uniq already handles this

    if cp == prev + 1
      prev = cp
    else
      ranges << Models::Audit::CodepointRange.new(first_cp: range_start,
                                                  last_cp: prev)
      range_start = cp
      prev = cp
    end
  end
  ranges << Models::Audit::CodepointRange.new(first_cp: range_start,
                                              last_cp: prev)
  ranges
end