Class: VimColorScheme::Hex2Term
- Inherits:
-
Object
- Object
- VimColorScheme::Hex2Term
- Defined in:
- lib/vimcolorscheme/hex2term.rb
Constant Summary collapse
- SCLUT =
This colour lookup table is taken from the following gist: gist.github.com/719710
{ # Primary 3-bit (8 colors). Unique representation! '00' => '000000', '01' => '800000', '02' => '008000', '03' => '808000', '04' => '000080', '05' => '800080', '06' => '008080', '07' => 'c0c0c0', # Equivalent "bright" versions of original 8 colors. '08' => '808080', '09' => 'ff0000', '10' => '00ff00', '11' => 'ffff00', '12' => '0000ff', '13' => 'ff00ff', '14' => '00ffff', '15' => 'ffffff', # Strictly ascending. '16' => '000000', '17' => '00005f', '18' => '000087', '19' => '0000af', '20' => '0000d7', '21' => '0000ff', '22' => '005f00', '23' => '005f5f', '24' => '005f87', '25' => '005faf', '26' => '005fd7', '27' => '005fff', '28' => '008700', '29' => '00875f', '30' => '008787', '31' => '0087af', '32' => '0087d7', '33' => '0087ff', '34' => '00af00', '35' => '00af5f', '36' => '00af87', '37' => '00afaf', '38' => '00afd7', '39' => '00afff', '40' => '00d700', '41' => '00d75f', '42' => '00d787', '43' => '00d7af', '44' => '00d7d7', '45' => '00d7ff', '46' => '00ff00', '47' => '00ff5f', '48' => '00ff87', '49' => '00ffaf', '50' => '00ffd7', '51' => '00ffff', '52' => '5f0000', '53' => '5f005f', '54' => '5f0087', '55' => '5f00af', '56' => '5f00d7', '57' => '5f00ff', '58' => '5f5f00', '59' => '5f5f5f', '60' => '5f5f87', '61' => '5f5faf', '62' => '5f5fd7', '63' => '5f5fff', '64' => '5f8700', '65' => '5f875f', '66' => '5f8787', '67' => '5f87af', '68' => '5f87d7', '69' => '5f87ff', '70' => '5faf00', '71' => '5faf5f', '72' => '5faf87', '73' => '5fafaf', '74' => '5fafd7', '75' => '5fafff', '76' => '5fd700', '77' => '5fd75f', '78' => '5fd787', '79' => '5fd7af', '80' => '5fd7d7', '81' => '5fd7ff', '82' => '5fff00', '83' => '5fff5f', '84' => '5fff87', '85' => '5fffaf', '86' => '5fffd7', '87' => '5fffff', '88' => '870000', '89' => '87005f', '90' => '870087', '91' => '8700af', '92' => '8700d7', '93' => '8700ff', '94' => '875f00', '95' => '875f5f', '96' => '875f87', '97' => '875faf', '98' => '875fd7', '99' => '875fff', '100' => '878700', '101' => '87875f', '102' => '878787', '103' => '8787af', '104' => '8787d7', '105' => '8787ff', '106' => '87af00', '107' => '87af5f', '108' => '87af87', '109' => '87afaf', '110' => '87afd7', '111' => '87afff', '112' => '87d700', '113' => '87d75f', '114' => '87d787', '115' => '87d7af', '116' => '87d7d7', '117' => '87d7ff', '118' => '87ff00', '119' => '87ff5f', '120' => '87ff87', '121' => '87ffaf', '122' => '87ffd7', '123' => '87ffff', '124' => 'af0000', '125' => 'af005f', '126' => 'af0087', '127' => 'af00af', '128' => 'af00d7', '129' => 'af00ff', '130' => 'af5f00', '131' => 'af5f5f', '132' => 'af5f87', '133' => 'af5faf', '134' => 'af5fd7', '135' => 'af5fff', '136' => 'af8700', '137' => 'af875f', '138' => 'af8787', '139' => 'af87af', '140' => 'af87d7', '141' => 'af87ff', '142' => 'afaf00', '143' => 'afaf5f', '144' => 'afaf87', '145' => 'afafaf', '146' => 'afafd7', '147' => 'afafff', '148' => 'afd700', '149' => 'afd75f', '150' => 'afd787', '151' => 'afd7af', '152' => 'afd7d7', '153' => 'afd7ff', '154' => 'afff00', '155' => 'afff5f', '156' => 'afff87', '157' => 'afffaf', '158' => 'afffd7', '159' => 'afffff', '160' => 'd70000', '161' => 'd7005f', '162' => 'd70087', '163' => 'd700af', '164' => 'd700d7', '165' => 'd700ff', '166' => 'd75f00', '167' => 'd75f5f', '168' => 'd75f87', '169' => 'd75faf', '170' => 'd75fd7', '171' => 'd75fff', '172' => 'd78700', '173' => 'd7875f', '174' => 'd78787', '175' => 'd787af', '176' => 'd787d7', '177' => 'd787ff', '178' => 'd7af00', '179' => 'd7af5f', '180' => 'd7af87', '181' => 'd7afaf', '182' => 'd7afd7', '183' => 'd7afff', '184' => 'd7d700', '185' => 'd7d75f', '186' => 'd7d787', '187' => 'd7d7af', '188' => 'd7d7d7', '189' => 'd7d7ff', '190' => 'd7ff00', '191' => 'd7ff5f', '192' => 'd7ff87', '193' => 'd7ffaf', '194' => 'd7ffd7', '195' => 'd7ffff', '196' => 'ff0000', '197' => 'ff005f', '198' => 'ff0087', '199' => 'ff00af', '200' => 'ff00d7', '201' => 'ff00ff', '202' => 'ff5f00', '203' => 'ff5f5f', '204' => 'ff5f87', '205' => 'ff5faf', '206' => 'ff5fd7', '207' => 'ff5fff', '208' => 'ff8700', '209' => 'ff875f', '210' => 'ff8787', '211' => 'ff87af', '212' => 'ff87d7', '213' => 'ff87ff', '214' => 'ffaf00', '215' => 'ffaf5f', '216' => 'ffaf87', '217' => 'ffafaf', '218' => 'ffafd7', '219' => 'ffafff', '220' => 'ffd700', '221' => 'ffd75f', '222' => 'ffd787', '223' => 'ffd7af', '224' => 'ffd7d7', '225' => 'ffd7ff', '226' => 'ffff00', '227' => 'ffff5f', '228' => 'ffff87', '229' => 'ffffaf', '230' => 'ffffd7', '231' => 'ffffff', # Gr' => scale rang. '232' => '080808', '233' => '121212', '234' => '1c1c1c', '235' => '262626', '236' => '303030', '237' => '3a3a3a', '238' => '444444', '239' => '4e4e4e', '240' => '585858', '241' => '626262', '242' => '6c6c6c', '243' => '767676', '244' => '808080', '245' => '8a8a8a', '246' => '949494', '247' => '9e9e9e', '248' => 'a8a8a8', '249' => 'b2b2b2', '250' => 'bcbcbc', '251' => 'c6c6c6', '252' => 'd0d0d0', '253' => 'dadada', '254' => 'e4e4e4', '255' => 'eeeeee', }
- HCLUT =
Hex color lookup table. Essentially this is exactly the same as the short color lookup table but inverted. So k => v becomes v => k.
SCLUT.invert
Class Method Summary collapse
-
.convert(value) ⇒ Object
Takes either a short color value or a hexidecimal color value and converts it to the other format respectively.
-
.rgb2short(rgb) ⇒ Object
Takes an RGB hex value, with or without the leading hash, and converts it into one of 256 color values used by terminals.
-
.short2rb(short) ⇒ Object
Takes a short color value (e.g. between 0 and 255) and returns the hexadecimal equivalent with a leading hash.
-
.strip_hash(hex) ⇒ Object
Takes a string that may or may not have a hash at the start and returns a string that does not have a hash at the start.
Class Method Details
.convert(value) ⇒ Object
Takes either a short color value or a hexidecimal color value and converts it to the other format respectively.
Example:
convert(23)
# => '005f5f'
convert('#ffffff')
# => '231'
285 286 287 288 289 290 291 |
# File 'lib/vimcolorscheme/hex2term.rb', line 285 def self.convert value if value.to_s.length < 4 and value.to_s.to_i < 256 short2rb(value) else rgb2short(value) end end |
.rgb2short(rgb) ⇒ Object
Takes an RGB hex value, with or without the leading hash, and converts it into one of 256 color values used by terminals.
The method for doing it was borrowed with lots of love from this gist: gist.github.com/719710
Example:
rgb2short('#ffffff')
# => '231'
314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 |
# File 'lib/vimcolorscheme/hex2term.rb', line 314 def self.rgb2short rgb rgb = strip_hash(rgb) incs = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff] parts = rgb.split(/(..)(..)(..)/).map { |part| part.to_i(16) } res = [] # The above split will have an empty string at the start, this gets rid of # it parts.shift parts.each do |part| incs.each_cons(2) do |s, b| if s <= part and part <= b s1 = (s - part).abs b1 = (b - part).abs if s1 < b1 closest = s else closest = b end res << closest break end end end key = res.map { |part| part.to_s(16).center(2, '0') }.join HCLUT[key] end |
.short2rb(short) ⇒ Object
Takes a short color value (e.g. between 0 and 255) and returns the hexadecimal equivalent with a leading hash.
Example:
short2rb(231)
# => '#ffffff'
300 301 302 |
# File 'lib/vimcolorscheme/hex2term.rb', line 300 def self.short2rb short '#' + SCLUT[short.to_s] end |
.strip_hash(hex) ⇒ Object
Takes a string that may or may not have a hash at the start and returns a string that does not have a hash at the start.
Example:
strip_hash('#ffffff')
# => 'ffffff'
353 354 355 |
# File 'lib/vimcolorscheme/hex2term.rb', line 353 def self.strip_hash hex hex.delete '#' end |