Mini GLSL minifier (WebGL 1.0 / 2.0)

- Removes comments
- Removes unnecessary spaces, tabs, line breaks
- Removes unnecessary zeroes in numbers (floats, ints, octals, hex)
- Inserts "\n" around #macros to keep all the code on a single line

Test shader:

#version 300 es    // webgl2
precision mediump float;
 uniform vec3 light;
in vec3 v_position;
in vec4 v_color;
out vec4      c;\n
#define PI 3\n
#define 2PI 7\n

void main() { /* compute fragment 
  multiline comment */
  vec4 testFloats = vec4(010.00, 01.1200, 0.02030, 00.00);
  vec4 testInts = vec4(0, 1, 100, 10010);
  int testOctal = 0010;
  int testHex = 0x001F;
  c = vec4(
    v_color.rgb * (
      max(dot(light, normalize(cross(dFdx(v_position), dFdy(v_position)))), 0.0) // ambient light
      + 0.200 // diffuse light
    ), 1
  );
}