Class: Shellfie::FontResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/shellfie/font_resolver.rb

Constant Summary collapse

FONT_FILES =
{
  "Monaco" => "/System/Library/Fonts/Monaco.ttf",
  "SF Mono" => "/System/Library/Fonts/SFNSMono.ttf",
  "SF Mono Italic" => "/System/Library/Fonts/SFNSMonoItalic.ttf",
  "Menlo" => "/System/Library/Fonts/Menlo.ttc",
  "Courier" => "/System/Library/Fonts/Courier.ttc",
  "Courier New" => "/System/Library/Fonts/Supplemental/Courier New.ttf",
  "DejaVu-Sans-Mono" => "/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf",
  "DejaVu Sans Mono" => "/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf"
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(command_provider) ⇒ FontResolver

Returns a new instance of FontResolver.



19
20
21
# File 'lib/shellfie/font_resolver.rb', line 19

def initialize(command_provider)
  @command_provider = command_provider
end

Instance Method Details

#details(font_config) ⇒ Object



37
38
39
40
41
# File 'lib/shellfie/font_resolver.rb', line 37

def details(font_config)
  { regular: resolve(font_config, italic: false), italic: resolve(font_config, italic: true) }.transform_values do |font|
    { name: font, sha256: File.file?(font.to_s) ? Digest::SHA256.file(font).hexdigest : nil }
  end
end

#resolve(font_config, italic:) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/shellfie/font_resolver.rb', line 23

def resolve(font_config, italic:)
  candidates = []
  candidates << font_config[:italic_family] if italic
  candidates << font_config[:family]
  candidates << font_config[:fallback_family]
  candidates << font_config[:emoji_family]
  candidates << "Menlo"
  candidates << "DejaVu-Sans-Mono"
  candidates << "Courier"

  candidates.compact.flat_map { |candidate| font_candidates(candidate.to_s) }
            .find { |candidate| font_available?(candidate) }
end