|
Home --> Documentations --> PJLIB-UTIL Reference
scanner.hGo to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __PJ_SCANNER_H__
00021 #define __PJ_SCANNER_H__
00022
00028 #include <pjlib-util/types.h>
00029
00030 PJ_BEGIN_DECL
00031
00041 #if defined(PJ_SCANNER_USE_BITWISE) && PJ_SCANNER_USE_BITWISE != 0
00042 # include <pjlib-util/scanner_cis_bitwise.h>
00043 #else
00044 # include <pjlib-util/scanner_cis_uint.h>
00045 #endif
00046
00052 PJ_DECL(void) pj_cis_buf_init(pj_cis_buf_t *cs_buf);
00053
00064 PJ_DECL(pj_status_t) pj_cis_init(pj_cis_buf_t *cs_buf, pj_cis_t *cis);
00065
00077 PJ_DECL(pj_status_t) pj_cis_dup(pj_cis_t *new_cis, pj_cis_t *existing);
00078
00087 PJ_DECL(void) pj_cis_add_range( pj_cis_t *cis, int cstart, int cend);
00088
00094 PJ_DECL(void) pj_cis_add_alpha( pj_cis_t *cis);
00095
00101 PJ_DECL(void) pj_cis_add_num( pj_cis_t *cis);
00102
00109 PJ_DECL(void) pj_cis_add_str( pj_cis_t *cis, const char *str);
00110
00117 PJ_DECL(void) pj_cis_add_cis( pj_cis_t *cis, const pj_cis_t *rhs);
00118
00126 PJ_DECL(void) pj_cis_del_range( pj_cis_t *cis, int cstart, int cend);
00127
00134 PJ_DECL(void) pj_cis_del_str( pj_cis_t *cis, const char *str);
00135
00141 PJ_DECL(void) pj_cis_invert( pj_cis_t *cis );
00142
00151 PJ_INLINE(int) pj_cis_match( const pj_cis_t *cis, pj_uint8_t c )
00152 {
00153 return PJ_CIS_ISSET(cis, c);
00154 }
00155
00156
00160 enum
00161 {
00165 PJ_SCAN_AUTOSKIP_WS = 1,
00166
00170 PJ_SCAN_AUTOSKIP_WS_HEADER = 3,
00171
00174 PJ_SCAN_AUTOSKIP_NEWLINE = 4
00175 };
00176
00177
00178
00179 struct pj_scanner;
00180
00181
00188 typedef void (*pj_syn_err_func_ptr)(struct pj_scanner *scanner);
00189
00190
00194 typedef struct pj_scanner
00195 {
00196 char *begin;
00197 char *end;
00198 char *curptr;
00199 int line;
00200 char *start_line;
00201 int skip_ws;
00202 pj_syn_err_func_ptr callback;
00203 } pj_scanner;
00204
00205
00210 typedef struct pj_scan_state
00211 {
00212 char *curptr;
00213 int line;
00214 char *start_line;
00215 } pj_scan_state;
00216
00217
00234 PJ_DECL(void) pj_scan_init( pj_scanner *scanner, char *bufstart, int buflen,
00235 unsigned options,
00236 pj_syn_err_func_ptr callback );
00237
00238
00244 PJ_DECL(void) pj_scan_fini( pj_scanner *scanner );
00245
00246
00254 PJ_INLINE(int) pj_scan_is_eof( const pj_scanner *scanner)
00255 {
00256 return scanner->curptr >= scanner->end;
00257 }
00258
00259
00273 PJ_DECL(int) pj_scan_peek( pj_scanner *scanner,
00274 const pj_cis_t *spec, pj_str_t *out);
00275
00276
00290 PJ_DECL(int) pj_scan_peek_n( pj_scanner *scanner,
00291 pj_size_t len, pj_str_t *out);
00292
00293
00306 PJ_DECL(int) pj_scan_peek_until( pj_scanner *scanner,
00307 const pj_cis_t *spec,
00308 pj_str_t *out);
00309
00310
00322 PJ_DECL(void) pj_scan_get( pj_scanner *scanner,
00323 const pj_cis_t *spec, pj_str_t *out);
00324
00325
00335 PJ_DECL(void) pj_scan_get_unescape( pj_scanner *scanner,
00336 const pj_cis_t *spec, pj_str_t *out);
00337
00338
00349 PJ_DECL(void) pj_scan_get_quote( pj_scanner *scanner,
00350 int begin_quote, int end_quote,
00351 pj_str_t *out);
00352
00370 PJ_DECL(void) pj_scan_get_quotes(pj_scanner *scanner,
00371 const char *begin_quotes,
00372 const char *end_quotes, int qsize,
00373 pj_str_t *out);
00374
00375
00383 PJ_DECL(void) pj_scan_get_n( pj_scanner *scanner,
00384 unsigned N, pj_str_t *out);
00385
00386
00394 PJ_DECL(int) pj_scan_get_char( pj_scanner *scanner );
00395
00396
00405 PJ_DECL(void) pj_scan_get_until( pj_scanner *scanner,
00406 const pj_cis_t *spec, pj_str_t *out);
00407
00408
00417 PJ_DECL(void) pj_scan_get_until_ch( pj_scanner *scanner,
00418 int until_char, pj_str_t *out);
00419
00420
00429 PJ_DECL(void) pj_scan_get_until_chr( pj_scanner *scanner,
00430 const char *until_spec, pj_str_t *out);
00431
00441 PJ_DECL(void) pj_scan_advance_n( pj_scanner *scanner,
00442 unsigned N, pj_bool_t skip);
00443
00444
00454 PJ_DECL(int) pj_scan_strcmp( pj_scanner *scanner, const char *s, int len);
00455
00456
00467 PJ_DECL(int) pj_scan_stricmp( pj_scanner *scanner, const char *s, int len);
00468
00485 PJ_DECL(int) pj_scan_stricmp_alnum( pj_scanner *scanner, const char *s,
00486 int len);
00487
00488
00495 PJ_DECL(void) pj_scan_get_newline( pj_scanner *scanner );
00496
00497
00504 PJ_DECL(void) pj_scan_skip_whitespace( pj_scanner *scanner );
00505
00506
00512 PJ_DECL(void) pj_scan_skip_line( pj_scanner *scanner );
00513
00520 PJ_DECL(void) pj_scan_save_state( const pj_scanner *scanner,
00521 pj_scan_state *state);
00522
00523
00532 PJ_DECL(void) pj_scan_restore_state( pj_scanner *scanner,
00533 pj_scan_state *state);
00534
00542 PJ_INLINE(int) pj_scan_get_col( const pj_scanner *scanner )
00543 {
00544 return (int)(scanner->curptr - scanner->start_line);
00545 }
00546
00552 PJ_END_DECL
00553
00554 #endif
00555
PJLIB-UTIL Open Source, small footprint, and portable asynchronous/caching DNS resolver, text scanner, STUN client, and XML library
Copyright (C) 2006-2009 Teluu Inc.
|