/**
 * @file keywords.h
 * prototypes for keywords.c
 *
 * @author  Ben Gardner
 * @license GPL v2+
 */
#ifndef KEYWORDS_H_INCLUDED
#define KEYWORDS_H_INCLUDED

#include "uncrustify_types.h"

/**
 * Initializes keywords table
 */
void init_keywords(void);

/**
 * Loads the dynamic keywords from a file
 *
 * @param filename  The path to the file to load
 *
 * @retval EX_OK     successfully read keywords from file
 * @retval EX_IOERR  reading keywords file failed
 */
int load_keyword_file(const char *filename);


/**
 * Search first the dynamic and then the static table for a matching keyword
 *
 * @param word  Pointer to the text -- NOT zero terminated
 * @param len   The length of the text
 *
 * @return CT_WORD (no match) or the keyword token
 */
c_token_t find_keyword_type(const char *word, size_t len);


/**
 * Adds a keyword to the list of dynamic keywords
 *
 * @param tag   The tag (string) must be zero terminated
 * @param type  The type, usually CT_TYPE
 */
void add_keyword(const std::string &tag, c_token_t type);


void print_keywords(FILE *pfile);


void clear_keyword_file(void);


//! Returns the pattern that the keyword needs based on the token
pattern_class_e get_token_pattern_class(c_token_t tok);


bool keywords_are_sorted(void);


#endif /* KEYWORDS_H_INCLUDED */
