diff --git a/src/include/util.h b/src/include/util.h index a9a7ea7..1cd2355 100644 --- a/src/include/util.h +++ b/src/include/util.h @@ -20,40 +20,61 @@ // Resent color code. #define COL_RESET "\e[0m" -// Bold while color code. + +// Regular color codes. +#define COL_BLA "\e[0;30m" +#define COL_RED "\e[0;31m" +#define COL_GRE "\e[0;32m" +#define COL_YEL "\e[0;33m" +#define COL_BLU "\e[0;34m" +#define COL_MAG "\e[0;35m" +#define COL_CYA "\e[0;36m" +#define COL_WHI "\e[0;37m" + +// Bold color codes. +#define COL_BBLA "\e[1;30m" +#define COL_BRED "\e[1;31m" +#define COL_BGRE "\e[1;32m" +#define COL_BYEL "\e[1;33m" +#define COL_BBLU "\e[1;34m" +#define COL_BMAG "\e[1;35m" +#define COL_BCYA "\e[1;36m" #define COL_BWHI "\e[1;37m" // Start in indent block. #define INDENT_BEGIN(ILVL) \ - int INDENT_lvl = ILVL; \ + __attribute__((unused)) int INDENT_lvl = ILVL; \ Dstr* INDENT_spacing = dstr_init(); \ for (int INDENT_j = 0; INDENT_j < ILVL; INDENT_j++) \ dstr_appendch(INDENT_spacing, ' '); // Print & indent the title of a section. #define INDENT_TITLE(THING, WHERE) \ - printf("%s" COL_BWHI THING " @ %p\n" COL_RESET, INDENT_spacing->buf, WHERE); + printf("%s" COL_BCYA THING " @ %p\n" COL_RESET, INDENT_spacing->buf, WHERE); // Print & indent a thing. #define INDENT_FIELD(FIELD, VAL, ...) \ - printf("%s " FIELD ": " VAL "\n", INDENT_spacing->buf, __VA_ARGS__); + printf("%s " COL_BWHI FIELD ": " COL_RESET COL_WHI VAL COL_RESET "\n", \ + INDENT_spacing->buf, __VA_ARGS__); // Print & indent a thing with a newline before the val. #define INDENT_FIELD_NL(FIELD, VAL, ...) \ - printf("%s " FIELD ":\n %s " VAL "\n", INDENT_spacing->buf, \ - INDENT_spacing->buf, __VA_ARGS__); + printf("%s " COL_BWHI FIELD ":" COL_RESET "\n %s " COL_WHI VAL COL_RESET \ + "\n", \ + INDENT_spacing->buf, INDENT_spacing->buf, __VA_ARGS__); // Print & indent a thing without any newline. -#define INDENT_FIELD_NONL(FIELD) printf("%s " FIELD ": ", INDENT_spacing->buf); +#define INDENT_FIELD_NONL_START(FIELD) \ + printf("%s " COL_BWHI FIELD ": " COL_RESET COL_WHI, INDENT_spacing->buf); +#define INDENT_FIELD_NONL_END printf( "\n" COL_RESET); // Print an array A of N things, by calling the function F. #define INDENT_FIELD_LIST(FIELD, A, N, F) \ - printf("%s " FIELD ": [\n", INDENT_spacing->buf); \ + printf("%s " COL_BWHI FIELD ": [\n" COL_RESET, INDENT_spacing->buf); \ for (int INDENT_i = 0; INDENT_i < N; INDENT_i++) { \ F(A[INDENT_i], INDENT_lvl + 2); \ - /*printf("%s \n", INDENT_spacing->buf); */ \ } \ - printf("%s ]\n", INDENT_spacing->buf); + printf(COL_BWHI "%s ]\n" COL_RESET, INDENT_spacing->buf); // End an indent block. #define INDENT_END dstr_destroy(INDENT_spacing); diff --git a/src/lexer.c b/src/lexer.c index 93eb648..52f7add 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -7,7 +7,6 @@ #include "include/dstr.h" #include "include/token.h" #include "include/util.h" - Lexer* lexer_init(char* src) { Lexer* lexer = malloc(sizeof(Lexer)); @@ -121,8 +120,9 @@ void lexer_print(Lexer* lexer) { lexer_print_i(lexer, 0); } void lexer_print_i(Lexer* lexer, int ilvl) { INDENT_BEGIN(ilvl); INDENT_TITLE("Lexer", lexer); - INDENT_FIELD_NONL("state"); - lexerstate_print_raw(lexer->state); putchar('\n'); + INDENT_FIELD_NONL_START("state") + lexerstate_print_raw(lexer->state); + INDENT_FIELD_NONL_END INDENT_FIELD("srcln", "%ld", lexer->srcln); INDENT_FIELD_NL("src", "\"%s\"", lexer->src); INDENT_FIELD("cchar", "'%c'", *lexer->cchar); @@ -139,7 +139,8 @@ void lexer_print_i(Lexer* lexer, int ilvl) { } void lexerstate_print_raw(LexerState s) { - if (s > LEXER_STATE_MAX) - printf("Unknown (%d)", s) && log_dbgf("%d is not a valid LexerState (max: %d)", s, TOKEN_TYPE_MAX) - else printf("%s", lexerstate_names[s]); + if (s > LEXER_STATE_MAX) { + printf("Unknown (%d)", s); + log_dbgf("%d is not a valid LexerState (max: %d)", s, TOKEN_TYPE_MAX); + } else printf("%s", lexerstate_names[s]); } diff --git a/src/token.c b/src/token.c index 553435b..0b1e413 100644 --- a/src/token.c +++ b/src/token.c @@ -30,9 +30,9 @@ void token_print_i(Token *token, int ilvl) { INDENT_BEGIN(ilvl); INDENT_TITLE("Token", token); - INDENT_FIELD_NONL("type"); - tokentype_print_raw(token->type); - putchar('\n'); + INDENT_FIELD_NONL_START("type") + tokentype_print_raw(token->type); + INDENT_FIELD_NONL_END INDENT_FIELD("valn", "%ld", token->valn); INDENT_FIELD_NL("val", "\"%s\"", token->val); }