MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at type-hints-typescript 102 lines 2.0 kB view raw
1#ifndef HIGHLIGHT_H 2#define HIGHLIGHT_H 3 4#include <stddef.h> 5#include <stdbool.h> 6 7typedef enum { 8 HL_STATE_NORMAL, 9 HL_STATE_STRING_SINGLE, 10 HL_STATE_STRING_DOUBLE, 11 HL_STATE_TEMPLATE, 12 HL_STATE_TEMPLATE_EXPR, 13 HL_STATE_BLOCK_COMMENT, 14} hl_mode_t; 15 16typedef struct { 17 hl_mode_t mode; 18 int template_depth; 19} highlight_state; 20 21#define HL_STATE_INIT ((highlight_state){ .mode = HL_STATE_NORMAL, .template_depth = 0 }) 22 23typedef enum { 24 HL_NONE, 25 HL_KEYWORD, 26 HL_KEYWORD_ITALIC, 27 HL_KEYWORD_DELETE, 28 HL_KEYWORD_EXTENDS, 29 HL_TYPE, 30 HL_TYPE_STRING, 31 HL_TYPE_BOOLEAN, 32 HL_LITERAL_NULL, 33 HL_STRING, 34 HL_STRING_DELIMITER, 35 HL_STRING_ESCAPE, 36 HL_STRING_KEY, 37 HL_STRING_TEMPLATE, 38 HL_REGEX, 39 HL_REGEX_ESCAPE, 40 HL_REGEX_DELIMITER, 41 HL_REGEX_CDATA, 42 HL_BOOLEAN, 43 HL_NUMBER, 44 HL_NUMBER_PREFIX, 45 HL_COMMENT, 46 HL_FUNCTION_NAME, 47 HL_CLASS_NAME, 48 HL_PARENT_CLASS, 49 HL_FUNCTION, 50 HL_ARGUMENT, 51 HL_PROPERTY, 52 HL_OPERATOR, 53 HL_OPTIONAL_CHAIN, 54 HL_BRACKET, 55 HL_SEMICOLON, 56} hl_token_class; 57 58typedef struct { 59 size_t off; 60 size_t len; 61 hl_token_class cls; 62} hl_span; 63 64typedef enum { 65 HL_CTX_NONE, 66 HL_CTX_AFTER_FUNCTION, 67 HL_CTX_AFTER_CLASS, 68 HL_CTX_AFTER_EXTENDS, 69} hl_context; 70 71typedef struct { 72 const char *input; 73 size_t input_len; 74 size_t pos; 75 highlight_state state; 76 hl_context ctx; 77} hl_iter; 78 79static inline highlight_state hl_iter_state(const hl_iter *it) { return it->state; } 80 81void hl_iter_init(hl_iter *it, const char *input, size_t input_len, const highlight_state *state); 82bool hl_iter_next(hl_iter *it, hl_span *out); 83 84int ant_highlight( 85 const char *input, size_t input_len, 86 char *out, size_t out_size 87); 88 89int ant_highlight_stateful( 90 const char *input, size_t input_len, 91 char *out, size_t out_size, 92 highlight_state *state 93); 94 95int highlight_js_line_clipped( 96 const char *line, size_t line_len, 97 size_t max_cols, 98 char *out, size_t out_size, 99 highlight_state *state 100); 101 102#endif