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;
+ else if (loc == FILE_ENCODING_UTF8_STRF)
+ newCP = 65001;
+ if ((newCP != 0) && SetConsoleOutputCP(newCP))
+ Win32_ResetConsole |= WIN32CONS_RESET_OUTCP;
+
+ if (Win32_ResetConsole != 0) atexit(Platform::Win32_ResetConsole);
}
- This paragraph is used only if PLATFORM_WINDOWS is defined.
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 {
int sense;
- int match_colour;
- int match_keyword_of_colour;
+ wchar_t match_colour;
+ wchar_t match_keyword_of_colour;
struct text_stream *match_text;
int match_prefix;
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) {