Minor highlighting tweaks to make highlighter handle switches to 'command' and 'builtin' builtins more correctly

darcs-hash:20061214134025-ac50b-e17f79d1d4d7594ab20a358296f84dbb6356f42b.gz
This commit is contained in:
axel 2006-12-14 23:40:25 +10:00
parent 4d368dc06c
commit c1945f8275
3 changed files with 32 additions and 18 deletions

View file

@ -644,6 +644,9 @@ void highlight_shell( wchar_t * buff,
if( parser_is_subcommand( cmd ) ) if( parser_is_subcommand( cmd ) )
{ {
int sw;
if( wcscmp( cmd, L"builtin" )==0) if( wcscmp( cmd, L"builtin" )==0)
{ {
use_function = 0; use_function = 0;
@ -658,20 +661,26 @@ void highlight_shell( wchar_t * buff,
} }
tok_next( &tok ); tok_next( &tok );
sw = parser_is_switch( tok_last( &tok ) );
if( !parser_is_block( cmd ) && if( !parser_is_block( cmd ) &&
parser_is_help( tok_last( &tok ), 3) ) sw == ARG_SWITCH )
{ {
/* /*
The 'builtin' and 'command' builtins The 'builtin' and 'command' builtins
are normally followed by another are normally followed by another
command, but if they are invoked command, but if they are invoked
with the -h option, their help text with a switch, they aren't.
is displayed instead
*/ */
use_command = 1;
use_function = 1;
use_builtin = 2;
} }
else else
{ {
if( wcscmp( tok_last( &tok ), L"--" ) == 0 ) if( sw == ARG_SKIP )
{ {
color[ tok_get_pos( &tok ) ] = HIGHLIGHT_PARAM; color[ tok_get_pos( &tok ) ] = HIGHLIGHT_PARAM;
mark = tok_get_pos( &tok ); mark = tok_get_pos( &tok );

View file

@ -510,20 +510,7 @@ static int parser_skip_arguments( const wchar_t *cmd )
(void *)0 ); (void *)0 );
} }
enum int parser_is_switch( const wchar_t *cmd )
{
ARG_NON_SWITCH,
ARG_SWITCH,
ARG_SKIP
}
;
/**
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 '--'
*/
static int parser_is_switch( const wchar_t *cmd )
{ {
if( wcscmp( cmd, L"--" ) == 0 ) if( wcscmp( cmd, L"--" ) == 0 )
return ARG_SKIP; return ARG_SKIP;

View file

@ -15,6 +15,17 @@
#define PARSER_TEST_ERROR 1 #define PARSER_TEST_ERROR 1
#define PARSER_TEST_INCOMPLETE 2 #define PARSER_TEST_INCOMPLETE 2
/**
REturn valuse for parser_is_switch()
*/
enum
{
ARG_NON_SWITCH,
ARG_SWITCH,
ARG_SKIP
}
;
/** /**
event_block_t represents a block on events of the specified type event_block_t represents a block on events of the specified type
*/ */
@ -220,6 +231,13 @@ int eval_args( const wchar_t *line,
void error( int ec, int p, const wchar_t *str, ... ); void error( int ec, int p, const wchar_t *str, ... );
/**
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 '--'
*/
int parser_is_switch( const wchar_t *cmd );
/** /**
Tests if the specified commands parameters should be interpreted as another command, which will be true if the command is either 'command', 'exec', 'if', 'while' or 'builtin'. Tests if the specified commands parameters should be interpreted as another command, which will be true if the command is either 'command', 'exec', 'if', 'while' or 'builtin'.