--- /dev/null
+/* Legal characters in GLSL are:
+ *
+ * Identifier characters:
+ *
+ * Letters a-z
+ * Letters A-Z
+ * Underscore
+ * Numbers 0-9
+ *
+ * Punctuation:
+ *
+ * Period, plus, dash, slash, asterisk, percent, angled brackets,
+ * square brackets, parentheses, braces, caret, vertical bar,
+ * ampersand, tilde, equals, exclamation point, colon, semicolon,
+ * comma, and question mark
+ *
+ * Special:
+ *
+ * Number sign (as used in preprocessor)
+ *
+ * Backslash just before newline as line continuation
+ *
+ * White space:
+ *
+ * Space, horizontal tab, vertical tab, form feed, carriage-return,
+ * and line-feed.
+ *
+ * [GLSL Language Specficiation 4.30.6, section 3.1]
+ *
+ * In this file, we test each of these in turn as follows:
+ *
+ * Identifier characters: All pass through unchanged
+ * Punctuation: All pass through unchanged
+ * Special: Empty directive replaced with blank line
+ * Line continuation merges two lines, then a blank line
+ * Whitespace: 4 horizontal space characters each replaced with space
+ * 2 newline characters each replaced with a newline
+ *
+ */
+abcdefghijklmnopqrstuvwxyz
+ABCDEFGHIJKMLNOPQRSTUVWXYZ
+_
+0123456789
+.
++
+-
+/
+*
+%
+<
+>
+[
+]
+(
+)
+{
+}
+^
+|
+&
+~
+=
+!
+:
+;
+,
+?
+#
+.\
+.
+. .
+. .
+.\v.
+.\f.
+..
+.
+.