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
2012-01-25 11:47:45 -08:00
# include "autoload.h"
2006-01-31 02:51:50 +10:00
# include <wchar.h>
2012-01-23 11:42:41 -08:00
# include <map>
# include <set>
2006-01-31 02:51:50 +10:00
/**
2006-02-19 11:54:38 +10:00
Find the beginning and end of the first subshell in the specified string .
2012-11-18 11:23:22 +01: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
*/
2012-11-18 11:23:22 +01:00
int parse_util_locate_cmdsubst ( const wchar_t * in ,
wchar_t * * begin ,
wchar_t * * end ,
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 ,
2012-11-18 11:23:22 +01:00
size_t cursor_pos ,
const wchar_t * * a ,
const 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 ,
2012-11-18 11:23:22 +01:00
size_t cursor_pos ,
const wchar_t * * a ,
const 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 ,
2012-11-18 11:23:22 +01:00
size_t cursor_pos ,
const wchar_t * * a ,
const 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
2012-02-06 00:57:43 -08:00
token before the current token . Any combination of tok_begin ,
2006-06-20 10:50:10 +10:00
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 ,
2012-11-18 11:23:22 +01:00
size_t cursor_pos ,
const wchar_t * * tok_begin ,
const wchar_t * * tok_end ,
const wchar_t * * prev_begin ,
const 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
*/
2012-08-04 13:47:56 -07:00
int parse_util_lineno ( const wchar_t * str , size_t len ) ;
2006-02-05 23:10:35 +10:00
2007-09-22 00:05:49 +10:00
/**
Calculate the line number of the specified cursor position
*/
2012-08-04 13:47:56 -07:00
int parse_util_get_line_from_offset ( const wcstring & str , size_t pos ) ;
2007-09-22 00:05:49 +10:00
/**
Get the offset of the first character on the specified line
*/
2012-08-01 16:32:52 -07:00
size_t parse_util_get_offset_from_line ( const wcstring & str , int line ) ;
2007-09-22 00:05:49 +10:00
/**
Return the total offset of the buffer for the cursor position nearest to the specified poition
*/
2012-08-01 16:32:52 -07:00
size_t parse_util_get_offset ( const wcstring & str , int line , long line_offset ) ;
2007-09-22 00:05:49 +10:00
2006-02-15 12:24:15 +10:00
/**
Set the argv environment variable to the specified null - terminated
2012-11-18 11:23:22 +01:00
array of strings .
2006-02-15 12:24:15 +10:00
*/
2012-01-29 22:06:58 -08:00
void parse_util_set_argv ( const wchar_t * const * 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 ) ;
2012-07-06 14:34:53 -07:00
/**
Calculates information on the parameter at the specified index .
\ param cmd The command to be analyzed
\ param pos An index in the string which is inside the parameter
\ param quote If not NULL , store the type of quote this parameter has , can be either ' , " or \\ 0, meaning the string is not quoted.
\ param offset If not NULL , get_param will store the offset to the beginning of the parameter .
\ param type If not NULL , get_param will store the token type as returned by tok_last .
*/
void parse_util_get_parameter_info ( const wcstring & cmd , const size_t pos , wchar_t * quote , size_t * offset , int * type ) ;
/**
Attempts to escape the string ' cmd ' using the given quote type , as determined by the quote character . The quote can be a single quote or double quote , or L ' \0 ' to indicate no quoting ( and thus escaping should be with backslashes ) .
*/
wcstring parse_util_escape_string_with_quote ( const wcstring & cmd , wchar_t quote ) ;
2007-04-22 19:50:26 +10:00
2006-01-31 02:51:50 +10:00
# endif