Class: Uniword::Resource::FontSchemeLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/resource/font_scheme_loader.rb

Overview

Loads standalone font scheme YAML files from data/font_schemes/

Constant Summary collapse

DATA_DIR =
File.join(__dir__, "../../../data/font_schemes")

Class Method Summary collapse

Class Method Details

.available_schemesArray<String>

List all available bundled font schemes

Returns:

  • (Array<String>)

    Font scheme slugs



41
42
43
44
45
46
47
# File 'lib/uniword/resource/font_scheme_loader.rb', line 41

def self.available_schemes
  return [] unless Dir.exist?(DATA_DIR)

  Dir.glob(File.join(DATA_DIR, "*.yml"))
    .map { |p| File.basename(p, ".yml") }
    .sort
end

.load(name) ⇒ Themes::FontScheme

Load a font scheme by name

Parameters:

  • name (String)

    Font scheme slug (e.g., “carlito_sans”, “modern_office”)

Returns:

Raises:

  • (ArgumentError)

    if font scheme not found



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/uniword/resource/font_scheme_loader.rb', line 16

def self.load(name)
  path = File.join(DATA_DIR, "#{name}.yml")
  unless File.exist?(path)
    raise ArgumentError,
          "Font scheme '#{name}' not found. Available: #{available_schemes.join(', ')}"
  end

  raw = YAML.load_file(path)
  Themes::FontScheme.new(
    name: raw["name"],
    major_font: raw.dig("major", "latin"),
    minor_font: raw.dig("minor", "latin"),
    major_east_asian: raw.dig("major", "east_asian"),
    minor_east_asian: raw.dig("minor", "east_asian"),
    major_complex_script: raw.dig("major", "complex_script"),
    minor_complex_script: raw.dig("minor", "complex_script"),
    per_script: raw["per_script"],
    major_per_script: raw["major_per_script"],
    minor_per_script: raw["minor_per_script"],
  )
end