2006-01-31 02:51:50 +10:00
/** \file parse_util.h
2006-02-19 11:54:38 +10:00
Various mostly unrelated utility functions related to parsing ,
loading and evaluating fish code .
2006-01-31 02:51:50 +10:00
*/
# ifndef FISH_PARSE_UTIL_H
# define FISH_PARSE_UTIL_H
# include <wchar.h>
/**
2006-02-19 11:54:38 +10:00
Find the beginning and end of the first subshell in the specified string .
2011-12-26 19:18:46 -08:00
2006-01-31 02:51:50 +10:00
\ param in the string to search for subshells
\ param begin the starting paranthesis of the subshell
\ param end the ending paranthesis of the subshell
\ param flags set this variable to ACCEPT_INCOMPLETE if in tab_completion mode
\ return - 1 on syntax error , 0 if no subshells exist and 1 on sucess
*/
2011-12-26 19:18:46 -08:00
int parse_util_locate_cmdsubst ( const wchar_t * in ,
wchar_t * * begin ,
2006-06-14 23:22:40 +10:00
wchar_t * * end ,
2006-06-20 10:50:10 +10:00
int flags ) ;
2006-01-31 02:51:50 +10:00
2006-02-09 04:47:37 +10:00
/**
2006-07-03 20:46:47 +10:00
Find the beginning and end of the command substitution under the
cursor . If no subshell is found , the entire string is returned . If
the current command substitution is not ended , i . e . the closing
parenthesis is missing , then the string from the beginning of the
substitution to the end of the string is returned .
2006-02-19 11:54:38 +10:00
\ param buff the string to search for subshells
\ param cursor_pos the position of the cursor
\ param a the start of the searched string
\ param b the end of the searched string
2006-02-09 04:47:37 +10:00
*/
2006-01-31 02:51:50 +10:00
void parse_util_cmdsubst_extent ( const wchar_t * buff ,
int cursor_pos ,
2011-12-26 19:18:46 -08:00
wchar_t * * a ,
2006-06-14 23:22:40 +10:00
wchar_t * * b ) ;
2006-01-31 02:51:50 +10:00
2006-02-09 04:47:37 +10:00
/**
Find the beginning and end of the process definition under the cursor
2006-02-19 11:54:38 +10:00
\ param buff the string to search for subshells
\ param cursor_pos the position of the cursor
\ param a the start of the searched string
\ param b the end of the searched string
2006-02-09 04:47:37 +10:00
*/
2006-01-31 02:51:50 +10:00
void parse_util_process_extent ( const wchar_t * buff ,
2006-02-19 11:54:38 +10:00
int cursor_pos ,
2011-12-26 19:18:46 -08:00
wchar_t * * a ,
2006-06-14 23:22:40 +10:00
wchar_t * * b ) ;
2006-01-31 02:51:50 +10:00
2006-02-09 04:47:37 +10:00
/**
Find the beginning and end of the job definition under the cursor
2006-02-19 11:54:38 +10:00
\ param buff the string to search for subshells
\ param cursor_pos the position of the cursor
\ param a the start of the searched string
\ param b the end of the searched string
2006-02-09 04:47:37 +10:00
*/
2006-01-31 02:51:50 +10:00
void parse_util_job_extent ( const wchar_t * buff ,
2006-02-19 11:54:38 +10:00
int cursor_pos ,
2011-12-26 19:18:46 -08:00
wchar_t * * a ,
2006-06-14 23:22:40 +10:00
wchar_t * * b ) ;
2006-01-31 02:51:50 +10:00
2006-02-09 04:47:37 +10:00
/**
2006-06-20 10:50:10 +10:00
Find the beginning and end of the token under the cursor and the
toekn before the current token . Any combination of tok_begin ,
tok_end , prev_begin and prev_end may be null .
2006-02-19 11:54:38 +10:00
\ param buff the string to search for subshells
\ param cursor_pos the position of the cursor
2006-06-20 10:50:10 +10:00
\ param tok_begin the start of the current token
\ param tok_end the end of the current token
\ param prev_begin the start o the token before the current token
\ param prev_end the end of the token before the current token
2006-02-09 04:47:37 +10:00
*/
2006-01-31 02:51:50 +10:00
void parse_util_token_extent ( const wchar_t * buff ,
int cursor_pos ,
2006-06-14 23:22:40 +10:00
wchar_t * * tok_begin ,
wchar_t * * tok_end ,
2011-12-26 19:18:46 -08:00
wchar_t * * prev_begin ,
2006-06-14 23:22:40 +10:00
wchar_t * * prev_end ) ;
2006-01-31 02:51:50 +10:00
2006-02-09 04:47:37 +10:00
/**
Get the linenumber at the specified character offset
*/
2006-02-05 23:10:35 +10:00
int parse_util_lineno ( const wchar_t * str , int len ) ;
2007-09-22 00:05:49 +10:00
/**
Calculate the line number of the specified cursor position
*/
int parse_util_get_line_from_offset ( wchar_t * buff , int pos ) ;
/**
Get the offset of the first character on the specified line
*/
int parse_util_get_offset_from_line ( wchar_t * buff , int line ) ;
/**
Return the total offset of the buffer for the cursor position nearest to the specified poition
*/
int parse_util_get_offset ( wchar_t * buff , int line , int line_offset ) ;
2006-02-09 04:47:37 +10:00
/**
Autoload the specified file , if it exists in the specified path . Do
2006-07-13 00:22:42 +10:00
not load it multiple times unless it ' s timestamp changes or
parse_util_unload is called .
2006-02-09 04:47:37 +10:00
2011-12-26 19:18:46 -08:00
Autoloading one file may unload another .
2006-10-11 08:45:46 +10:00
2006-02-09 04:47:37 +10:00
\ param cmd the filename to search for . The suffix ' . fish ' is always added to this name
2006-07-13 00:22:42 +10:00
\ param path_var_name the environment variable giving the search path
2006-10-19 21:46:32 +10:00
\ param on_unload a callback function to run if a suitable file is found , which has not already been run . unload will also be called for old files which are unloaded .
2006-02-09 04:47:37 +10:00
\ param reload wheter to recheck file timestamps on already loaded files
*/
2012-01-03 10:54:06 -08:00
int parse_util_load ( const wcstring & cmd ,
const wcstring & path_var_name ,
2006-10-19 21:46:32 +10:00
void ( * on_unload ) ( const wchar_t * cmd ) ,
2006-02-08 19:20:05 +10:00
int reload ) ;
2006-02-19 11:54:38 +10:00
/**
2006-07-13 00:22:42 +10:00
Reset the loader for the specified path variable . This will cause
all information on loaded files in the specified directory to be
reset .
\ param path_var_name the environment variable giving the search path
2006-10-19 21:46:32 +10:00
\ param on_unload a callback function which will be called before ( re ) loading a file , may be used to unload the previous file .
2006-07-13 00:22:42 +10:00
*/
void parse_util_load_reset ( const wchar_t * path_var_name ,
2006-10-19 21:46:32 +10:00
void ( * on_unload ) ( const wchar_t * cmd ) ) ;
2006-07-13 00:22:42 +10:00
/**
Tell the autoloader that the specified file , in the specified path ,
is no longer loaded .
\ param cmd the filename to search for . The suffix ' . fish ' is always added to this name
\ param path_var_name the environment variable giving the search path
2006-10-19 21:46:32 +10:00
\ param on_unload a callback function which will be called before ( re ) loading a file , may be used to unload the previous file .
2006-07-13 00:22:42 +10:00
\ return non - zero if the file was removed , zero if the file had not yet been loaded
2006-02-19 11:54:38 +10:00
*/
2006-07-13 00:22:42 +10:00
int parse_util_unload ( const wchar_t * cmd ,
const wchar_t * path_var_name ,
2006-10-19 21:46:32 +10:00
void ( * on_unload ) ( const wchar_t * cmd ) ) ;
2006-02-15 12:46:44 +10:00
2006-02-15 12:24:15 +10:00
/**
Set the argv environment variable to the specified null - terminated
2011-12-26 19:18:46 -08:00
array of strings .
2006-02-15 12:24:15 +10:00
*/
2012-01-13 23:44:18 -08:00
void parse_util_set_argv ( wchar_t * * argv , const wcstring_list_t & named_arguments ) ;
2006-02-15 12:24:15 +10:00
2006-02-19 11:14:32 +10:00
/**
2006-02-19 11:54:38 +10:00
Make a duplicate of the specified string , unescape wildcard
characters but not performing any other character transformation .
2006-02-19 11:14:32 +10:00
*/
wchar_t * parse_util_unescape_wildcards ( const wchar_t * in ) ;
2007-04-22 19:50:26 +10:00
2006-01-31 02:51:50 +10:00
# endif