| ## Public API Reference

- Main Page
- Modules
- Namespaces
- Classes
- Files
- Related Pages

- File List
- File Members

# cstool/tokenlist.h File Reference

Token list helper macros. More...

`#include <CS_TOKEN_ITEM_FILE>`

Go to the source code of this file.

## Token list helper macros
The macros here provide an easy way to automatically build a token list useful for e.g. parsers. The list of tokens have to be declared in an external file, with each token the argument to a 'CS_TOKEN_LIST_TOKEN()' invocation. The name of the file (full path!) has to be put in a macro named CS_TOKEN_ITEM_FILE. Optionally, the name of the function to initialize the token table can be set via CS_INIT_TOKEN_TABLE_NAME; the default is 'InitTokenTable'. In addition to invoking the initialization function to populate the string hash, an enumeration is also created. Elements of the enumeration are named XMLTOKEN_FOO (where 'FOO' represents the argument to CS_TOKEN_LIST_TOKEN()). If you prefer a prefix other than 'XMLTOKEN_', define CS_TOKEN_LIST_TOKEN_PREFIX with the prefix of your choice. As a convenience, in addition to entries for each CS_TOKEN_LIST_TOKEN invocation, a final item is added to the enumeration with the name provided by CS_TOKEN_LIST_TOKEN_LAST. If you do not #define this macro, then the name XMLTOKEN_TOKEN_COUNT is given to the last item in the enumeration. This value will equate to the count of items in the enumeration (not including this automatically added item). Note that the client defines CS_TOKEN_ITEM_FILE, CS_INIT_TOKEN_TABLE_NAME, CS_TOKEN_LIST_TOKEN_PREFIX, and CS_TOKEN_LIST_TOKEN_LAST, and they will not be undefined by this file; hence, if you want to build multiple token lists, you may redefine those macros and include <cstool/tokenlist.h> again. The code generated by the macros has a dependency on csString, thus the <csutil/csstring.h> header must be included in files that use the token list helpers. Example (from a real-world use): fire.tok:
     CS_TOKEN_LIST_TOKEN(PALETTE)
     ...
fire.h:
     #include <csutil/csstring.h>

     class csFireLoader
     {
       csStringHash tokens;
     #define CS_TOKEN_ITEM_FILE "plugins/proctex/standard/fire.tok"
     #include "cstool/tokenlist.h"
       ...
     };
fire.cpp:
     csFireLoader::csFireLoader(iBase *p)
     {
       InitTokenTable (tokens);
     // ...
     }

     csPtr<iBase> csFireLoader::Parse (iDocumentNode* node,
                                         iLoaderContext* ldr_context,
                                         iBase* context)
     {
     // ...
       csStringID id = tokens.Request (child->GetValue ());
       switch (id)
       {
         case XMLTOKEN_PALETTE:
           // ...
           break;
       }
     // ...
     }
#define | CS_INIT_TOKEN_TABLE_NAME InitTokenTable
| Name of the token table initialization method.
#define | CS_INIT_TOKEN_TABLE_NAME_DEFAULT
| Name of the token table initialization method.
#define | CS_TOKEN_LIST_PASTE(X, Y) CS_TOKEN_LIST_PASTE1(X,Y)
| Name of the token table initialization method.
#define | CS_TOKEN_LIST_PASTE1(X, Y) X ## Y
| Name of the token table initialization method.
#define | CS_TOKEN_LIST_TOKEN(X)
| A token list entry.
#define | CS_TOKEN_LIST_TOKEN(X) CS_TOKEN_LIST_PASTE(CS_TOKEN_LIST_TOKEN_PREFIX,X),
| A token list entry.
#define | CS_TOKEN_LIST_TOKEN_FINAL(X) CS_TOKEN_LIST_PASTE(CS_TOKEN_LIST_TOKEN_PREFIX,X)
| Name of the token table initialization method.
#define | CS_TOKEN_LIST_TOKEN_LAST TOKEN_COUNT
| Name for the "token count" enumeration value.
#define | CS_TOKEN_LIST_TOKEN_LAST_DEFAULT
| Name of the token table initialization method.
#define | CS_TOKEN_LIST_TOKEN_PREFIX XMLTOKEN_
| Prefix for the generated enumeration value.
#define | CS_TOKEN_LIST_TOKEN_PREFIX_DEFAULT
| Name of the token table initialization method.
enum |
| Name of the token table initialization method. More...
static void | CS_INIT_TOKEN_TABLE_NAME (csStringHash &t)
| Name of the token table initialization method.

## Detailed Description

Token list helper macros.

Definition in file tokenlist.h.