mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-26 12:53:13 +00:00
Migrate functions like parser_keywords_is_block to wcstring
This commit is contained in:
parent
f988dcd6f9
commit
8e4e30d266
6 changed files with 42 additions and 20 deletions
29
common.cpp
29
common.cpp
|
@ -607,16 +607,16 @@ const wchar_t *wsetlocale(int category, const wchar_t *locale)
|
||||||
return (wchar_t *)setlocale_buff->buff;
|
return (wchar_t *)setlocale_buff->buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
int contains_internal( const wchar_t *a, ... )
|
bool contains_internal( const wchar_t *a, ... )
|
||||||
{
|
{
|
||||||
wchar_t *arg;
|
const wchar_t *arg;
|
||||||
va_list va;
|
va_list va;
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
||||||
CHECK( a, 0 );
|
CHECK( a, 0 );
|
||||||
|
|
||||||
va_start( va, a );
|
va_start( va, a );
|
||||||
while( (arg=va_arg(va, wchar_t *) )!= 0 )
|
while( (arg=va_arg(va, const wchar_t *) )!= 0 )
|
||||||
{
|
{
|
||||||
if( wcscmp( a,arg) == 0 )
|
if( wcscmp( a,arg) == 0 )
|
||||||
{
|
{
|
||||||
|
@ -626,7 +626,28 @@ int contains_internal( const wchar_t *a, ... )
|
||||||
|
|
||||||
}
|
}
|
||||||
va_end( va );
|
va_end( va );
|
||||||
return res;
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* wcstring variant of contains_internal. The first parameter is a wcstring, the rest are const wchar_t* */
|
||||||
|
__sentinel bool contains_internal( const wcstring &needle, ... )
|
||||||
|
{
|
||||||
|
const wchar_t *arg;
|
||||||
|
va_list va;
|
||||||
|
int res = 0;
|
||||||
|
|
||||||
|
va_start( va, needle );
|
||||||
|
while( (arg=va_arg(va, const wchar_t *) )!= 0 )
|
||||||
|
{
|
||||||
|
if( needle == arg)
|
||||||
|
{
|
||||||
|
res=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
va_end( va );
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_blocked(int fd, void *buf, size_t count)
|
int read_blocked(int fd, void *buf, size_t count)
|
||||||
|
|
3
common.h
3
common.h
|
@ -440,7 +440,8 @@ const wchar_t *wsetlocale( int category, const wchar_t *locale );
|
||||||
|
|
||||||
\return zero if needle is not found, of if needle is null, non-zero otherwise
|
\return zero if needle is not found, of if needle is null, non-zero otherwise
|
||||||
*/
|
*/
|
||||||
__sentinel int contains_internal( const wchar_t *needle, ... );
|
__sentinel bool contains_internal( const wchar_t *needle, ... );
|
||||||
|
__sentinel bool contains_internal( const wcstring &needle, ... );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Call read while blocking the SIGCHLD signal. Should only be called
|
Call read while blocking the SIGCHLD signal. Should only be called
|
||||||
|
|
|
@ -646,7 +646,7 @@ void tokenize( const wchar_t * const buff, int * const color, const int pos, arr
|
||||||
int mark = tok_get_pos( &tok );
|
int mark = tok_get_pos( &tok );
|
||||||
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_COMMAND;
|
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_COMMAND;
|
||||||
|
|
||||||
if( parser_keywords_is_subcommand( cmd.c_str() ) )
|
if( parser_keywords_is_subcommand( cmd ) )
|
||||||
{
|
{
|
||||||
|
|
||||||
int sw;
|
int sw;
|
||||||
|
@ -668,7 +668,7 @@ void tokenize( const wchar_t * const buff, int * const color, const int pos, arr
|
||||||
|
|
||||||
sw = parser_keywords_is_switch( tok_last( &tok ) );
|
sw = parser_keywords_is_switch( tok_last( &tok ) );
|
||||||
|
|
||||||
if( !parser_keywords_is_block( cmd.c_str() ) &&
|
if( !parser_keywords_is_block( cmd ) &&
|
||||||
sw == ARG_SWITCH )
|
sw == ARG_SWITCH )
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1887,7 +1887,7 @@ int parser_t::parse_job( process_t *p,
|
||||||
builtin_exists(args->at(0).completion.c_str()))
|
builtin_exists(args->at(0).completion.c_str()))
|
||||||
{
|
{
|
||||||
p->type = INTERNAL_BUILTIN;
|
p->type = INTERNAL_BUILTIN;
|
||||||
is_new_block |= parser_keywords_is_block( args->at( 0 ).completion.c_str() );
|
is_new_block |= parser_keywords_is_block( args->at( 0 ).completion );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,15 +14,15 @@ Functions having to do with parser keywords, like testing if a function is a blo
|
||||||
#include "parser_keywords.h"
|
#include "parser_keywords.h"
|
||||||
|
|
||||||
|
|
||||||
int parser_keywords_is_switch( const wchar_t *cmd )
|
bool parser_keywords_is_switch( const wcstring &cmd )
|
||||||
{
|
{
|
||||||
if( wcscmp( cmd, L"--" ) == 0 )
|
if( cmd == L"--" )
|
||||||
return ARG_SKIP;
|
return ARG_SKIP;
|
||||||
else
|
else
|
||||||
return cmd[0] == L'-';
|
return ! cmd.empty() && cmd.at(0) == L'-';
|
||||||
}
|
}
|
||||||
|
|
||||||
int parser_keywords_skip_arguments( const wchar_t *cmd )
|
bool parser_keywords_skip_arguments( const wcstring &cmd )
|
||||||
{
|
{
|
||||||
return contains( cmd,
|
return contains( cmd,
|
||||||
L"else",
|
L"else",
|
||||||
|
@ -30,7 +30,7 @@ int parser_keywords_skip_arguments( const wchar_t *cmd )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int parser_keywords_is_subcommand( const wchar_t *cmd )
|
bool parser_keywords_is_subcommand( const wcstring &cmd )
|
||||||
{
|
{
|
||||||
|
|
||||||
return parser_keywords_skip_arguments( cmd ) ||
|
return parser_keywords_skip_arguments( cmd ) ||
|
||||||
|
@ -46,7 +46,7 @@ int parser_keywords_is_subcommand( const wchar_t *cmd )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int parser_keywords_is_block( const wchar_t *word)
|
bool parser_keywords_is_block( const wcstring &word)
|
||||||
{
|
{
|
||||||
return contains( word,
|
return contains( word,
|
||||||
L"for",
|
L"for",
|
||||||
|
@ -57,7 +57,7 @@ int parser_keywords_is_block( const wchar_t *word)
|
||||||
L"begin" );
|
L"begin" );
|
||||||
}
|
}
|
||||||
|
|
||||||
int parser_keywords_is_reserved( const wchar_t *word)
|
bool parser_keywords_is_reserved( const wcstring &word)
|
||||||
{
|
{
|
||||||
return parser_keywords_is_block(word) ||
|
return parser_keywords_is_block(word) ||
|
||||||
parser_keywords_is_subcommand( word ) ||
|
parser_keywords_is_subcommand( word ) ||
|
||||||
|
|
|
@ -23,7 +23,7 @@ enum
|
||||||
Check if the specified argument is a switch. Return ARG_SWITCH if yes,
|
Check if the specified argument is a switch. Return ARG_SWITCH if yes,
|
||||||
ARG_NON_SWITCH if no and ARG_SKIP if the argument is '--'
|
ARG_NON_SWITCH if no and ARG_SKIP if the argument is '--'
|
||||||
*/
|
*/
|
||||||
int parser_keywords_is_switch( const wchar_t *cmd );
|
bool parser_keywords_is_switch( const wcstring &cmd );
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,7 +33,7 @@ int parser_keywords_is_switch( const wchar_t *cmd );
|
||||||
\return 1 of the command parameter is a command, 0 otherwise
|
\return 1 of the command parameter is a command, 0 otherwise
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int parser_keywords_is_subcommand( const wchar_t *cmd );
|
bool parser_keywords_is_subcommand( const wcstring &cmd );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Tests if the specified command is a reserved word, i.e. if it is
|
Tests if the specified command is a reserved word, i.e. if it is
|
||||||
|
@ -44,20 +44,20 @@ int parser_keywords_is_subcommand( const wchar_t *cmd );
|
||||||
\param word The command name to test
|
\param word The command name to test
|
||||||
\return 1 of the command parameter is a command, 0 otherwise
|
\return 1 of the command parameter is a command, 0 otherwise
|
||||||
*/
|
*/
|
||||||
int parser_keywords_is_reserved( const wchar_t *word );
|
bool parser_keywords_is_reserved( const wcstring &word );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Test if the specified string is command that opens a new block
|
Test if the specified string is command that opens a new block
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int parser_keywords_is_block( const wchar_t *word);
|
bool parser_keywords_is_block( const wcstring &word);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check if the specified command is one of the builtins that cannot
|
Check if the specified command is one of the builtins that cannot
|
||||||
have arguments, any followin argument is interpreted as a new
|
have arguments, any followin argument is interpreted as a new
|
||||||
command
|
command
|
||||||
*/
|
*/
|
||||||
int parser_keywords_skip_arguments( const wchar_t *cmd );
|
bool parser_keywords_skip_arguments( const wcstring &cmd );
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue