Sha256: 4b5bb786c556b1db018068b9d6462d4257349975cc6d8ab260dc660b2bdfc4f9

Contents?: true

Size: 1.61 KB

Versions: 5

Compression:

Stored size: 1.61 KB

Contents

require_relative "system_index"

module Fontist
  class SystemFont
    def initialize(font:, style: nil)
      @font = font
      @style = style
    end

    def self.font_paths
      system_font_paths + fontist_font_paths
    end

    def self.system_font_paths
      @system_font_paths ||= load_system_font_paths
    end

    def self.load_system_font_paths
      os = Fontist::Utils::System.user_os.to_s
      templates = system_config["system"][os]["paths"]
      patterns = expand_paths(templates)

      Dir.glob(patterns)
      # File::FNM_CASEFOLD is officially ignored -- see https://ruby-doc.org/core-3.1.1/Dir.html#method-c-glob
      # "Case sensitivity depends on your system"
    end

    def self.system_config
      YAML.load_file(Fontist.system_file_path)
    end

    def self.reset_system_font_paths_cache
      @system_font_paths = nil
    end

    def self.expand_paths(paths)
      paths.map do |path|
        require "etc"
        passwd = Etc.getpwuid
        username = passwd ? passwd.name : Etc.getlogin

        username ? path.gsub("{username}", username) : path
      end
    end

    def self.fontist_font_paths
      Dir.glob(Fontist.fonts_path.join("**"))
    end

    def self.find(font)
      new(font: font).find
    end

    def self.find_styles(font, style)
      new(font: font, style: style).find_styles
    end

    def find
      styles = find_styles
      return unless styles

      styles.map { |x| x[:path] }
    end

    def find_styles
      find_by_index
    end

    private

    attr_reader :font, :style

    def find_by_index
      SystemIndex.system_index.find(font, style)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
fontist-1.21.2 lib/fontist/system_font.rb
fontist-1.21.1 lib/fontist/system_font.rb
fontist-1.20.0 lib/fontist/system_font.rb
fontist-1.19.0 lib/fontist/system_font.rb
fontist-1.18.2 lib/fontist/system_font.rb