#! /usr/bin/env ruby

table = {
  i000: '#000000', i001: '#800000', i002: '#008000', i003: '#808000', i004: '#000080',
  i005: '#800080', i006: '#008080', i007: '#c0c0c0', i008: '#808080', i009: '#ff0000',
  i010: '#00ff00', i011: '#ffff00', i012: '#0000ff', i013: '#ff00ff', i014: '#00ffff',
  i015: '#ffffff', i016: '#000000', i017: '#00005f', i018: '#000087', i019: '#0000af',
  i020: '#0000d7', i021: '#0000ff', i022: '#005f00', i023: '#005f5f', i024: '#005f87',
  i025: '#005faf', i026: '#005fd7', i027: '#005fff', i028: '#008700', i029: '#00875f',
  i030: '#008787', i031: '#0087af', i032: '#0087d7', i033: '#0087ff', i034: '#00af00',
  i035: '#00af5f', i036: '#00af87', i037: '#00afaf', i038: '#00afd7', i039: '#00afff',
  i040: '#00d700', i041: '#00d75f', i042: '#00d787', i043: '#00d7af', i044: '#00d7d7',
  i045: '#00d7ff', i046: '#00ff00', i047: '#00ff5f', i048: '#00ff87', i049: '#00ffaf',
  i050: '#00ffd7', i051: '#00ffff', i052: '#5f0000', i053: '#5f005f', i054: '#5f0087',
  i055: '#5f00af', i056: '#5f00d7', i057: '#5f00ff', i058: '#5f5f00', i059: '#5f5f5f',
  i060: '#5f5f87', i061: '#5f5faf', i062: '#5f5fd7', i063: '#5f5fff', i064: '#5f8700',
  i065: '#5f875f', i066: '#5f8787', i067: '#5f87af', i068: '#5f87d7', i069: '#5f87ff',
  i070: '#5faf00', i071: '#5faf5f', i072: '#5faf87', i073: '#5fafaf', i074: '#5fafd7',
  i075: '#5fafff', i076: '#5fd700', i077: '#5fd75f', i078: '#5fd787', i079: '#5fd7af',
  i080: '#5fd7d7', i081: '#5fd7ff', i082: '#5fff00', i083: '#5fff5f', i084: '#5fff87',
  i085: '#5fffaf', i086: '#5fffd7', i087: '#5fffff', i088: '#870000', i089: '#87005f',
  i090: '#870087', i091: '#8700af', i092: '#8700d7', i093: '#8700ff', i094: '#875f00',
  i095: '#875f5f', i096: '#875f87', i097: '#875faf', i098: '#875fd7', i099: '#875fff',
  i100: '#878700', i101: '#87875f', i102: '#878787', i103: '#8787af', i104: '#8787d7',
  i105: '#8787ff', i106: '#87af00', i107: '#87af5f', i108: '#87af87', i109: '#87afaf',
  i110: '#87afd7', i111: '#87afff', i112: '#87d700', i113: '#87d75f', i114: '#87d787',
  i115: '#87d7af', i116: '#87d7d7', i117: '#87d7ff', i118: '#87ff00', i119: '#87ff5f',
  i120: '#87ff87', i121: '#87ffaf', i122: '#87ffd7', i123: '#87ffff', i124: '#af0000',
  i125: '#af005f', i126: '#af0087', i127: '#af00af', i128: '#af00d7', i129: '#af00ff',
  i130: '#af5f00', i131: '#af5f5f', i132: '#af5f87', i133: '#af5faf', i134: '#af5fd7',
  i135: '#af5fff', i136: '#af8700', i137: '#af875f', i138: '#af8787', i139: '#af87af',
  i140: '#af87d7', i141: '#af87ff', i142: '#afaf00', i143: '#afaf5f', i144: '#afaf87',
  i145: '#afafaf', i146: '#afafd7', i147: '#afafff', i148: '#afd700', i149: '#afd75f',
  i150: '#afd787', i151: '#afd7af', i152: '#afd7d7', i153: '#afd7ff', i154: '#afff00',
  i155: '#afff5f', i156: '#afff87', i157: '#afffaf', i158: '#afffd7', i159: '#afffff',
  i160: '#d70000', i161: '#d7005f', i162: '#d70087', i163: '#d700af', i164: '#d700d7',
  i165: '#d700ff', i166: '#d75f00', i167: '#d75f5f', i168: '#d75f87', i169: '#d75faf',
  i170: '#d75fd7', i171: '#d75fff', i172: '#d78700', i173: '#d7875f', i174: '#d78787',
  i175: '#d787af', i176: '#d787d7', i177: '#d787ff', i178: '#dfaf00', i179: '#dfaf5f',
  i180: '#dfaf87', i181: '#dfafaf', i182: '#dfafdf', i183: '#dfafff', i184: '#dfdf00',
  i185: '#dfdf5f', i186: '#dfdf87', i187: '#dfdfaf', i188: '#dfdfdf', i189: '#dfdfff',
  i190: '#dfff00', i191: '#dfff5f', i192: '#dfff87', i193: '#dfffaf', i194: '#dfffdf',
  i195: '#dfffff', i196: '#ff0000', i197: '#ff005f', i198: '#ff0087', i199: '#ff00af',
  i200: '#ff00df', i201: '#ff00ff', i202: '#ff5f00', i203: '#ff5f5f', i204: '#ff5f87',
  i205: '#ff5faf', i206: '#ff5fdf', i207: '#ff5fff', i208: '#ff8700', i209: '#ff875f',
  i210: '#ff8787', i211: '#ff87af', i212: '#ff87df', i213: '#ff87ff', i214: '#ffaf00',
  i215: '#ffaf5f', i216: '#ffaf87', i217: '#ffafaf', i218: '#ffafdf', i219: '#ffafff',
  i220: '#ffdf00', i221: '#ffdf5f', i222: '#ffdf87', i223: '#ffdfaf', i224: '#ffdfdf',
  i225: '#ffdfff', i226: '#ffff00', i227: '#ffff5f', i228: '#ffff87', i229: '#ffffaf',
  i230: '#ffffdf', i231: '#ffffff', i232: '#080808', i233: '#121212', i234: '#1c1c1c',
  i235: '#262626', i236: '#303030', i237: '#3a3a3a', i238: '#444444', i239: '#4e4e4e',
  i240: '#585858', i241: '#626262', i242: '#6c6c6c', i243: '#767676', i244: '#808080',
  i245: '#8a8a8a', i246: '#949494', i247: '#9e9e9e', i248: '#a8a8a8', i249: '#b2b2b2',
  i250: '#bcbcbc', i251: '#c6c6c6', i252: '#d0d0d0', i253: '#dadada', i254: '#e4e4e4',
  i255: '#eeeeee'
}

# http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
# computing brightness seems not to be easy... since this stuff will be calculated once,
# let's try to take the "best" option, i.e. answer number 4 (by Jive Dadson)

RY = 0.212655
GY = 0.715158
BY = 0.072187

# Inverse of sRGB "gamma" function. (approx 2.2)
def inv_gam_sRGB(ic)
  c = ic / 255.0
  if c <= 0.04045
    c / 12.92
  else
    ((c + 0.055) / 1.055) ** 2.4
  end
end

# sRGB "gamma" function (approx 2.2)
def gam_sRGB(v)
  if v <= 0.0031308
    v *= 12.92
  else
    v = 1.055 * (v ** (1.0 / 2.4)) - 0.055
    (v * 255 + 0.5).to_i
  end
end

# GRAY VALUE ("brightness")
def gray(r, g, b)
  gam_sRGB(RY * inv_gam_sRGB(r) + GY * inv_gam_sRGB(g) + BY * inv_gam_sRGB(b))
end

def split_and_convert(hex)
  return hex[1..2].to_i(16), hex[3..4].to_i(16), hex[5..6].to_i(16)
end

output = []
table.each do |index, color|
  # looking at src/syntax.c, line 7740 i'd say 0 is light, 1 is dark.
  r, g, b = split_and_convert(color)
  value   = gray(r, g, b)
  output << (value > 127 ? 0 : 1)
end

output.each_slice(16) { |arr| puts arr.join(', ') }
