aboutsummaryrefslogtreecommitdiffhomepage
path: root/parse_util.h
blob: 7562a7417b1e866cc0b871389374bebd33379c21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/** \file parse_util.h

    Various utility functions for parsing a command
*/

#ifndef FISH_PARSE_UTIL_H
#define FISH_PARSE_UTIL_H

#include <wchar.h>


/**
   Locate the first subshell in the specified string.
   
   \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
*/

int parse_util_locate_cmdsubst( const wchar_t *in, 
								const wchar_t **begin, 
								const wchar_t **end,
								int allow_incomplete );

/**
   Find the beginning and end of the command substitution under the cursor
*/
void parse_util_cmdsubst_extent( const wchar_t *buff,
								 int cursor_pos,
								 const wchar_t **a, 
								 const wchar_t **b );

/**
   Find the beginning and end of the process definition under the cursor
*/
void parse_util_process_extent( const wchar_t *buff,
								int pos,
								const wchar_t **a, 
								const wchar_t **b );


/**
   Find the beginning and end of the job definition under the cursor
*/
void parse_util_job_extent( const wchar_t *buff,
							int pos,
							const wchar_t **a, 
							const wchar_t **b );

/**
   Find the beginning and end of the token under the cursor
*/
void parse_util_token_extent( const wchar_t *buff,
							  int cursor_pos,
							  const wchar_t **tok_begin,
							  const wchar_t **tok_end,
							  const wchar_t **prev_begin, 
							  const wchar_t **prev_end );


/**
   Get the linenumber at the specified character offset
*/
int parse_util_lineno( const wchar_t *str, int len );

/**
   Autoload the specified file, if it exists in the specified path. Do
   not load it multiple times unless it's timestamp changes.

   \param cmd the filename to search for. The suffix '.fish' is always added to this name
   \param path_var a list of paths to search in. 
   \param on_load a callback function to run if a suitable file is found, which has not already been run
   \param reload wheter to recheck file timestamps on already loaded files
*/
int parse_util_load( const wchar_t *cmd,
					 const wchar_t *path_var,
					 void (*on_load)(const wchar_t *cmd),
					 int reload );

void parse_util_load_reset( const wchar_t *path_var );

/**
   Set the argv environment variable to the specified null-terminated
   array of strings
*/
void parse_util_set_argv( wchar_t **argv );

#endif