Further attempts to remove wchar_t conversion warnings

This commit is contained in:
Graham Nelson 2020-07-05 21:22:57 +01:00
parent 8d01f1c01c
commit 50c7a75c3c
8 changed files with 98 additions and 64 deletions

View file

@ -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;

View file

@ -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) {

View file

@ -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) {

View file

@ -259,28 +259,45 @@ find this).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">Win32_ConsModeChanged</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">DWORD</span><span class="plain-syntax"> </span><span class="identifier-syntax">Win32_ConsMode</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">define</span><span class="plain-syntax"> </span><span class="identifier-syntax">WIN32CONS_RESET_MODE</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">define</span><span class="plain-syntax"> </span><span class="identifier-syntax">WIN32CONS_RESET_OUTCP</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::Win32_ResetConsoleMode</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Win32_ConsModeChanged</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">Win32_ResetConsole</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">DWORD</span><span class="plain-syntax"> </span><span class="identifier-syntax">Win32_ConsoleMode</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">UINT</span><span class="plain-syntax"> </span><span class="identifier-syntax">Win32_ConsoleOutCP</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::Win32_ResetConsole</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Win32_ResetConsole</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">WIN32CONS_RESET_MODE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HANDLE</span><span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GetStdHandle</span><span class="plain-syntax">(</span><span class="identifier-syntax">STD_ERROR_HANDLE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cons</span><span class="plain-syntax">) </span><span class="identifier-syntax">SetConsoleMode</span><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, </span><span class="identifier-syntax">Win32_ConsMode</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cons</span><span class="plain-syntax">) </span><span class="identifier-syntax">SetConsoleMode</span><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, </span><span class="identifier-syntax">Win32_ConsoleMode</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Win32_ResetConsole</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">WIN32CONS_RESET_OUTCP</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">SetConsoleOutputCP</span><span class="plain-syntax">(</span><span class="identifier-syntax">Win32_ConsoleOutCP</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Platform::configure_terminal</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Platform::configure_terminal</span></span>:<br/>Foundation Module - <a href="1-fm.html#SP8">&#167;8</a><br/>POSIX Platforms - <a href="1-pp.html#SP19">&#167;19</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">HANDLE</span><span class="plain-syntax"> </span><span class="identifier-syntax">cons</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GetStdHandle</span><span class="plain-syntax">(</span><span class="identifier-syntax">STD_ERROR_HANDLE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cons</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">GetConsoleMode</span><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">Win32_ConsMode</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Win32_ConsMode</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">ENABLE_VIRTUAL_TERMINAL_PROCESSING</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">SetConsoleMode</span><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, </span><span class="identifier-syntax">Win32_ConsMode</span><span class="plain-syntax"> | </span><span class="identifier-syntax">ENABLE_VIRTUAL_TERMINAL_PROCESSING</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Win32_ConsModeChanged</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">atexit</span><span class="plain-syntax">(</span><a href="1-wp.html#SP12" class="function-link"><span class="function-syntax">Platform::Win32_ResetConsoleMode</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">GetConsoleMode</span><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">Win32_ConsoleMode</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Win32_ConsoleMode</span><span class="plain-syntax"> &amp; </span><span class="identifier-syntax">ENABLE_VIRTUAL_TERMINAL_PROCESSING</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">SetConsoleMode</span><span class="plain-syntax">(</span><span class="identifier-syntax">cons</span><span class="plain-syntax">, </span><span class="identifier-syntax">Win32_ConsoleMode</span><span class="plain-syntax"> | </span><span class="identifier-syntax">ENABLE_VIRTUAL_TERMINAL_PROCESSING</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Win32_ResetConsole</span><span class="plain-syntax"> |= </span><span class="identifier-syntax">WIN32CONS_RESET_MODE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Win32_ConsoleOutCP</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GetConsoleOutputCP</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">UINT</span><span class="plain-syntax"> </span><span class="identifier-syntax">newCP</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">loc</span><span class="plain-syntax"> = </span><a href="2-lcl.html#SP2" class="function-link"><span class="function-syntax">Locales::get</span></a><span class="plain-syntax">(</span><span class="constant-syntax">CONSOLE_LOCALE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">loc</span><span class="plain-syntax"> == </span><span class="constant-syntax">FILE_ENCODING_ISO_STRF</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">newCP</span><span class="plain-syntax"> = </span><span class="constant-syntax">28591</span><span class="plain-syntax">; </span><span class="comment-syntax"> ISO 8859-1 Latin</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">loc</span><span class="plain-syntax"> == </span><span class="constant-syntax">FILE_ENCODING_UTF8_STRF</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">newCP</span><span class="plain-syntax"> = </span><span class="constant-syntax">65001</span><span class="plain-syntax">; </span><span class="comment-syntax"> UTF-8</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">newCP</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; </span><span class="identifier-syntax">SetConsoleOutputCP</span><span class="plain-syntax">(</span><span class="identifier-syntax">newCP</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Win32_ResetConsole</span><span class="plain-syntax"> |= </span><span class="identifier-syntax">WIN32CONS_RESET_OUTCP</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Win32_ResetConsole</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">atexit</span><span class="plain-syntax">(</span><a href="1-wp.html#SP12" class="function-link"><span class="function-syntax">Platform::Win32_ResetConsole</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>This paragraph is used only if PLATFORM_WINDOWS is defined.</li></ul>

View file

@ -81,7 +81,7 @@ operating system".
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">locales_unset</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">locale_settings</span><span class="plain-syntax">[</span><span class="identifier-syntax">NO_DEFINED_LOCALE_VALUES</span><span class="plain-syntax">];</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Locales::get</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Locales::get</span></span>:<br/><a href="2-lcl.html#SP4">&#167;4</a><br/>Streams - <a href="2-str.html#SP22">&#167;22</a>, <a href="2-str.html#SP23">&#167;23</a>, <a href="2-str.html#SP32">&#167;32</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Locales::get</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Locales::get</span></span>:<br/><a href="2-lcl.html#SP4">&#167;4</a><br/>Windows Platform - <a href="1-wp.html#SP12">&#167;12</a><br/>Streams - <a href="2-str.html#SP22">&#167;22</a>, <a href="2-str.html#SP23">&#167;23</a>, <a href="2-str.html#SP32">&#167;32</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">L</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">L</span><span class="plain-syntax"> &gt;= </span><span class="identifier-syntax">NO_DEFINED_LOCALE_VALUES</span><span class="plain-syntax">)) </span><a href="3-em.html#SP2" class="function-link"><span class="function-syntax">Errors::fatal</span></a><span class="plain-syntax">(</span><span class="string-syntax">"locale out of range"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">locales_unset</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-lcl.html#SP5" class="function-link"><span class="function-syntax">Locales::platform_locale</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">locale_settings</span><span class="plain-syntax">[</span><span class="identifier-syntax">L</span><span class="plain-syntax">] &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">locale_settings</span><span class="plain-syntax">[</span><span class="identifier-syntax">L</span><span class="plain-syntax">];</span>

Binary file not shown.

View file

@ -430,9 +430,9 @@ runs of a given colour, or give an if-X-then-Y rule:
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_block</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">execute_block</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"runs of (%c+) {"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">colouring_rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rule</span><span class="plain-syntax"> = </span><a href="4-pl.html#SP12" class="function-link"><span class="function-syntax">Languages::new_rule</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_block</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><span class="constant-syntax">UNQUOTED_COLOUR</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><span class="constant-syntax">UNQUOTED_COLOUR</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::ne</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="element-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">I</span><span class="string-syntax">"unquoted"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="4-pl.html#SP15" class="function-link"><span class="function-syntax">Languages::colour</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="element-syntax">exp</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">execute_block</span><span class="plain-syntax"> = </span><a href="4-pl.html#SP10" class="function-link"><span class="function-syntax">Languages::new_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_block</span><span class="plain-syntax">, </span><span class="identifier-syntax">r</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">execute_block</span><span class="plain-syntax"> = </span><a href="4-pl.html#SP10" class="function-link"><span class="function-syntax">Languages::new_block</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_block</span><span class="plain-syntax">, (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">r</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_block</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">execute_block</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"instances of (%c+) {"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">colouring_rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rule</span><span class="plain-syntax"> = </span><a href="4-pl.html#SP12" class="function-link"><span class="function-syntax">Languages::new_rule</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">state</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_block</span><span class="plain-syntax">);</span>
@ -533,8 +533,8 @@ little context before it (where available).
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">colouring_rule</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> the premiss:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sense</span><span class="plain-syntax">; </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">FALSE</span></span><span class="comment-syntax"> to negate the condition</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">match_colour</span><span class="plain-syntax">; </span><span class="comment-syntax"> for </span><span class="extract"><span class="extract-syntax">coloured C</span></span><span class="comment-syntax">, or else </span><span class="extract"><span class="extract-syntax">NOT_A_COLOUR</span></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">match_keyword_of_colour</span><span class="plain-syntax">; </span><span class="comment-syntax"> for </span><span class="extract"><span class="extract-syntax">keyword C</span></span><span class="comment-syntax">, or else </span><span class="extract"><span class="extract-syntax">NOT_A_COLOUR</span></span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">match_colour</span><span class="plain-syntax">; </span><span class="comment-syntax"> for </span><span class="extract"><span class="extract-syntax">coloured C</span></span><span class="comment-syntax">, or else </span><span class="extract"><span class="extract-syntax">NOT_A_COLOUR</span></span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">match_keyword_of_colour</span><span class="plain-syntax">; </span><span class="comment-syntax"> for </span><span class="extract"><span class="extract-syntax">keyword C</span></span><span class="comment-syntax">, or else </span><span class="extract"><span class="extract-syntax">NOT_A_COLOUR</span></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">match_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> or length 0 to mean "anything"</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">match_prefix</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of the </span><span class="extract"><span class="extract-syntax">*_RULE_PREFIX</span></span><span class="comment-syntax"> values above</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">match_regexp_text</span><span class="plain-syntax">[</span><span class="constant-syntax">MAX_ILDF_REGEXP_LENGTH</span><span class="plain-syntax">];</span>
@ -671,7 +671,7 @@ little context before it (where available).
<span class="plain-syntax"> </span><span class="constant-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">reserved_word</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">reserved_word</span><span class="plain-syntax"> *</span><span class="function-syntax">Languages::reserved</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Languages::reserved</span></span>:<br/><a href="4-pl.html#SP8_1">&#167;8.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">reserved_word</span><span class="plain-syntax"> *</span><span class="function-syntax">Languages::reserved</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Languages::reserved</span></span>:<br/><a href="4-pl.html#SP8_1">&#167;8.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">programming_language</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">C</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">reserved_word</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rw</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">rw</span><span class="plain-syntax">, </span><span class="reserved-syntax">reserved_word</span><span class="plain-syntax">, </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reserved_words</span><span class="plain-syntax">)</span>
@ -680,9 +680,9 @@ little context before it (where available).
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">rw</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">reserved_word</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">rw</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP3" class="function-link"><span class="function-syntax">Str::duplicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">rw</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colour</span><span class="plain-syntax"> = </span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">rw</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">colour</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">C</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">rw</span><span class="plain-syntax">, </span><span class="reserved-syntax">reserved_word</span><span class="plain-syntax">, </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reserved_words</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ta.html#SP10" class="function-link"><span class="function-syntax">Analyser::mark_reserved_word</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">built_in_keywords</span><span class="plain-syntax">), </span><span class="identifier-syntax">rw</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ta.html#SP10" class="function-link"><span class="function-syntax">Analyser::mark_reserved_word</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">built_in_keywords</span><span class="plain-syntax">), </span><span class="identifier-syntax">rw</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">word</span><span class="plain-syntax">, (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">rw</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
@ -708,7 +708,7 @@ but which are not expressible in the syntax of this file.
<span class="definition-keyword">define</span> <span class="constant-syntax">UNQUOTED_COLOUR</span><span class="plain-syntax"> </span><span class="character-syntax">'_'</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Languages::colour</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Languages::colour</span></span>:<br/><a href="4-pl.html#SP8_1">&#167;8.1</a>, <a href="4-pl.html#SP8_2">&#167;8.2</a>, <a href="4-pl.html#SP13_1">&#167;13.1</a>, <a href="4-pl.html#SP13_2">&#167;13.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Languages::colour</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Languages::colour</span></span>:<br/><a href="4-pl.html#SP8_1">&#167;8.1</a>, <a href="4-pl.html#SP8_2">&#167;8.2</a>, <a href="4-pl.html#SP13_1">&#167;13.1</a>, <a href="4-pl.html#SP13_2">&#167;13.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_first_char</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">) != </span><span class="character-syntax">'!'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-em.html#SP5" class="function-link"><span class="function-syntax">Errors::in_text_file</span></a><span class="plain-syntax">(</span><span class="string-syntax">"colour names must begin with !"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">PLAIN_COLOUR</span><span class="plain-syntax">;</span>

View file

@ -422,7 +422,7 @@ rule across the whole snippet before moving on to the next.
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">match_keyword_of_colour</span><span class="plain-syntax"> != </span><span class="constant-syntax">NOT_A_COLOUR</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP26" class="function-link"><span class="function-syntax">Str::substr</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><a href="../foundation-module/4-sm.html#SP10" class="function-link"><span class="function-syntax">Str::at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">), </span><a href="../foundation-module/4-sm.html#SP10" class="function-link"><span class="function-syntax">Str::at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">+1));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rw</span><span class="plain-syntax"> = </span><a href="3-ta.html#SP10" class="function-link"><span class="function-syntax">Analyser::is_reserved_word</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">HT</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">match_keyword_of_colour</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rw</span><span class="plain-syntax"> = </span><a href="3-ta.html#SP10" class="function-link"><span class="function-syntax">Analyser::is_reserved_word</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">HT</span><span class="plain-syntax">, </span><span class="identifier-syntax">id</span><span class="plain-syntax">, (</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="identifier-syntax">rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">match_keyword_of_colour</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rw</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rule</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">match_colour</span><span class="plain-syntax"> != </span><span class="constant-syntax">NOT_A_COLOUR</span><span class="plain-syntax">) {</span>