HEX色コードよりも短くなる色キーワード

CSSWringに、HEX色コードと色キーワードのどちらか短い方を使う機能を実装するために調査した。32種類あるみたいだ。

色プレビュー色名HEX
 azure#F0FFFF
 beige#F5F5DC
 bisque#FFE4C4
 brown#A52A2A
 coral#FF7F50
 gold#FFD700
 gray#808080
 green#008000
 grey#808080
 indigo#4B0082
 ivory#FFFFF0
 khaki#F0E68C
 linen#FAF0E6
 maroon#800000
 navy#000080
 olive#808000
 orange#FFA500
 orchid#DA70D6
 peru#CD853F
 pink#FFC0CB
 plum#DDA0DD
 purple#800080
 red#FF0000
 salmon#FA8072
 sienna#A0522D
 silver#C0C0C0
 snow#FFFAFA
 tan#D2B48C
 teal#008080
 tomato#FF6347
 violet#EE82EE
 wheat#F5DEB3
HEX色コードより短くなる色キーワード

おおまかに6文字以下なら短くなるんだけど、一部blackなどは#fffとHEX色コードを省略できるため、色キーワードの方が長くなる。更に例外としてredのみ#f00よりも短くなる。

実装すること自体はそんなに面倒でもない。けどこれを実装すると、色キーワードを切り出してHEX色コードにするとか逆もやらなくちゃならなくなりそうで面倒くさい。

追記

HEX色コードから色キーワードだけはとにかく実装した。rgb() (hsl())→HEX色コード→色キーワードもちゃんと機能するので、rgb(240, 230, 140)とかhsl(54, 76.9%, 74.5%)と書くとkhakiに変換されるようになった。

最初、色変換に使っているone-colorパッケージが内部に持っている色キーワードのリストを変換して変換テーブルを生成しようかと考えていたんだけど、プライベートな変数でアクセスできなかった……。

var shortColors = {};
Object.keys(namedColors).forEach(function (name) {
  var hex = '#' . namedColors[name];

  if (name.length < hex.length) {
    shortColors[hex] = name;
  }
});