From 50c7a75c3c337271b63c766e8f2c11a7bf295820 Mon Sep 17 00:00:00 2001 From: Graham Nelson Date: Sun, 5 Jul 2020 21:22:57 +0100 Subject: [PATCH] Further attempts to remove wchar_t conversion warnings --- Chapter 4/Programming Languages.w | 16 +++--- Chapter 4/The Painter.w | 2 +- Tangled/inweb.c | 87 ++++++++++++++++++------------ docs/foundation-module/1-wp.html | 37 +++++++++---- docs/foundation-module/2-lcl.html | 2 +- docs/goldbach/goldbach.pdf | Bin 251998 -> 251998 bytes docs/inweb/4-pl.html | 16 +++--- docs/inweb/4-tp.html | 2 +- 8 files changed, 98 insertions(+), 64 deletions(-) diff --git a/Chapter 4/Programming Languages.w b/Chapter 4/Programming Languages.w index 373f086..acfb73e 100644 --- a/Chapter 4/Programming Languages.w +++ b/Chapter 4/Programming Languages.w @@ -339,9 +339,9 @@ runs of a given colour, or give an if-X-then-Y rule: state->current_block = rule->execute_block; } else if (Regexp::match(&mr, line, L"runs of (%c+) {")) { colouring_rule *rule = Languages::new_rule(state->current_block); - int r = UNQUOTED_COLOUR; + wchar_t r = UNQUOTED_COLOUR; if (Str::ne(mr.exp[0], I"unquoted")) r = Languages::colour(mr.exp[0], tfp); - rule->execute_block = Languages::new_block(state->current_block, r); + rule->execute_block = Languages::new_block(state->current_block, (int) r); state->current_block = rule->execute_block; } else if (Regexp::match(&mr, line, L"instances of (%c+) {")) { colouring_rule *rule = Languages::new_rule(state->current_block); @@ -438,8 +438,8 @@ Note that rules can be unconditional, in that the premiss always passes. typedef struct colouring_rule { /* the premiss: */ int sense; /* |FALSE| to negate the condition */ - int match_colour; /* for |coloured C|, or else |NOT_A_COLOUR| */ - int match_keyword_of_colour; /* for |keyword C|, or else |NOT_A_COLOUR| */ + wchar_t match_colour; /* for |coloured C|, or else |NOT_A_COLOUR| */ + wchar_t match_keyword_of_colour; /* for |keyword C|, or else |NOT_A_COLOUR| */ struct text_stream *match_text; /* or length 0 to mean "anything" */ int match_prefix; /* one of the |*_RULE_PREFIX| values above */ wchar_t match_regexp_text[MAX_ILDF_REGEXP_LENGTH]; @@ -563,7 +563,7 @@ typedef struct reserved_word { CLASS_DEFINITION } reserved_word; -reserved_word *Languages::reserved(programming_language *pl, text_stream *W, int C, +reserved_word *Languages::reserved(programming_language *pl, text_stream *W, wchar_t C, text_file_position *tfp) { reserved_word *rw; LOOP_OVER_LINKED_LIST(rw, reserved_word, pl->reserved_words) @@ -572,9 +572,9 @@ reserved_word *Languages::reserved(programming_language *pl, text_stream *W, int } rw = CREATE(reserved_word); rw->word = Str::duplicate(W); - rw->colour = C; + rw->colour = (int) C; ADD_TO_LINKED_LIST(rw, reserved_word, pl->reserved_words); - Analyser::mark_reserved_word(&(pl->built_in_keywords), rw->word, C); + Analyser::mark_reserved_word(&(pl->built_in_keywords), rw->word, (int) C); return rw; } @@ -600,7 +600,7 @@ but which are not expressible in the syntax of this file. @d UNQUOTED_COLOUR '_' = -int Languages::colour(text_stream *T, text_file_position *tfp) { +wchar_t Languages::colour(text_stream *T, text_file_position *tfp) { if (Str::get_first_char(T) != '!') { Errors::in_text_file("colour names must begin with !", tfp); return PLAIN_COLOUR; diff --git a/Chapter 4/The Painter.w b/Chapter 4/The Painter.w index 420d46e..3560c76 100644 --- a/Chapter 4/The Painter.w +++ b/Chapter 4/The Painter.w @@ -348,7 +348,7 @@ int Painter::satisfies(hash_table *HT, colouring_rule *rule, text_stream *matter } else if (rule->match_keyword_of_colour != NOT_A_COLOUR) { TEMPORARY_TEXT(id) Str::substr(id, Str::at(matter, from), Str::at(matter, to+1)); - int rw = Analyser::is_reserved_word(HT, id, rule->match_keyword_of_colour); + int rw = Analyser::is_reserved_word(HT, id, (int) rule->match_keyword_of_colour); DISCARD_TEXT(id) if (rw == FALSE) return FALSE; } else if (rule->match_colour != NOT_A_COLOUR) { diff --git a/Tangled/inweb.c b/Tangled/inweb.c index 48e10d0..19c7d6e 100644 --- a/Tangled/inweb.c +++ b/Tangled/inweb.c @@ -181,7 +181,7 @@ int Platform__system(const char *cmd) { #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 222 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 239 "inweb/foundation-module/Chapter 1/Windows Platform.w" typedef HANDLE foundation_thread; typedef int foundation_thread_attributes; @@ -189,7 +189,7 @@ struct Win32_Thread_Start { void *(*fn)(void *); void* arg; }; #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 304 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 321 "inweb/foundation-module/Chapter 1/Windows Platform.w" struct Win32_Mutex { INIT_ONCE init; CRITICAL_SECTION crit; }; #endif /* PLATFORM_WINDOWS */ @@ -1865,8 +1865,8 @@ typedef struct colouring_language_block { typedef struct colouring_rule { /* the premiss: */ int sense; /* |FALSE| to negate the condition */ - int match_colour; /* for |coloured C|, or else |NOT_A_COLOUR| */ - int match_keyword_of_colour; /* for |keyword C|, or else |NOT_A_COLOUR| */ + wchar_t match_colour; /* for |coloured C|, or else |NOT_A_COLOUR| */ + wchar_t match_keyword_of_colour; /* for |keyword C|, or else |NOT_A_COLOUR| */ struct text_stream *match_text; /* or length 0 to mean "anything" */ int match_prefix; /* one of the |*_RULE_PREFIX| values above */ wchar_t match_regexp_text[MAX_ILDF_REGEXP_LENGTH]; @@ -2475,39 +2475,39 @@ void Platform__sleep(int seconds) ; void Platform__notification(text_stream *text, int happy) ; #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 198 "inweb/foundation-module/Chapter 1/Windows Platform.w" -void Platform__Win32_ResetConsoleMode(void) ; +#line 202 "inweb/foundation-module/Chapter 1/Windows Platform.w" +void Platform__Win32_ResetConsole(void) ; #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 205 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 211 "inweb/foundation-module/Chapter 1/Windows Platform.w" void Platform__configure_terminal(void) ; #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 236 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 253 "inweb/foundation-module/Chapter 1/Windows Platform.w" int Platform__create_thread(foundation_thread *pt, const foundation_thread_attributes *pa, void *(*fn)(void *), void *arg) ; #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 251 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 268 "inweb/foundation-module/Chapter 1/Windows Platform.w" int Platform__join_thread(foundation_thread pt, void** rv) ; #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 255 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 272 "inweb/foundation-module/Chapter 1/Windows Platform.w" void Platform__init_thread(foundation_thread_attributes* pa, size_t size) ; #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 258 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 275 "inweb/foundation-module/Chapter 1/Windows Platform.w" size_t Platform__get_thread_stack_size(foundation_thread_attributes* pa) ; #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 270 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 287 "inweb/foundation-module/Chapter 1/Windows Platform.w" time_t Platform__never_time(void) ; #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 274 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 291 "inweb/foundation-module/Chapter 1/Windows Platform.w" time_t Platform__timestamp(char *transcoded_filename) ; #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 280 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 297 "inweb/foundation-module/Chapter 1/Windows Platform.w" off_t Platform__size(char *transcoded_filename) ; #endif /* PLATFORM_WINDOWS */ #line 64 "inweb/foundation-module/Chapter 2/Debugging Log.w" @@ -3875,9 +3875,9 @@ colouring_rule * Languages__new_rule(colouring_language_block *within) ; #line 486 "inweb/Chapter 4/Programming Languages.w" void Languages__parse_rule(language_reader_state *state, text_stream *premiss, text_stream *action, text_file_position *tfp) ; #line 566 "inweb/Chapter 4/Programming Languages.w" -reserved_word * Languages__reserved(programming_language *pl, text_stream *W, int C, text_file_position *tfp) ; +reserved_word * Languages__reserved(programming_language *pl, text_stream *W, wchar_t C, text_file_position *tfp) ; #line 603 "inweb/Chapter 4/Programming Languages.w" -int Languages__colour(text_stream *T, text_file_position *tfp) ; +wchar_t Languages__colour(text_stream *T, text_file_position *tfp) ; #line 628 "inweb/Chapter 4/Programming Languages.w" int Languages__boolean(text_stream *T, text_file_position *tfp) ; #line 642 "inweb/Chapter 4/Programming Languages.w" @@ -5451,33 +5451,50 @@ void Platform__notification(text_stream *text, int happy) { #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS #line 195 "inweb/foundation-module/Chapter 1/Windows Platform.w" -int Win32_ConsModeChanged = 0; -DWORD Win32_ConsMode = 0; +#define WIN32CONS_RESET_MODE 1 +#define WIN32CONS_RESET_OUTCP 2 -void Platform__Win32_ResetConsoleMode(void) { - if (Win32_ConsModeChanged) { +int Win32_ResetConsole = 0; +DWORD Win32_ConsoleMode = 0; +UINT Win32_ConsoleOutCP = 0; + +void Platform__Win32_ResetConsole(void) { + if (Win32_ResetConsole & WIN32CONS_RESET_MODE) { HANDLE cons = GetStdHandle(STD_ERROR_HANDLE); - if (cons) SetConsoleMode(cons, Win32_ConsMode); + if (cons) SetConsoleMode(cons, Win32_ConsoleMode); } + if (Win32_ResetConsole & WIN32CONS_RESET_OUTCP) + SetConsoleOutputCP(Win32_ConsoleOutCP); } void Platform__configure_terminal(void) { HANDLE cons = GetStdHandle(STD_ERROR_HANDLE); if (cons) { - if (GetConsoleMode(cons, &Win32_ConsMode)) { - if ((Win32_ConsMode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0) { - if (SetConsoleMode(cons, Win32_ConsMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING)) { - Win32_ConsModeChanged = 1; - atexit(Platform__Win32_ResetConsoleMode); + if (GetConsoleMode(cons, &Win32_ConsoleMode)) { + if ((Win32_ConsoleMode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0) { + if (SetConsoleMode(cons, Win32_ConsoleMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING)) { + Win32_ResetConsole |= WIN32CONS_RESET_MODE; } } } } + + Win32_ConsoleOutCP = GetConsoleOutputCP(); + UINT newCP = 0; + int loc = Locales__get(CONSOLE_LOCALE); + if (loc == FILE_ENCODING_ISO_STRF) + newCP = 28591; /* ISO 8859-1 Latin */ + else if (loc == FILE_ENCODING_UTF8_STRF) + newCP = 65001; /* UTF-8 */ + if ((newCP != 0) && SetConsoleOutputCP(newCP)) + Win32_ResetConsole |= WIN32CONS_RESET_OUTCP; + + if (Win32_ResetConsole != 0) atexit(Platform__Win32_ResetConsole); } #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 229 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 246 "inweb/foundation-module/Chapter 1/Windows Platform.w" DWORD WINAPI Platform__Win32_Thread_Func(LPVOID param) { struct Win32_Thread_Start* start = (struct Win32_Thread_Start*)param; (start->fn)(start->arg); @@ -5513,7 +5530,7 @@ size_t Platform__get_thread_stack_size(foundation_thread_attributes* pa) { #endif /* PLATFORM_WINDOWS */ #ifdef PLATFORM_WINDOWS -#line 270 "inweb/foundation-module/Chapter 1/Windows Platform.w" +#line 287 "inweb/foundation-module/Chapter 1/Windows Platform.w" time_t Platform__never_time(void) { return (time_t) 0; } @@ -21728,9 +21745,9 @@ void Languages__read_definition_line(text_stream *line, text_file_position *tfp, state->current_block = rule->execute_block; } else if (Regexp__match(&mr, line, L"runs of (%c+) {")) { colouring_rule *rule = Languages__new_rule(state->current_block); - int r = UNQUOTED_COLOUR; + wchar_t r = UNQUOTED_COLOUR; if (Str__ne(mr.exp[0], TL_IS_323)) r = Languages__colour(mr.exp[0], tfp); - rule->execute_block = Languages__new_block(state->current_block, r); + rule->execute_block = Languages__new_block(state->current_block, (int) r); state->current_block = rule->execute_block; } else if (Regexp__match(&mr, line, L"instances of (%c+) {")) { colouring_rule *rule = Languages__new_rule(state->current_block); @@ -21980,7 +21997,7 @@ void Languages__parse_rule(language_reader_state *state, text_stream *premiss, #line 565 "inweb/Chapter 4/Programming Languages.w" -reserved_word *Languages__reserved(programming_language *pl, text_stream *W, int C, +reserved_word *Languages__reserved(programming_language *pl, text_stream *W, wchar_t C, text_file_position *tfp) { reserved_word *rw; LOOP_OVER_LINKED_LIST(rw, reserved_word, pl->reserved_words) @@ -21989,14 +22006,14 @@ reserved_word *Languages__reserved(programming_language *pl, text_stream *W, int } rw = CREATE(reserved_word); rw->word = Str__duplicate(W); - rw->colour = C; + rw->colour = (int) C; ADD_TO_LINKED_LIST(rw, reserved_word, pl->reserved_words); - Analyser__mark_reserved_word(&(pl->built_in_keywords), rw->word, C); + Analyser__mark_reserved_word(&(pl->built_in_keywords), rw->word, (int) C); return rw; } #line 603 "inweb/Chapter 4/Programming Languages.w" -int Languages__colour(text_stream *T, text_file_position *tfp) { +wchar_t Languages__colour(text_stream *T, text_file_position *tfp) { if (Str__get_first_char(T) != '!') { Errors__in_text_file("colour names must begin with !", tfp); return PLAIN_COLOUR; @@ -23334,7 +23351,7 @@ int Painter__satisfies(hash_table *HT, colouring_rule *rule, text_stream *matter } else if (rule->match_keyword_of_colour != NOT_A_COLOUR) { TEMPORARY_TEXT(id) Str__substr(id, Str__at(matter, from), Str__at(matter, to+1)); - int rw = Analyser__is_reserved_word(HT, id, rule->match_keyword_of_colour); + int rw = Analyser__is_reserved_word(HT, id, (int) rule->match_keyword_of_colour); DISCARD_TEXT(id) if (rw == FALSE) return FALSE; } else if (rule->match_colour != NOT_A_COLOUR) { diff --git a/docs/foundation-module/1-wp.html b/docs/foundation-module/1-wp.html index d72355d..046a873 100644 --- a/docs/foundation-module/1-wp.html +++ b/docs/foundation-module/1-wp.html @@ -259,28 +259,45 @@ find this).

-int Win32_ConsModeChanged = 0;
-DWORD Win32_ConsMode = 0;
+#define WIN32CONS_RESET_MODE 1
+#define WIN32CONS_RESET_OUTCP 2
 
-void Platform::Win32_ResetConsoleMode(void) {
-    if (Win32_ConsModeChanged) {
+int Win32_ResetConsole = 0;
+DWORD Win32_ConsoleMode = 0;
+UINT Win32_ConsoleOutCP = 0;
+
+void Platform::Win32_ResetConsole(void) {
+    if (Win32_ResetConsole & WIN32CONS_RESET_MODE) {
         HANDLE cons = GetStdHandle(STD_ERROR_HANDLE);
-        if (cons) SetConsoleMode(cons, Win32_ConsMode);
+        if (cons) SetConsoleMode(cons, Win32_ConsoleMode);
     }
+    if (Win32_ResetConsole & WIN32CONS_RESET_OUTCP)
+        SetConsoleOutputCP(Win32_ConsoleOutCP);
 }
 
 void Platform::configure_terminal(void) {
     HANDLE cons = GetStdHandle(STD_ERROR_HANDLE);
     if (cons) {
-        if (GetConsoleMode(cons, &Win32_ConsMode)) {
-            if ((Win32_ConsMode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0) {
-                if (SetConsoleMode(cons, Win32_ConsMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING)) {
-                    Win32_ConsModeChanged = 1;
-                    atexit(Platform::Win32_ResetConsoleMode);
+        if (GetConsoleMode(cons, &Win32_ConsoleMode)) {
+            if ((Win32_ConsoleMode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0) {
+                if (SetConsoleMode(cons, Win32_ConsoleMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING)) {
+                    Win32_ResetConsole |= WIN32CONS_RESET_MODE;
                 }
             }
         }
     }
+
+    Win32_ConsoleOutCP = GetConsoleOutputCP();
+    UINT newCP = 0;
+    int loc = Locales::get(CONSOLE_LOCALE);
+    if (loc == FILE_ENCODING_ISO_STRF)
+        newCP = 28591;  ISO 8859-1 Latin
+    else if (loc == FILE_ENCODING_UTF8_STRF)
+        newCP = 65001;  UTF-8
+    if ((newCP != 0) && SetConsoleOutputCP(newCP))
+        Win32_ResetConsole |= WIN32CONS_RESET_OUTCP;
+
+    if (Win32_ResetConsole != 0) atexit(Platform::Win32_ResetConsole);
 }
 
diff --git a/docs/foundation-module/2-lcl.html b/docs/foundation-module/2-lcl.html index 2bb5c1e..ea208c6 100644 --- a/docs/foundation-module/2-lcl.html +++ b/docs/foundation-module/2-lcl.html @@ -81,7 +81,7 @@ operating system". int locales_unset = TRUE; int locale_settings[NO_DEFINED_LOCALE_VALUES]; -int Locales::get(int L) { +int Locales::get(int L) { if ((L < 0) || (L >= NO_DEFINED_LOCALE_VALUES)) Errors::fatal("locale out of range"); if (locales_unset) return Locales::platform_locale(); if (locale_settings[L] >= 0) return locale_settings[L]; diff --git a/docs/goldbach/goldbach.pdf b/docs/goldbach/goldbach.pdf index b0c877e9cd150dc7a8354d8b345a451b8bb43b3f..b1535c78fd3c7ef781ad1f051b39d364c4cdbbc8 100644 GIT binary patch delta 137 zcmcb&f&bnH{)QID7N#xC0w*<%42_ITjI|96)eQ{PHM#VC^HW?BOHvgyT&#=?j0_CS z4NM_Qwp*TLUdQWfY-Z_Z1u50Z0hD_>1^p@ZffjeZ0Ta+>}qIk>1b#U6gIO{upy*myViAP G6Gi|dnj@nC diff --git a/docs/inweb/4-pl.html b/docs/inweb/4-pl.html index a68c799..dd7be8f 100644 --- a/docs/inweb/4-pl.html +++ b/docs/inweb/4-pl.html @@ -430,9 +430,9 @@ runs of a given colour, or give an if-X-then-Y rule: state->current_block = rule->execute_block; } else if (Regexp::match(&mr, line, L"runs of (%c+) {")) { colouring_rule *rule = Languages::new_rule(state->current_block); - int r = UNQUOTED_COLOUR; + wchar_t r = UNQUOTED_COLOUR; if (Str::ne(mr.exp[0], I"unquoted")) r = Languages::colour(mr.exp[0], tfp); - rule->execute_block = Languages::new_block(state->current_block, r); + rule->execute_block = Languages::new_block(state->current_block, (int) r); state->current_block = rule->execute_block; } else if (Regexp::match(&mr, line, L"instances of (%c+) {")) { colouring_rule *rule = Languages::new_rule(state->current_block); @@ -533,8 +533,8 @@ little context before it (where available). typedef struct colouring_rule { the premiss: int sense; FALSE to negate the condition - int match_colour; for coloured C, or else NOT_A_COLOUR - int match_keyword_of_colour; for keyword C, or else NOT_A_COLOUR + wchar_t match_colour; for coloured C, or else NOT_A_COLOUR + wchar_t match_keyword_of_colour; for keyword C, or else NOT_A_COLOUR struct text_stream *match_text; or length 0 to mean "anything" int match_prefix; one of the *_RULE_PREFIX values above wchar_t match_regexp_text[MAX_ILDF_REGEXP_LENGTH]; @@ -671,7 +671,7 @@ little context before it (where available). CLASS_DEFINITION } reserved_word; -reserved_word *Languages::reserved(programming_language *pl, text_stream *W, int C, +reserved_word *Languages::reserved(programming_language *pl, text_stream *W, wchar_t C, text_file_position *tfp) { reserved_word *rw; LOOP_OVER_LINKED_LIST(rw, reserved_word, pl->reserved_words) @@ -680,9 +680,9 @@ little context before it (where available). } rw = CREATE(reserved_word); rw->word = Str::duplicate(W); - rw->colour = C; + rw->colour = (int) C; ADD_TO_LINKED_LIST(rw, reserved_word, pl->reserved_words); - Analyser::mark_reserved_word(&(pl->built_in_keywords), rw->word, C); + Analyser::mark_reserved_word(&(pl->built_in_keywords), rw->word, (int) C); return rw; } @@ -708,7 +708,7 @@ but which are not expressible in the syntax of this file. define UNQUOTED_COLOUR '_'
-int Languages::colour(text_stream *T, text_file_position *tfp) {
+wchar_t Languages::colour(text_stream *T, text_file_position *tfp) {
     if (Str::get_first_char(T) != '!') {
         Errors::in_text_file("colour names must begin with !", tfp);
         return PLAIN_COLOUR;
diff --git a/docs/inweb/4-tp.html b/docs/inweb/4-tp.html
index a282d6d..c4f30bb 100644
--- a/docs/inweb/4-tp.html
+++ b/docs/inweb/4-tp.html
@@ -422,7 +422,7 @@ rule across the whole snippet before moving on to the next.
     } else if (rule->match_keyword_of_colour != NOT_A_COLOUR) {
         TEMPORARY_TEXT(id)
         Str::substr(id, Str::at(matter, from), Str::at(matter, to+1));
-        int rw = Analyser::is_reserved_word(HT, id, rule->match_keyword_of_colour);
+        int rw = Analyser::is_reserved_word(HT, id, (int) rule->match_keyword_of_colour);
         DISCARD_TEXT(id)
         if (rw == FALSE) return FALSE;
     } else if (rule->match_colour != NOT_A_COLOUR) {