00001
00009 #ifndef FISH_TOKENIZER_H
00010 #define FISH_TOKENIZER_H
00011
00012 #include <wchar.h>
00013
00017 enum token_type
00018 {
00019 TOK_NONE,
00020 TOK_ERROR,
00021 TOK_INVALID,
00022 TOK_STRING,
00023 TOK_PIPE,
00024 TOK_END,
00025 TOK_REDIRECT_OUT,
00026 TOK_REDIRECT_APPEND,
00027 TOK_REDIRECT_IN,
00028 TOK_REDIRECT_FD,
00029 TOK_REDIRECT_NOCLOB,
00030 TOK_BACKGROUND,
00031 TOK_COMMENT
00032 }
00033 ;
00034
00038 enum tokenizer_error
00039 {
00040 TOK_UNTERMINATED_QUOTE,
00041 TOK_UNTERMINATED_SUBSHELL,
00042 TOK_UNTERMINATED_ESCAPE,
00043 TOK_OTHER
00044 }
00045 ;
00046
00047
00053 #define TOK_ACCEPT_UNFINISHED 1
00054
00059 #define TOK_SHOW_COMMENTS 2
00060
00061
00065 typedef struct
00066 {
00068 wchar_t *buff;
00070 wchar_t *orig_buff;
00072 wchar_t *last;
00073
00075 int last_type;
00077 int last_len;
00079 int last_pos;
00081 int has_next;
00083 int accept_unfinished;
00085 int show_comments;
00087 int free_orig;
00089 wchar_t last_quote;
00091 int error;
00092 }
00093 tokenizer;
00094
00107 void tok_init( tokenizer *tok, const wchar_t *b, int flags );
00108
00112 void tok_next( tokenizer *tok );
00113
00117 int tok_last_type( tokenizer *tok );
00118
00122 wchar_t *tok_last( tokenizer *tok );
00123
00127 wchar_t tok_last_quote( tokenizer *tok );
00128
00132 int tok_has_next( tokenizer *tok );
00133
00137 int tok_get_pos( tokenizer *tok );
00138
00142 void tok_destroy( tokenizer *tok );
00143
00144
00148 wchar_t *tok_string( tokenizer *tok );
00149
00150
00158 wchar_t *tok_first( const wchar_t *str );
00159
00163 void tok_set_pos( tokenizer *tok, int pos );
00164
00168 const wchar_t *tok_get_desc( int type );
00169
00173 int tok_get_error( tokenizer *tok );
00174
00175
00176 #endif