#ifndef COLORFULCODE_H
#define COLORFULCODE_H
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#define CC_UTF16_OFFSETS (1u << 0)
#define CC_HTML_WRAP (1u << 1)
#define CC_HTML_LINES (1u << 2)
#define CC_ANSI_256 (1u << 3)
enum {
CC_KIND_TEXT = 0,
CC_KIND_COMMENT = 1,
CC_KIND_KEYWORD = 2,
CC_KIND_STRING = 3,
CC_KIND_ESCAPE = 4,
CC_KIND_NUMBER = 5,
CC_KIND_CONSTANT = 6,
CC_KIND_FUNCTION = 7,
CC_KIND_TYPE = 8,
CC_KIND_VARIABLE = 9,
CC_KIND_PROPERTY = 10,
CC_KIND_BUILTIN = 11,
CC_KIND_OPERATOR = 12,
CC_KIND_PUNCTUATION = 13,
CC_KIND_TAG = 14,
CC_KIND_ATTRIBUTE = 15,
CC_KIND_META = 16,
CC_KIND_REGEX = 17,
CC_KIND_HEADING = 18,
CC_KIND_EMPHASIS = 19,
CC_KIND_STRONG = 20,
CC_KIND_LINK = 21,
CC_KIND_INSERTED = 22,
CC_KIND_DELETED = 23,
CC_KIND_PARAMETER = 24,
CC_KIND_COUNT = 25
};
typedef struct {
uint32_t start;
uint32_t end;
uint8_t kind;
} cc_token;
typedef struct {
uint32_t color;
uint8_t bold;
uint8_t italic;
uint8_t underline;
} cc_style;
typedef struct cc_tokens cc_tokens;
const char* cc_version(void);
int32_t cc_language_count(void);
int32_t cc_language_find(const char* name);
int32_t cc_language_from_path(const char* path);
int32_t cc_language_from_content(const char* code, size_t len);
int32_t cc_language_detect(const char* code, size_t len);
const char* cc_language_id(int32_t language);
const char* cc_language_name(int32_t language);
cc_tokens* cc_highlight(const char* code, size_t len, int32_t language, uint32_t flags);
size_t cc_tokens_len(const cc_tokens* tokens);
const cc_token* cc_tokens_data(const cc_tokens* tokens);
void cc_tokens_free(cc_tokens* tokens);
const char* cc_kind_name(uint8_t kind);
int32_t cc_theme_count(void);
int32_t cc_theme_find(const char* name);
const char* cc_theme_name(int32_t theme);
uint8_t cc_theme_is_dark(int32_t theme);
uint32_t cc_theme_background(int32_t theme);
uint32_t cc_theme_foreground(int32_t theme);
cc_style cc_theme_style(int32_t theme, uint8_t kind);
char* cc_theme_css(int32_t theme, const char* selector);
char* cc_render_html(const char* code, size_t len, int32_t language, int32_t theme, uint32_t flags);
char* cc_render_ansi(const char* code, size_t len, int32_t language, int32_t theme, uint32_t flags);
void cc_string_free(char* s);
#ifdef __cplusplus
}
#endif
#endif