1b8e80941Smrg/* The GLSL specification is not specific about how to handle a non-space 2b8e80941Smrg * character separating a macro identifier from the replacement list. It says 3b8e80941Smrg * only "as is standard for C++ preprocessors". GCC accepts these and warns of 4b8e80941Smrg * "missing whitespace". So we'll accept these, (though we don't warn). 5b8e80941Smrg * 6b8e80941Smrg * Note: 'O' is intentionally omitted to leave room for "octothorpe" if we 7b8e80941Smrg * decide it should be legal to use a hash here, (in fact, hash has no 8b8e80941Smrg * legal use as the first token in a macro replacement list, but one 9b8e80941Smrg * could argue that that could still be allowed if the macro were never 10b8e80941Smrg * instantiated). 11b8e80941Smrg */ 12b8e80941Smrg#define A& ampersand 13b8e80941Smrg#define B! bang 14b8e80941Smrg#define C, comma 15b8e80941Smrg#define D/ divider 16b8e80941Smrg#define E= equals 17b8e80941Smrg#define F. full stop 18b8e80941Smrg#define G> greater than 19b8e80941Smrg#define H- hyphen 20b8e80941Smrg#define I+ incrementor 21b8e80941Smrg#define J[ JSON array 22b8e80941Smrg#define K} kurly brace? 23b8e80941Smrg#define L< less than 24b8e80941Smrg#define M{ moustache 25b8e80941Smrg#define N^ nose 26b8e80941Smrg#define P) parenthesis (right) 27b8e80941Smrg#define Q? question mark 28b8e80941Smrg#define R% ratio indicator 29b8e80941Smrg#define S] square bracket (right) 30b8e80941Smrg#define T~ tilde 31b8e80941Smrg#define U: umlaut? 32b8e80941Smrg#define V| vertical bar 33b8e80941Smrg#define W; wink 34b8e80941Smrg#define X* X (as multiplication) 35b8e80941SmrgA 36b8e80941SmrgB 37b8e80941SmrgC 38b8e80941SmrgD 39b8e80941SmrgE 40b8e80941SmrgF 41b8e80941SmrgG 42b8e80941SmrgH 43b8e80941SmrgI 44b8e80941SmrgJ 45b8e80941SmrgK 46b8e80941SmrgL 47b8e80941SmrgM 48b8e80941SmrgN 49b8e80941SmrgP 50b8e80941SmrgQ 51b8e80941SmrgR 52b8e80941SmrgS 53b8e80941SmrgT 54b8e80941SmrgU 55b8e80941SmrgV 56b8e80941SmrgW 57b8e80941SmrgX 58b8e80941Smrg 59