Class: Unmagic::Color::RGB::Named

Inherits:
Object
  • Object
show all
Defined in:
lib/unmagic/color/rgb/named.rb

Overview

Named colors support for RGB colors with X11 and CSS/W3C databases.

Provides access to named colors from two databases:

  • X11 database (658 colors) - default

  • CSS/W3C database (148 colors) - accessible via prefix

Five colors have different values between databases: gray/grey (#bebebe X11 vs #808080 CSS), green (#00ff00 X11 vs #008000 CSS), maroon (#b03060 X11 vs #800000 CSS), purple (#a020f0 X11 vs #800080 CSS)

Examples:

Parse a named color (uses X11 by default)

Unmagic::Color::RGB::Named.parse("goldenrod")
#=> RGB instance for #daa520

Use CSS/W3C database with prefix

Unmagic::Color::RGB::Named.parse("css:gray")
#=> RGB instance for #808080 (CSS value)
Unmagic::Color::RGB::Named.parse("gray")
#=> RGB instance for #bebebe (X11 value)

Case-insensitive and whitespace-tolerant

Unmagic::Color::RGB::Named.parse("Golden Rod")
#=> RGB instance for #daa520
Unmagic::Color::RGB::Named.parse("GOLDENROD")
#=> RGB instance for #daa520

Check if a name is valid

Unmagic::Color::RGB::Named.valid?("goldenrod")
#=> true
Unmagic::Color::RGB::Named.valid?("notacolor")
#=> false

Defined Under Namespace

Classes: Database, ParseError

Constant Summary collapse

X11 =

X11 color database (658 colors)

Database.new(
  path: File.join(Color::DATA_PATH, "x11.jsonc"),
  name: "x11",
)
CSS =

CSS/W3C color database (148 colors)

Database.new(
  path: File.join(Color::DATA_PATH, "css.jsonc"),
  name: "css",
  aliases: ["w3c"],
)

Class Method Summary collapse

Class Method Details

.databasesArray<Database>

Get all available color databases.

Examples:

Get all databases

Unmagic::Color::RGB::Named.databases
#=> [X11, CSS]

Get color names from a specific database

Unmagic::Color::RGB::Named.databases.first.all.take(5)
#=> ["aliceblue", "antiquewhite", ...]

Returns:

  • (Array<Database>)

    Array of database instances



219
220
221
# File 'lib/unmagic/color/rgb/named.rb', line 219

def databases
  [X11, CSS]
end

.find_by_name(search) ⇒ Database?

Find a database by name or alias.

Examples:

Find by name

Unmagic::Color::RGB::Named.find_by_name("x11")
#=> X11 database

Find by alias

Unmagic::Color::RGB::Named.find_by_name("w3c")
#=> CSS database

Parameters:

  • search (String)

    Name or alias to search for

Returns:

  • (Database, nil)

    Matching database or nil



235
236
237
238
239
240
# File 'lib/unmagic/color/rgb/named.rb', line 235

def find_by_name(search)
  normalized = search.strip.downcase
  all_by_name.fetch(normalized)
rescue KeyError
  nil
end

.parse(name) ⇒ RGB

Parse a named color and return its RGB representation.

Supports database prefixes (css:, w3c:, x11:) to select specific database. Without prefix, uses X11 database by default.

Examples:

Parse from X11 database (default)

Unmagic::Color::RGB::Named.parse("goldenrod")
#=> RGB instance for #daa520

Parse from CSS database

Unmagic::Color::RGB::Named.parse("css:gray")
#=> RGB instance for #808080

Parameters:

  • name (String)

    The color name to parse (case-insensitive)

Returns:

  • (RGB)

    The RGB color instance

Raises:

  • (ParseError)

    If the color name is not recognized



180
181
182
183
184
185
186
187
# File 'lib/unmagic/color/rgb/named.rb', line 180

def parse(name)
  database, color_name = resolve_database(name)
  color = database[color_name]

  raise ParseError, "Unknown color name in #{database.name} database: #{color_name.inspect}" unless color

  color
end

.valid?(name) ⇒ Boolean

Check if a color name is valid.

Supports database prefixes to check specific database.

Examples:

Check in X11 database (default)

Unmagic::Color::RGB::Named.valid?("goldenrod")
#=> true

Check in CSS database

Unmagic::Color::RGB::Named.valid?("css:gray")
#=> true

Parameters:

  • name (String)

    The color name to check

Returns:

  • (Boolean)

    true if the name exists



203
204
205
206
# File 'lib/unmagic/color/rgb/named.rb', line 203

def valid?(name)
  database, color_name = resolve_database(name)
  database.valid?(color_name)
end