/* -----------------------------------------------------------------------------
 * This file is part of SWIG, which is licensed as a whole under version 3
 * (or any later version) of the GNU General Public License. Some additional
 * terms also apply to certain portions of SWIG. The full details of the SWIG
 * license and copyrights can be found in the LICENSE and COPYRIGHT files
 * included with the SWIG source code as distributed by the SWIG developers
 * and at https://www.swig.org/legal.html.
 *
 * swigscan.h
 *
 * C/C++ scanner.
 * ----------------------------------------------------------------------------- */

typedef struct Scanner Scanner;

extern Scanner *NewScanner(void);
extern void DelScanner(Scanner *);
extern void Scanner_clear(Scanner *);
extern void Scanner_push(Scanner *, String *);
extern void Scanner_pushtoken(Scanner *, int, const_String_or_char_ptr value);
extern int Scanner_token(Scanner *);
extern String *Scanner_text(Scanner *);
extern void Scanner_skip_line(Scanner *);
extern int Scanner_skip_balanced(Scanner *, int startchar, int endchar);
extern String *Scanner_get_raw_text_balanced(Scanner *, int startchar, int endchar);
extern void Scanner_set_location(Scanner *, String *file, int line);
extern String *Scanner_file(Scanner *);
extern int Scanner_line(Scanner *);
extern int Scanner_start_line(Scanner *);
extern void Scanner_idstart(Scanner *, const char *idchar);
extern String *Scanner_errmsg(Scanner *);
extern int Scanner_errline(Scanner *);
extern int Scanner_isoperator(int tokval);
extern void Scanner_locator(Scanner *, String *loc);

/* Note: Tokens in range 100+ are for C/C++ operators */

#define SWIG_MAXTOKENS         200
#define SWIG_TOKEN_LPAREN      1  /* ( */
#define SWIG_TOKEN_RPAREN      2  /* ) */
#define SWIG_TOKEN_SEMI        3  /* ; */
#define SWIG_TOKEN_LBRACE      4  /* { */
#define SWIG_TOKEN_RBRACE      5  /* } */
#define SWIG_TOKEN_LBRACKET    6  /* [ */
#define SWIG_TOKEN_RBRACKET    7  /* ] */
#define SWIG_TOKEN_BACKSLASH   8  /* \ */
#define SWIG_TOKEN_ENDLINE     9  /* \n */
#define SWIG_TOKEN_STRING      10 /* "str" */
#define SWIG_TOKEN_POUND       11 /* # */
#define SWIG_TOKEN_COLON       12 /* : */
#define SWIG_TOKEN_DCOLON      13 /* :: */
#define SWIG_TOKEN_DCOLONSTAR  14 /* ::* */
#define SWIG_TOKEN_ID          15 /* identifier */
#define SWIG_TOKEN_FLOAT       16 /* 3.1415F */
#define SWIG_TOKEN_DOUBLE      17 /* 3.1415 */
#define SWIG_TOKEN_LONGDOUBLE  18 /* 3.1415L */
#define SWIG_TOKEN_INT         19 /* 314 */
#define SWIG_TOKEN_UINT        20 /* 314U */
#define SWIG_TOKEN_LONG        21 /* 314L */
#define SWIG_TOKEN_ULONG       22 /* 314UL */
#define SWIG_TOKEN_CHAR        23 /* 'charconst' */
#define SWIG_TOKEN_PERIOD      24 /* . */
#define SWIG_TOKEN_AT          25 /* @ */
#define SWIG_TOKEN_DOLLAR      26 /* $ */
#define SWIG_TOKEN_CODEBLOCK   27 /* %{ ... %} ... */
#define SWIG_TOKEN_LONGLONG    29 /* 314LL */
#define SWIG_TOKEN_ULONGLONG   30 /* 314ULL */
#define SWIG_TOKEN_QUESTION    31 /* ? */
#define SWIG_TOKEN_COMMENT     32 /* C or C++ comment */
#define SWIG_TOKEN_BOOL        33 /* true or false */
#define SWIG_TOKEN_WSTRING     34 /* L"str" */
#define SWIG_TOKEN_WCHAR       35 /* L'c' */
#define SWIG_TOKEN_ELLIPSIS    36 /* ... */
#define SWIG_TOKEN_LLBRACKET   37 /* [[ */
#define SWIG_TOKEN_RRBRACKET   38 /* ]] */

#define SWIG_TOKEN_ILLEGAL     99
#define SWIG_TOKEN_ERROR       -1

#define SWIG_TOKEN_COMMA       101 /* , */
#define SWIG_TOKEN_STAR        102 /* * */
#define SWIG_TOKEN_EQUAL       103 /* = */
#define SWIG_TOKEN_EQUALTO     104 /* == */
#define SWIG_TOKEN_NOTEQUAL    105 /* != */
#define SWIG_TOKEN_PLUS        106 /* + */
#define SWIG_TOKEN_MINUS       107 /* - */
#define SWIG_TOKEN_AND         108 /* & */
#define SWIG_TOKEN_LAND        109 /* && */
#define SWIG_TOKEN_OR          110 /* | */
#define SWIG_TOKEN_LOR         111 /* || */
#define SWIG_TOKEN_XOR         112 /* ^ */
#define SWIG_TOKEN_LESSTHAN    113 /* < */
#define SWIG_TOKEN_GREATERTHAN 114 /* > */
#define SWIG_TOKEN_LTEQUAL     115 /* <= */
#define SWIG_TOKEN_GTEQUAL     116 /* >= */
#define SWIG_TOKEN_NOT         117 /* ~ */
#define SWIG_TOKEN_LNOT        118 /* ! */
#define SWIG_TOKEN_SLASH       119 /* / */
#define SWIG_TOKEN_PERCENT     120 /* % */
#define SWIG_TOKEN_LSHIFT      121 /* << */
#define SWIG_TOKEN_RSHIFT      122 /* >> */
#define SWIG_TOKEN_PLUSPLUS    123 /* ++ */
#define SWIG_TOKEN_MINUSMINUS  124 /* -- */
#define SWIG_TOKEN_PLUSEQUAL   125 /* += */
#define SWIG_TOKEN_MINUSEQUAL  126 /* -= */
#define SWIG_TOKEN_TIMESEQUAL  127 /* *= */
#define SWIG_TOKEN_DIVEQUAL    128 /* /= */
#define SWIG_TOKEN_ANDEQUAL    129 /* &= */
#define SWIG_TOKEN_OREQUAL     130 /* |= */
#define SWIG_TOKEN_XOREQUAL    131 /* ^= */
#define SWIG_TOKEN_LSEQUAL     132 /* <<= */
#define SWIG_TOKEN_RSEQUAL     133 /* >>= */
#define SWIG_TOKEN_MODEQUAL    134 /* %= */
#define SWIG_TOKEN_ARROW       135 /* -> */
#define SWIG_TOKEN_ARROWSTAR   136 /* ->* */
#define SWIG_TOKEN_LTEQUALGT   137 /* <=> */
