#!/usr/bin/env ruby # color lists extracted from # http://people.csail.mit.edu/jaffer/Color/Dictionaries require 'simplecolor' # To parse X11's rgb.txt: # c=Pathname.new("rgb.txt") # h={}; c.each_line do |l| next if l =~ /^!/; r,g,b,name=l.strip.split(/\s+/,4); h[name.chomp]=SimpleColor::RGB.new([r.to_i,g.to_i,b.to_i]).to_hex end def read_file(filename) File.open(filename, "r") do |file| if filename.end_with?('.gz') serialized_data = Zlib::GzipReader.new(file).read else serialized_data = file.read end return JSON.parse(serialized_data) end end def write_file(h, filename) r=nil File.open(filename, "w") do |file| file=Zlib::GzipWriter.new(file) if filename.end_with?('.gz') r=file.write(h.to_json) file.close end return r end def load_colors @x11=read_file("x11_colors.json") @xkcd=read_file("xkcd_colors.json") @resene=read_file("Resene2010_colors.json") @nbs=read_file("NBS-ISCC_colors.json") @colorschemes={ "solarized_base03" => "#002b36", "solarized_base02" => "#073642", "solarized_base01" => "#586e75", "solarized_base00" => "#657b83", "solarized_base0" => "#839496", "solarized_base1" => "#93a1a1", "solarized_base2" => "#eee8d5", "solarized_base3" => "#fdf6e3", "solarized_yellow" => "#b58900", "solarized_orange" => "#cb4b16", "solarized_red" => "#dc322f", "solarized_magenta" => "#d33682", "solarized_violet" => "#6c71c4", "solarized_blue" => "#268bd2", "solarized_cyan" => "#2aa198", "solarized_green" => "#859900", } @keys=->(h) {h.keys.map {|i| SimpleColor::RGB.rgb_clean(i)}} end def merge_colors h={} # first means higher priority for the search %i(nbs resene x11 xkcd colorschemes).each do |i| h[i]={} col=instance_variable_get(:"@#{i}") col.each do |k,v| h[i][SimpleColor::RGB.rgb_clean(k)]=v end end h end def write_colors load_colors h=merge_colors r=write_file(h, "rgb_colors.json.gz") puts "Wrote rgb_colors.json.gz: #{r}" end # (@keys[@x11] & @keys[@xkcd]).length #=>89 # (@keys[@x11] & @keys[@resene]).length #=>16 # (@keys[@x11] & @keys[@nbs]).length #=>15 # (@keys[@xkcd] & @keys[@resene]).length #=>93 # (@keys[@xkcd] & @keys[@nbs]).length #=>67 # (@keys[@resene] & @keys[@nbs]).length #=>0 if __FILE__ == $0 Dir.chdir(File.dirname(__FILE__)) do puts write_colors end end