Module: Fontisan::Cldr::Aggregator

Defined in:
lib/fontisan/cldr/aggregator.rb

Overview

Produces audit-ready per-language coverage from a codepoint list and a Cldr::Index of per-language exemplar sets.

Pure: no I/O, no side effects.

Class Method Summary collapse

Class Method Details

.aggregate(codepoints, languages_index) ⇒ Array<Models::Cldr::LanguageCoverage>

Returns sorted by descending coverage_ratio, then by language name.

Parameters:

  • codepoints (Enumerable<Integer>)

    font's codepoints

  • languages_index (Cldr::Index)

Returns:



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/fontisan/cldr/aggregator.rb', line 16

def aggregate(codepoints, languages_index)
  font_set = Set.new(codepoints)

  languages_index.entries.map do |lang, required_set|
    covered = (font_set & required_set).size
    total = required_set.size
    Models::Cldr::LanguageCoverage.new(
      language: lang,
      covered: covered,
      total: total,
      coverage_ratio: total.zero? ? 0.0 : covered.fdiv(total).round(4),
      fully_supported: total.positive? && covered == total,
    )
  end.sort_by { |lc| [lc.coverage_ratio * -1, lc.language] }
end