mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-06-04 15:51:15 -03:00
Some changes to migrate towards C++ and a multithreaded model
This commit is contained in:
144
fish_indent.cpp
144
fish_indent.cpp
@@ -64,10 +64,10 @@ static void read_file( FILE *f, string_buffer_t *b )
|
||||
wperror(L"fgetwc");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
sb_append_char( b, c );
|
||||
}
|
||||
}
|
||||
@@ -78,12 +78,12 @@ static void read_file( FILE *f, string_buffer_t *b )
|
||||
static void insert_tabs( string_buffer_t *out, int indent )
|
||||
{
|
||||
int i;
|
||||
|
||||
|
||||
for( i=0; i<indent; i++ )
|
||||
{
|
||||
sb_append( out, L"\t" );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -100,12 +100,12 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
||||
int prev_prev_type = 0;
|
||||
|
||||
tok_init( &tok, in, TOK_SHOW_COMMENTS );
|
||||
|
||||
|
||||
for( ; tok_has_next( &tok ); tok_next( &tok ) )
|
||||
{
|
||||
int type = tok_last_type( &tok );
|
||||
wchar_t *last = tok_last( &tok );
|
||||
|
||||
|
||||
switch( type )
|
||||
{
|
||||
case TOK_STRING:
|
||||
@@ -116,7 +116,7 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
||||
is_command = 0;
|
||||
|
||||
wchar_t *unesc = unescape( last, UNESCAPE_SPECIAL );
|
||||
|
||||
|
||||
if( parser_keywords_is_block( unesc ) )
|
||||
{
|
||||
next_indent++;
|
||||
@@ -135,17 +135,17 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
||||
indent--;
|
||||
next_indent--;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if( do_indent && flags && prev_type != TOK_PIPE )
|
||||
{
|
||||
insert_tabs( out, indent );
|
||||
}
|
||||
|
||||
|
||||
sb_printf( out, L"%ls", last );
|
||||
|
||||
|
||||
indent = next_indent;
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -153,13 +153,13 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
||||
sb_append( out, L" " );
|
||||
sb_append( out, last );
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case TOK_END:
|
||||
{
|
||||
if( prev_type != TOK_END || prev_prev_type != TOK_END )
|
||||
if( prev_type != TOK_END || prev_prev_type != TOK_END )
|
||||
sb_append( out, L"\n" );
|
||||
do_indent = 1;
|
||||
is_command = 1;
|
||||
@@ -174,11 +174,11 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
||||
} else if ( last[0] != '1' || last[1] ) {
|
||||
sb_append( out, last, L">" );
|
||||
}
|
||||
sb_append( out, L"| " );
|
||||
sb_append( out, L" | " );
|
||||
is_command = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case TOK_REDIRECT_OUT:
|
||||
{
|
||||
sb_append( out, L" " );
|
||||
@@ -186,13 +186,13 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
||||
sb_append( out, L"^" );
|
||||
} else {
|
||||
if ( wcscmp( last, L"1" ) != 0 )
|
||||
sb_append( out, last );
|
||||
sb_append( out, L">" );
|
||||
sb_append( out, last );
|
||||
sb_append( out, L"> " );
|
||||
}
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
case TOK_REDIRECT_APPEND:
|
||||
|
||||
case TOK_REDIRECT_APPEND:
|
||||
{
|
||||
sb_append( out, L" " );
|
||||
if ( wcscmp( last, L"2" ) == 0 ) {
|
||||
@@ -200,28 +200,28 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
||||
} else {
|
||||
if ( wcscmp( last, L"1" ) != 0 )
|
||||
sb_append( out, last );
|
||||
sb_append( out, L">>" );
|
||||
sb_append( out, L">> " );
|
||||
}
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
case TOK_REDIRECT_IN:
|
||||
|
||||
case TOK_REDIRECT_IN:
|
||||
{
|
||||
sb_append( out, L" " );
|
||||
if ( wcscmp( last, L"0" ) != 0 )
|
||||
sb_append( out, last );
|
||||
sb_append( out, L"<" );
|
||||
break;
|
||||
sb_append( out, L"< " );
|
||||
break;
|
||||
}
|
||||
|
||||
case TOK_REDIRECT_FD:
|
||||
|
||||
case TOK_REDIRECT_FD:
|
||||
{
|
||||
sb_append( out, L" " );
|
||||
if ( wcscmp( last, L"1" ) != 0 )
|
||||
sb_append( out, last );
|
||||
sb_append( out, L">&" );
|
||||
break;
|
||||
}
|
||||
sb_append( out, L">& " );
|
||||
break;
|
||||
}
|
||||
|
||||
case TOK_BACKGROUND:
|
||||
{
|
||||
@@ -230,31 +230,31 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
||||
is_command = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case TOK_COMMENT:
|
||||
{
|
||||
if( do_indent && flags)
|
||||
{
|
||||
insert_tabs( out, indent );
|
||||
}
|
||||
|
||||
|
||||
sb_printf( out, L"%ls", last );
|
||||
do_indent = 1;
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
{
|
||||
debug( 0, L"Unknown token '%ls'", last );
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
prev_prev_type = prev_type;
|
||||
prev_type = type;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
tok_destroy( &tok );
|
||||
|
||||
return res;
|
||||
@@ -268,27 +268,27 @@ static int indent( string_buffer_t *out, wchar_t *in, int flags )
|
||||
static wchar_t *trim( wchar_t *in )
|
||||
{
|
||||
wchar_t *end;
|
||||
|
||||
|
||||
while( *in == L'\n' )
|
||||
{
|
||||
in++;
|
||||
}
|
||||
|
||||
|
||||
end = in + wcslen(in);
|
||||
|
||||
|
||||
while( 1 )
|
||||
{
|
||||
if( end < in+2 )
|
||||
break;
|
||||
|
||||
end--;
|
||||
|
||||
|
||||
if( (*end == L'\n' ) && ( *(end-1) == L'\n' ) )
|
||||
*end=0;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
@@ -300,9 +300,9 @@ int main( int argc, char **argv )
|
||||
{
|
||||
string_buffer_t sb_in;
|
||||
string_buffer_t sb_out;
|
||||
|
||||
|
||||
int do_indent=1;
|
||||
|
||||
|
||||
wsetlocale( LC_ALL, L"" );
|
||||
program_name=L"fish_indent";
|
||||
|
||||
@@ -312,55 +312,55 @@ int main( int argc, char **argv )
|
||||
long_options[] =
|
||||
{
|
||||
{
|
||||
"no-indent", no_argument, 0, 'i'
|
||||
"no-indent", no_argument, 0, 'i'
|
||||
}
|
||||
,
|
||||
{
|
||||
"help", no_argument, 0, 'h'
|
||||
"help", no_argument, 0, 'h'
|
||||
}
|
||||
,
|
||||
{
|
||||
"version", no_argument, 0, 'v'
|
||||
"version", no_argument, 0, 'v'
|
||||
}
|
||||
,
|
||||
{
|
||||
0, 0, 0, 0
|
||||
{
|
||||
0, 0, 0, 0
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
int opt_index = 0;
|
||||
|
||||
|
||||
int opt = getopt_long( argc,
|
||||
argv,
|
||||
argv,
|
||||
GETOPT_STRING,
|
||||
long_options,
|
||||
long_options,
|
||||
&opt_index );
|
||||
|
||||
|
||||
if( opt == -1 )
|
||||
break;
|
||||
|
||||
|
||||
switch( opt )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case 'h':
|
||||
{
|
||||
print_help( "fish_indent", 1 );
|
||||
exit( 0 );
|
||||
exit( 0 );
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case 'v':
|
||||
{
|
||||
fwprintf( stderr,
|
||||
_(L"%ls, version %s\n"),
|
||||
fwprintf( stderr,
|
||||
_(L"%ls, version %s\n"),
|
||||
program_name,
|
||||
PACKAGE_VERSION );
|
||||
exit( 0 );
|
||||
exit( 0 );
|
||||
}
|
||||
|
||||
case 'i':
|
||||
@@ -368,23 +368,23 @@ int main( int argc, char **argv )
|
||||
do_indent = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
case '?':
|
||||
{
|
||||
exit( 1 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
halloc_util_init();
|
||||
halloc_util_init();
|
||||
|
||||
sb_init( &sb_in );
|
||||
sb_init( &sb_out );
|
||||
|
||||
read_file( stdin, &sb_in );
|
||||
|
||||
|
||||
wutil_init();
|
||||
|
||||
if( !indent( &sb_out, (wchar_t *)sb_in.buff, do_indent ) )
|
||||
@@ -398,7 +398,7 @@ int main( int argc, char **argv )
|
||||
*/
|
||||
fwprintf( stdout, L"%ls", (wchar_t *)sb_in.buff );
|
||||
}
|
||||
|
||||
|
||||
|
||||
wutil_destroy();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user