瀏覽代碼

Merge branch 'master' of https://git.lain.church/emil/hl

master
anon 9 月之前
父節點
當前提交
ab00a0d894
共有 3 個文件被更改,包括 65 次插入13 次删除
  1. +49
    -8
      source/hl.h
  2. +2
    -0
      source/main.c
  3. +14
    -5
      source/terminal_hl.h

+ 49
- 8
source/hl.h 查看文件

@@ -37,10 +37,51 @@ typedef struct {


typedef struct { typedef struct {
hl_group_t * hl; hl_group_t * hl;
token_type_t t;
regex_t * syntax; regex_t * syntax;
token_type_t t;
char _pad[4];
} token_t; } token_t;


extern vector_t token_table;
extern display_t * display_table;

extern hl_group_t * keyword_hl;
extern hl_group_t * preprocessor_hl;
extern hl_group_t * symbol_hl;

extern void new_display_mode(display_t * mode);
extern int free_token(token_t * token);
extern int append_token(token_t * token);

// TODO: ALIGN PROPERLY...

extern token_t * new_symbol_token(const char * const c,
hl_group_t * const g);
extern int new_symbol_tokens(const char * const * symbols,
hl_group_t * const g);
extern int new_char_tokens(const char * characters,
hl_group_t * const g);
extern token_t * new_keyword_token(const char * const word,
hl_group_t * const g);
extern int new_keyword_tokens(const char * const * words,
hl_group_t * const g);
extern token_t * new_token(const char * const word,
const token_type_t t,
hl_group_t * const g);

// TODO: ALIGN PROPERLY...

extern int token_fits(const token_t * const token,
const char * const to,
const int string_offset,
int * match_offset);

extern void render_string(const char * const string,
const char * const mode);

extern int hl_init(void);
extern int hl_deinit(void);

// GLOBALS // GLOBALS


vector_t token_table = { vector_t token_table = {
@@ -96,7 +137,7 @@ int new_symbol_tokens(const char * const * symbols,
if(new_symbol_token(*symbols, g)) { if(new_symbol_token(*symbols, g)) {
++i; ++i;
} else { } else {
assert(!"Kinda failed to new symbol token thing.");
assert(!(bool)"Kinda failed to new symbol token thing.");
} }
++symbols; ++symbols;
} }
@@ -117,7 +158,7 @@ int new_char_tokens(const char * characters,
if(new_symbol_token(is_magic(*s) ? buffer : buffer + 1, g)) { if(new_symbol_token(is_magic(*s) ? buffer : buffer + 1, g)) {
++i; ++i;
} else { } else {
assert(!"Kinda failed to new char token thing.");
assert(!(bool)"Kinda failed to new char token thing.");
} }
} }


@@ -203,10 +244,10 @@ token_t * new_token(const char * const word,
// ### Highlighting ### // ### Highlighting ###
// -------------------- // --------------------


int token_fits(const token_t * const token,
const char * const to,
const int string_offset,
int * match_offset) {
int token_fits(const token_t * const token,
const char * const to,
const int string_offset,
int * match_offset) {
UNUSED(match_offset); UNUSED(match_offset);


//return regex_match(pattern, to, string_offset, match_offset); //return regex_match(pattern, to, string_offset, match_offset);
@@ -223,7 +264,7 @@ void render_string(const char * const string,
for (; token_index < token_table.element_count; token_index++) { for (; token_index < token_table.element_count; token_index++) {
token_t * t = *(token_t**)vector_get(&token_table, token_t * t = *(token_t**)vector_get(&token_table,
token_index); token_index);
f = token_fits(t, string, s - string, &offset);
f = token_fits(t, string, (int) (s - string), &offset);
if (f) { if (f) {
break; break;
} }


+ 2
- 0
source/main.c 查看文件

@@ -49,5 +49,7 @@ int main(int argc,
//hl_deinit(); //hl_deinit();
free(buffer); free(buffer);


//terminal_hl_deinit();

return 0; return 0;
} }

+ 14
- 5
source/terminal_hl.h 查看文件

@@ -6,6 +6,19 @@ typedef struct {
char * background_color; char * background_color;
} terminal_hl_t; } terminal_hl_t;


extern display_t * cterm;

extern void cterm_render_callback(const char * const string,
const int length,
void * const attributes);

extern int terminal_hl_init(void);

display_t * cterm = &(display_t) {
.key = "cterm",
.callback = cterm_render_callback
};

void cterm_render_callback(const char * const string, void cterm_render_callback(const char * const string,
const int length, const int length,
void * const attributes) { void * const attributes) {
@@ -29,10 +42,6 @@ void cterm_render_callback(const char * const string,
fputs(TERMINAL_RESET, stdout); fputs(TERMINAL_RESET, stdout);
} }


display_t * cterm = &(display_t) {
.key = "cterm",
.callback = cterm_render_callback
};


void fun(const char * const attribute, void fun(const char * const attribute,
const char * const color, const char * const color,
@@ -46,7 +55,7 @@ void fun(const char * const attribute,
(*group)->attributes = (void*)t; (*group)->attributes = (void*)t;
} }


int terminal_hl_init(void){
int terminal_hl_init(void) {
hl_init(); hl_init();
new_display_mode(cterm); new_display_mode(cterm);
// //


Loading…
取消
儲存