converted portion of the HTML doc generator to string append instead of fprintf
parent
8fdff026af
commit
a80e99d575
147
4coder_API.html
147
4coder_API.html
File diff suppressed because one or more lines are too long
514
4coder_string.h
514
4coder_string.h
|
@ -47,347 +47,201 @@ typedef struct Offset_String{
|
|||
#if !defined(FCODER_STRING_H)
|
||||
#define FCODER_STRING_H
|
||||
|
||||
FSTRING_INLINE fstr_bool char_is_slash(char c);
|
||||
FSTRING_INLINE char char_to_upper(char c);
|
||||
FSTRING_INLINE char char_to_lower(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_whitespace(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_alpha_numeric(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_alpha_numeric_true(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_alpha(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_alpha_true(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_hex(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_numeric(char c);
|
||||
FSTRING_INLINE String string_zero(void);
|
||||
FSTRING_INLINE String make_string_cap(void *str, int32_t size, int32_t mem_size);
|
||||
FSTRING_INLINE String make_string(void *str, int32_t size);
|
||||
FSTRING_INLINE fstr_bool char_is_slash(char c);
|
||||
FSTRING_INLINE char char_to_upper(char c);
|
||||
FSTRING_INLINE char char_to_lower(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_whitespace(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_alpha_numeric(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_alpha_numeric_true(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_alpha(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_alpha_true(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_hex(char c);
|
||||
FSTRING_INLINE fstr_bool char_is_numeric(char c);
|
||||
FSTRING_INLINE String string_zero(void);
|
||||
FSTRING_INLINE String make_string_cap(void *str, int32_t size, int32_t mem_size);
|
||||
FSTRING_INLINE String make_string(void *str, int32_t size);
|
||||
#ifndef make_lit_string
|
||||
# define make_lit_string(s) (make_string_cap((char*)(s), sizeof(s)-1, sizeof(s)))
|
||||
# define make_lit_string(s) (make_string_cap((char*)(s), sizeof(s)-1, sizeof(s)))
|
||||
#endif
|
||||
#ifndef make_fixed_width_string
|
||||
# define make_fixed_width_string(s) (make_string_cap((char*)(s), 0, sizeof(s)))
|
||||
# define make_fixed_width_string(s) (make_string_cap((char*)(s), 0, sizeof(s)))
|
||||
#endif
|
||||
#ifndef expand_str
|
||||
# define expand_str(s) ((s).str), ((s).size)
|
||||
#endif
|
||||
FSTRING_LINK int32_t str_size(char *str);
|
||||
FSTRING_INLINE String make_string_slowly(void *str);
|
||||
FSTRING_INLINE String substr_tail(String str, int32_t start);
|
||||
FSTRING_INLINE String substr(String str, int32_t start, int32_t size);
|
||||
FSTRING_LINK String skip_whitespace(String str);
|
||||
FSTRING_LINK String chop_whitespace(String str);
|
||||
FSTRING_LINK String skip_chop_whitespace(String str);
|
||||
FSTRING_INLINE String tailstr(String str);
|
||||
FSTRING_LINK fstr_bool match_cc(char *a, char *b);
|
||||
FSTRING_LINK fstr_bool match_sc(String a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_cs(char *a, String b);
|
||||
FSTRING_LINK fstr_bool match_ss(String a, String b);
|
||||
FSTRING_LINK fstr_bool match_part_ccl(char *a, char *b, int32_t *len);
|
||||
FSTRING_LINK fstr_bool match_part_scl(String a, char *b, int32_t *len);
|
||||
FSTRING_INLINE fstr_bool match_part_cc(char *a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_part_sc(String a, char *b);
|
||||
FSTRING_LINK fstr_bool match_part_cs(char *a, String b);
|
||||
FSTRING_LINK fstr_bool match_part_ss(String a, String b);
|
||||
FSTRING_LINK fstr_bool match_insensitive_cc(char *a, char *b);
|
||||
FSTRING_LINK fstr_bool match_insensitive_sc(String a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_insensitive_cs(char *a, String b);
|
||||
FSTRING_LINK fstr_bool match_insensitive_ss(String a, String b);
|
||||
FSTRING_LINK fstr_bool match_part_insensitive_ccl(char *a, char *b, int32_t *len);
|
||||
FSTRING_LINK fstr_bool match_part_insensitive_scl(String a, char *b, int32_t *len);
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive_cc(char *a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive_sc(String a, char *b);
|
||||
FSTRING_LINK fstr_bool match_part_insensitive_cs(char *a, String b);
|
||||
FSTRING_LINK fstr_bool match_part_insensitive_ss(String a, String b);
|
||||
FSTRING_LINK int32_t compare_cc(char *a, char *b);
|
||||
FSTRING_LINK int32_t compare_sc(String a, char *b);
|
||||
FSTRING_INLINE int32_t compare_cs(char *a, String b);
|
||||
FSTRING_LINK int32_t compare_ss(String a, String b);
|
||||
FSTRING_LINK int32_t find_c_char(char *str, int32_t start, char character);
|
||||
FSTRING_LINK int32_t find_s_char(String str, int32_t start, char character);
|
||||
FSTRING_LINK int32_t rfind_s_char(String str, int32_t start, char character);
|
||||
FSTRING_LINK int32_t find_c_chars(char *str, int32_t start, char *characters);
|
||||
FSTRING_LINK int32_t find_s_chars(String str, int32_t start, char *characters);
|
||||
FSTRING_LINK int32_t find_substr_c(char *str, int32_t start, String seek);
|
||||
FSTRING_LINK int32_t find_substr_s(String str, int32_t start, String seek);
|
||||
FSTRING_LINK int32_t rfind_substr_s(String str, int32_t start, String seek);
|
||||
FSTRING_LINK int32_t find_substr_insensitive_c(char *str, int32_t start, String seek);
|
||||
FSTRING_LINK int32_t find_substr_insensitive_s(String str, int32_t start, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr_c(char *s, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr_s(String s, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr_insensitive_c(char *s, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr_insensitive_s(String s, String seek);
|
||||
FSTRING_LINK int32_t copy_fast_unsafe_cc(char *dest, char *src);
|
||||
FSTRING_LINK int32_t copy_fast_unsafe_cs(char *dest, String src);
|
||||
FSTRING_LINK fstr_bool copy_checked_ss(String *dest, String src);
|
||||
FSTRING_LINK fstr_bool copy_partial_sc(String *dest, char *src);
|
||||
FSTRING_LINK fstr_bool copy_partial_ss(String *dest, String src);
|
||||
FSTRING_INLINE int32_t copy_cc(char *dest, char *src);
|
||||
FSTRING_INLINE void copy_ss(String *dest, String src);
|
||||
FSTRING_INLINE void copy_sc(String *dest, char *src);
|
||||
FSTRING_LINK fstr_bool append_checked_ss(String *dest, String src);
|
||||
FSTRING_LINK fstr_bool append_partial_sc(String *dest, char *src);
|
||||
FSTRING_LINK fstr_bool append_partial_ss(String *dest, String src);
|
||||
FSTRING_LINK fstr_bool append_s_char(String *dest, char c);
|
||||
FSTRING_INLINE fstr_bool append_ss(String *dest, String src);
|
||||
FSTRING_INLINE fstr_bool append_sc(String *dest, char *src);
|
||||
FSTRING_LINK fstr_bool terminate_with_null(String *str);
|
||||
FSTRING_LINK fstr_bool append_padding(String *dest, char c, int32_t target_size);
|
||||
FSTRING_LINK void replace_char(String *str, char replace, char with);
|
||||
FSTRING_LINK void to_lower_cc(char *src, char *dst);
|
||||
FSTRING_LINK void to_lower_ss(String *dst, String src);
|
||||
FSTRING_LINK void to_lower_s(String *str);
|
||||
FSTRING_LINK void to_upper_cc(char *src, char *dst);
|
||||
FSTRING_LINK void to_upper_ss(String *dst, String src);
|
||||
FSTRING_LINK void to_upper_s(String *str);
|
||||
FSTRING_LINK void to_camel_cc(char *src, char *dst);
|
||||
FSTRING_LINK int32_t int_to_str_size(int32_t x);
|
||||
FSTRING_LINK fstr_bool int_to_str(String *dest, int32_t x);
|
||||
FSTRING_LINK fstr_bool append_int_to_str(String *dest, int32_t x);
|
||||
FSTRING_LINK int32_t u64_to_str_size(uint64_t x);
|
||||
FSTRING_LINK fstr_bool u64_to_str(String *dest, uint64_t x);
|
||||
FSTRING_LINK fstr_bool append_u64_to_str(String *dest, uint64_t x);
|
||||
FSTRING_LINK int32_t float_to_str_size(float x);
|
||||
FSTRING_LINK fstr_bool append_float_to_str(String *dest, float x);
|
||||
FSTRING_LINK fstr_bool float_to_str(String *dest, float x);
|
||||
FSTRING_LINK int32_t str_is_int_c(char *str);
|
||||
FSTRING_LINK fstr_bool str_is_int_s(String str);
|
||||
FSTRING_LINK int32_t str_to_int_c(char *str);
|
||||
FSTRING_LINK int32_t str_to_int_s(String str);
|
||||
FSTRING_LINK int32_t hexchar_to_int(char c);
|
||||
FSTRING_LINK char int_to_hexchar(int32_t x);
|
||||
FSTRING_LINK uint32_t hexstr_to_int(String str);
|
||||
FSTRING_LINK fstr_bool color_to_hexstr(String *s, uint32_t color);
|
||||
FSTRING_LINK fstr_bool hexstr_to_color(String s, uint32_t *out);
|
||||
FSTRING_LINK int32_t reverse_seek_slash_pos(String str, int32_t pos);
|
||||
FSTRING_INLINE int32_t reverse_seek_slash(String str);
|
||||
FSTRING_INLINE String front_of_directory(String dir);
|
||||
FSTRING_INLINE String path_of_directory(String dir);
|
||||
FSTRING_LINK fstr_bool set_last_folder_sc(String *dir, char *folder_name, char slash);
|
||||
FSTRING_LINK fstr_bool set_last_folder_ss(String *dir, String folder_name, char slash);
|
||||
FSTRING_LINK String file_extension(String str);
|
||||
FSTRING_LINK fstr_bool remove_extension(String *str);
|
||||
FSTRING_LINK fstr_bool remove_last_folder(String *str);
|
||||
FSTRING_LINK fstr_bool string_set_match_table(void *str_set, int32_t item_size, int32_t count, String str, int32_t *match_index);
|
||||
FSTRING_LINK fstr_bool string_set_match(String *str_set, int32_t count, String str, int32_t *match_index);
|
||||
|
||||
#if !defined(FSTRING_C)
|
||||
|
||||
// NOTE(allen): This section is here to enable nicer names
|
||||
// for C++ users who can have overloaded functions. None of
|
||||
// these functions add new features.
|
||||
FSTRING_INLINE String make_string(void *str, int32_t size, int32_t mem_size);
|
||||
FSTRING_INLINE String substr(String str, int32_t start);
|
||||
FSTRING_INLINE fstr_bool match(char *a, char *b);
|
||||
FSTRING_INLINE fstr_bool match(String a, char *b);
|
||||
FSTRING_INLINE fstr_bool match(char *a, String b);
|
||||
FSTRING_INLINE fstr_bool match(String a, String b);
|
||||
FSTRING_INLINE fstr_bool match_part(char *a, char *b, int32_t *len);
|
||||
FSTRING_INLINE fstr_bool match_part(String a, char *b, int32_t *len);
|
||||
FSTRING_INLINE fstr_bool match_part(char *a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_part(String a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_part(char *a, String b);
|
||||
FSTRING_INLINE fstr_bool match_part(String a, String b);
|
||||
FSTRING_INLINE fstr_bool match_insensitive(char *a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_insensitive(String a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_insensitive(char *a, String b);
|
||||
FSTRING_INLINE fstr_bool match_insensitive(String a, String b);
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(char *a, char *b, int32_t *len);
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(String a, char *b, int32_t *len);
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(char *a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(String a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(char *a, String b);
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(String a, String b);
|
||||
FSTRING_INLINE int32_t compare(char *a, char *b);
|
||||
FSTRING_INLINE int32_t compare(String a, char *b);
|
||||
FSTRING_INLINE int32_t compare(char *a, String b);
|
||||
FSTRING_INLINE int32_t compare(String a, String b);
|
||||
FSTRING_INLINE int32_t find(char *str, int32_t start, char character);
|
||||
FSTRING_INLINE int32_t find(String str, int32_t start, char character);
|
||||
FSTRING_INLINE int32_t rfind(String str, int32_t start, char character);
|
||||
FSTRING_INLINE int32_t find(char *str, int32_t start, char *characters);
|
||||
FSTRING_INLINE int32_t find(String str, int32_t start, char *characters);
|
||||
FSTRING_INLINE int32_t find_substr(char *str, int32_t start, String seek);
|
||||
FSTRING_INLINE int32_t find_substr(String str, int32_t start, String seek);
|
||||
FSTRING_INLINE int32_t rfind_substr(String str, int32_t start, String seek);
|
||||
FSTRING_INLINE int32_t find_substr_insensitive(char *str, int32_t start, String seek);
|
||||
FSTRING_INLINE int32_t find_substr_insensitive(String str, int32_t start, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr(char *s, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr(String s, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr_insensitive(char *s, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr_insensitive(String s, String seek);
|
||||
FSTRING_INLINE int32_t copy_fast_unsafe(char *dest, char *src);
|
||||
FSTRING_INLINE int32_t copy_fast_unsafe(char *dest, String src);
|
||||
FSTRING_INLINE fstr_bool copy_checked(String *dest, String src);
|
||||
FSTRING_INLINE fstr_bool copy_partial(String *dest, char *src);
|
||||
FSTRING_INLINE fstr_bool copy_partial(String *dest, String src);
|
||||
FSTRING_INLINE int32_t copy(char *dest, char *src);
|
||||
FSTRING_INLINE void copy(String *dest, String src);
|
||||
FSTRING_INLINE void copy(String *dest, char *src);
|
||||
FSTRING_INLINE fstr_bool append_checked(String *dest, String src);
|
||||
FSTRING_INLINE fstr_bool append_partial(String *dest, char *src);
|
||||
FSTRING_INLINE fstr_bool append_partial(String *dest, String src);
|
||||
FSTRING_INLINE fstr_bool append(String *dest, char c);
|
||||
FSTRING_INLINE fstr_bool append(String *dest, String src);
|
||||
FSTRING_INLINE fstr_bool append(String *dest, char *src);
|
||||
FSTRING_INLINE void to_lower(char *src, char *dst);
|
||||
FSTRING_INLINE void to_lower(String *dst, String src);
|
||||
FSTRING_INLINE void to_lower(String *str);
|
||||
FSTRING_INLINE void to_upper(char *src, char *dst);
|
||||
FSTRING_INLINE void to_upper(String *dst, String src);
|
||||
FSTRING_INLINE void to_upper(String *str);
|
||||
FSTRING_INLINE void to_camel(char *src, char *dst);
|
||||
FSTRING_INLINE int32_t str_is_int(char *str);
|
||||
FSTRING_INLINE fstr_bool str_is_int(String str);
|
||||
FSTRING_INLINE int32_t str_to_int(char *str);
|
||||
FSTRING_INLINE int32_t str_to_int(String str);
|
||||
FSTRING_INLINE int32_t reverse_seek_slash(String str, int32_t pos);
|
||||
FSTRING_INLINE fstr_bool set_last_folder(String *dir, char *folder_name, char slash);
|
||||
FSTRING_INLINE fstr_bool set_last_folder(String *dir, String folder_name, char slash);
|
||||
FSTRING_INLINE fstr_bool string_set_match(void *str_set, int32_t item_size, int32_t count, String str, int32_t *match_index);
|
||||
|
||||
# define expand_str(s) ((s).str), ((s).size)
|
||||
#endif
|
||||
FSTRING_LINK int32_t str_size(char *str);
|
||||
FSTRING_INLINE String make_string_slowly(void *str);
|
||||
FSTRING_INLINE String substr_tail(String str, int32_t start);
|
||||
FSTRING_INLINE String substr(String str, int32_t start, int32_t size);
|
||||
FSTRING_LINK String skip_whitespace(String str);
|
||||
FSTRING_LINK String chop_whitespace(String str);
|
||||
FSTRING_LINK String skip_chop_whitespace(String str);
|
||||
FSTRING_INLINE String tailstr(String str);
|
||||
FSTRING_LINK fstr_bool match_cc(char *a, char *b);
|
||||
FSTRING_LINK fstr_bool match_sc(String a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_cs(char *a, String b);
|
||||
FSTRING_LINK fstr_bool match_ss(String a, String b);
|
||||
FSTRING_LINK fstr_bool match_part_ccl(char *a, char *b, int32_t *len);
|
||||
FSTRING_LINK fstr_bool match_part_scl(String a, char *b, int32_t *len);
|
||||
FSTRING_INLINE fstr_bool match_part_cc(char *a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_part_sc(String a, char *b);
|
||||
FSTRING_LINK fstr_bool match_part_cs(char *a, String b);
|
||||
FSTRING_LINK fstr_bool match_part_ss(String a, String b);
|
||||
FSTRING_LINK fstr_bool match_insensitive_cc(char *a, char *b);
|
||||
FSTRING_LINK fstr_bool match_insensitive_sc(String a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_insensitive_cs(char *a, String b);
|
||||
FSTRING_LINK fstr_bool match_insensitive_ss(String a, String b);
|
||||
FSTRING_LINK fstr_bool match_part_insensitive_ccl(char *a, char *b, int32_t *len);
|
||||
FSTRING_LINK fstr_bool match_part_insensitive_scl(String a, char *b, int32_t *len);
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive_cc(char *a, char *b);
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive_sc(String a, char *b);
|
||||
FSTRING_LINK fstr_bool match_part_insensitive_cs(char *a, String b);
|
||||
FSTRING_LINK fstr_bool match_part_insensitive_ss(String a, String b);
|
||||
FSTRING_LINK int32_t compare_cc(char *a, char *b);
|
||||
FSTRING_LINK int32_t compare_sc(String a, char *b);
|
||||
FSTRING_INLINE int32_t compare_cs(char *a, String b);
|
||||
FSTRING_LINK int32_t compare_ss(String a, String b);
|
||||
FSTRING_LINK int32_t find_c_char(char *str, int32_t start, char character);
|
||||
FSTRING_LINK int32_t find_s_char(String str, int32_t start, char character);
|
||||
FSTRING_LINK int32_t rfind_s_char(String str, int32_t start, char character);
|
||||
FSTRING_LINK int32_t find_c_chars(char *str, int32_t start, char *characters);
|
||||
FSTRING_LINK int32_t find_s_chars(String str, int32_t start, char *characters);
|
||||
FSTRING_LINK int32_t find_substr_c(char *str, int32_t start, String seek);
|
||||
FSTRING_LINK int32_t find_substr_s(String str, int32_t start, String seek);
|
||||
FSTRING_LINK int32_t rfind_substr_s(String str, int32_t start, String seek);
|
||||
FSTRING_LINK int32_t find_substr_insensitive_c(char *str, int32_t start, String seek);
|
||||
FSTRING_LINK int32_t find_substr_insensitive_s(String str, int32_t start, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr_c(char *s, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr_s(String s, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr_insensitive_c(char *s, String seek);
|
||||
FSTRING_INLINE fstr_bool has_substr_insensitive_s(String s, String seek);
|
||||
FSTRING_LINK int32_t copy_fast_unsafe_cc(char *dest, char *src);
|
||||
FSTRING_LINK int32_t copy_fast_unsafe_cs(char *dest, String src);
|
||||
FSTRING_LINK fstr_bool copy_checked_ss(String *dest, String src);
|
||||
FSTRING_LINK fstr_bool copy_partial_sc(String *dest, char *src);
|
||||
FSTRING_LINK fstr_bool copy_partial_ss(String *dest, String src);
|
||||
FSTRING_INLINE int32_t copy_cc(char *dest, char *src);
|
||||
FSTRING_INLINE void copy_ss(String *dest, String src);
|
||||
FSTRING_INLINE void copy_sc(String *dest, char *src);
|
||||
FSTRING_LINK fstr_bool append_checked_ss(String *dest, String src);
|
||||
FSTRING_LINK fstr_bool append_partial_sc(String *dest, char *src);
|
||||
FSTRING_LINK fstr_bool append_partial_ss(String *dest, String src);
|
||||
FSTRING_LINK fstr_bool append_s_char(String *dest, char c);
|
||||
FSTRING_INLINE fstr_bool append_ss(String *dest, String src);
|
||||
FSTRING_INLINE fstr_bool append_sc(String *dest, char *src);
|
||||
FSTRING_LINK fstr_bool terminate_with_null(String *str);
|
||||
FSTRING_LINK fstr_bool append_padding(String *dest, char c, int32_t target_size);
|
||||
FSTRING_LINK void replace_char(String *str, char replace, char with);
|
||||
FSTRING_LINK void to_lower_cc(char *src, char *dst);
|
||||
FSTRING_LINK void to_lower_ss(String *dst, String src);
|
||||
FSTRING_LINK void to_lower_s(String *str);
|
||||
FSTRING_LINK void to_upper_cc(char *src, char *dst);
|
||||
FSTRING_LINK void to_upper_ss(String *dst, String src);
|
||||
FSTRING_LINK void to_upper_s(String *str);
|
||||
FSTRING_LINK void to_camel_cc(char *src, char *dst);
|
||||
FSTRING_LINK int32_t int_to_str_size(int32_t x);
|
||||
FSTRING_LINK fstr_bool int_to_str(String *dest, int32_t x);
|
||||
FSTRING_LINK fstr_bool append_int_to_str(String *dest, int32_t x);
|
||||
FSTRING_LINK int32_t u64_to_str_size(uint64_t x);
|
||||
FSTRING_LINK fstr_bool u64_to_str(String *dest, uint64_t x);
|
||||
FSTRING_LINK fstr_bool append_u64_to_str(String *dest, uint64_t x);
|
||||
FSTRING_LINK int32_t float_to_str_size(float x);
|
||||
FSTRING_LINK fstr_bool append_float_to_str(String *dest, float x);
|
||||
FSTRING_LINK fstr_bool float_to_str(String *dest, float x);
|
||||
FSTRING_LINK int32_t str_is_int_c(char *str);
|
||||
FSTRING_LINK fstr_bool str_is_int_s(String str);
|
||||
FSTRING_LINK int32_t str_to_int_c(char *str);
|
||||
FSTRING_LINK int32_t str_to_int_s(String str);
|
||||
FSTRING_LINK int32_t hexchar_to_int(char c);
|
||||
FSTRING_LINK char int_to_hexchar(int32_t x);
|
||||
FSTRING_LINK uint32_t hexstr_to_int(String str);
|
||||
FSTRING_LINK fstr_bool color_to_hexstr(String *s, uint32_t color);
|
||||
FSTRING_LINK fstr_bool hexstr_to_color(String s, uint32_t *out);
|
||||
FSTRING_LINK int32_t reverse_seek_slash_pos(String str, int32_t pos);
|
||||
FSTRING_INLINE int32_t reverse_seek_slash(String str);
|
||||
FSTRING_INLINE String front_of_directory(String dir);
|
||||
FSTRING_INLINE String path_of_directory(String dir);
|
||||
FSTRING_LINK fstr_bool set_last_folder_sc(String *dir, char *folder_name, char slash);
|
||||
FSTRING_LINK fstr_bool set_last_folder_ss(String *dir, String folder_name, char slash);
|
||||
FSTRING_LINK String file_extension(String str);
|
||||
FSTRING_LINK fstr_bool remove_extension(String *str);
|
||||
FSTRING_LINK fstr_bool remove_last_folder(String *str);
|
||||
FSTRING_LINK fstr_bool string_set_match_table(void *str_set, int32_t item_size, int32_t count, String str, int32_t *match_index);
|
||||
FSTRING_LINK fstr_bool string_set_match(String *str_set, int32_t count, String str, int32_t *match_index);
|
||||
|
||||
#endif
|
||||
|
||||
#if !defined(FSTRING_C) && !defined(FSTRING_GUARD)
|
||||
|
||||
FSTRING_INLINE String
|
||||
make_string(void *str, int32_t size, int32_t mem_size){return(make_string_cap(str,size,mem_size));}
|
||||
FSTRING_INLINE String
|
||||
substr(String str, int32_t start){return(substr_tail(str,start));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match(char *a, char *b){return(match_cc(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match(String a, char *b){return(match_sc(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match(char *a, String b){return(match_cs(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match(String a, String b){return(match_ss(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part(char *a, char *b, int32_t *len){return(match_part_ccl(a,b,len));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part(String a, char *b, int32_t *len){return(match_part_scl(a,b,len));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part(char *a, char *b){return(match_part_cc(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part(String a, char *b){return(match_part_sc(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part(char *a, String b){return(match_part_cs(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part(String a, String b){return(match_part_ss(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_insensitive(char *a, char *b){return(match_insensitive_cc(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_insensitive(String a, char *b){return(match_insensitive_sc(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_insensitive(char *a, String b){return(match_insensitive_cs(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_insensitive(String a, String b){return(match_insensitive_ss(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part_insensitive(char *a, char *b, int32_t *len){return(match_part_insensitive_ccl(a,b,len));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part_insensitive(String a, char *b, int32_t *len){return(match_part_insensitive_scl(a,b,len));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part_insensitive(char *a, char *b){return(match_part_insensitive_cc(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part_insensitive(String a, char *b){return(match_part_insensitive_sc(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part_insensitive(char *a, String b){return(match_part_insensitive_cs(a,b));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
match_part_insensitive(String a, String b){return(match_part_insensitive_ss(a,b));}
|
||||
FSTRING_INLINE int32_t
|
||||
compare(char *a, char *b){return(compare_cc(a,b));}
|
||||
FSTRING_INLINE int32_t
|
||||
compare(String a, char *b){return(compare_sc(a,b));}
|
||||
FSTRING_INLINE int32_t
|
||||
compare(char *a, String b){return(compare_cs(a,b));}
|
||||
FSTRING_INLINE int32_t
|
||||
compare(String a, String b){return(compare_ss(a,b));}
|
||||
FSTRING_INLINE int32_t
|
||||
find(char *str, int32_t start, char character){return(find_c_char(str,start,character));}
|
||||
FSTRING_INLINE int32_t
|
||||
find(String str, int32_t start, char character){return(find_s_char(str,start,character));}
|
||||
FSTRING_INLINE int32_t
|
||||
rfind(String str, int32_t start, char character){return(rfind_s_char(str,start,character));}
|
||||
FSTRING_INLINE int32_t
|
||||
find(char *str, int32_t start, char *characters){return(find_c_chars(str,start,characters));}
|
||||
FSTRING_INLINE int32_t
|
||||
find(String str, int32_t start, char *characters){return(find_s_chars(str,start,characters));}
|
||||
FSTRING_INLINE int32_t
|
||||
find_substr(char *str, int32_t start, String seek){return(find_substr_c(str,start,seek));}
|
||||
FSTRING_INLINE int32_t
|
||||
find_substr(String str, int32_t start, String seek){return(find_substr_s(str,start,seek));}
|
||||
FSTRING_INLINE int32_t
|
||||
rfind_substr(String str, int32_t start, String seek){return(rfind_substr_s(str,start,seek));}
|
||||
FSTRING_INLINE int32_t
|
||||
find_substr_insensitive(char *str, int32_t start, String seek){return(find_substr_insensitive_c(str,start,seek));}
|
||||
FSTRING_INLINE int32_t
|
||||
find_substr_insensitive(String str, int32_t start, String seek){return(find_substr_insensitive_s(str,start,seek));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
has_substr(char *s, String seek){return(has_substr_c(s,seek));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
has_substr(String s, String seek){return(has_substr_s(s,seek));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
has_substr_insensitive(char *s, String seek){return(has_substr_insensitive_c(s,seek));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
has_substr_insensitive(String s, String seek){return(has_substr_insensitive_s(s,seek));}
|
||||
FSTRING_INLINE int32_t
|
||||
copy_fast_unsafe(char *dest, char *src){return(copy_fast_unsafe_cc(dest,src));}
|
||||
FSTRING_INLINE int32_t
|
||||
copy_fast_unsafe(char *dest, String src){return(copy_fast_unsafe_cs(dest,src));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
copy_checked(String *dest, String src){return(copy_checked_ss(dest,src));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
copy_partial(String *dest, char *src){return(copy_partial_sc(dest,src));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
copy_partial(String *dest, String src){return(copy_partial_ss(dest,src));}
|
||||
FSTRING_INLINE int32_t
|
||||
copy(char *dest, char *src){return(copy_cc(dest,src));}
|
||||
FSTRING_INLINE void
|
||||
copy(String *dest, String src){(copy_ss(dest,src));}
|
||||
FSTRING_INLINE void
|
||||
copy(String *dest, char *src){(copy_sc(dest,src));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
append_checked(String *dest, String src){return(append_checked_ss(dest,src));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
append_partial(String *dest, char *src){return(append_partial_sc(dest,src));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
append_partial(String *dest, String src){return(append_partial_ss(dest,src));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
append(String *dest, char c){return(append_s_char(dest,c));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
append(String *dest, String src){return(append_ss(dest,src));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
append(String *dest, char *src){return(append_sc(dest,src));}
|
||||
FSTRING_INLINE void
|
||||
to_lower(char *src, char *dst){(to_lower_cc(src,dst));}
|
||||
FSTRING_INLINE void
|
||||
to_lower(String *dst, String src){(to_lower_ss(dst,src));}
|
||||
FSTRING_INLINE void
|
||||
to_lower(String *str){(to_lower_s(str));}
|
||||
FSTRING_INLINE void
|
||||
to_upper(char *src, char *dst){(to_upper_cc(src,dst));}
|
||||
FSTRING_INLINE void
|
||||
to_upper(String *dst, String src){(to_upper_ss(dst,src));}
|
||||
FSTRING_INLINE void
|
||||
to_upper(String *str){(to_upper_s(str));}
|
||||
FSTRING_INLINE void
|
||||
to_camel(char *src, char *dst){(to_camel_cc(src,dst));}
|
||||
FSTRING_INLINE int32_t
|
||||
str_is_int(char *str){return(str_is_int_c(str));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
str_is_int(String str){return(str_is_int_s(str));}
|
||||
FSTRING_INLINE int32_t
|
||||
str_to_int(char *str){return(str_to_int_c(str));}
|
||||
FSTRING_INLINE int32_t
|
||||
str_to_int(String str){return(str_to_int_s(str));}
|
||||
FSTRING_INLINE int32_t
|
||||
reverse_seek_slash(String str, int32_t pos){return(reverse_seek_slash_pos(str,pos));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
set_last_folder(String *dir, char *folder_name, char slash){return(set_last_folder_sc(dir,folder_name,slash));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
set_last_folder(String *dir, String folder_name, char slash){return(set_last_folder_ss(dir,folder_name,slash));}
|
||||
FSTRING_INLINE fstr_bool
|
||||
string_set_match(void *str_set, int32_t item_size, int32_t count, String str, int32_t *match_index){return(string_set_match_table(str_set,item_size,count,str,match_index));}
|
||||
FSTRING_INLINE String make_string(void *str, int32_t size, int32_t mem_size){return(make_string_cap(str,size,mem_size));}
|
||||
FSTRING_INLINE String substr(String str, int32_t start){return(substr_tail(str,start));}
|
||||
FSTRING_INLINE fstr_bool match(char *a, char *b){return(match_cc(a,b));}
|
||||
FSTRING_INLINE fstr_bool match(String a, char *b){return(match_sc(a,b));}
|
||||
FSTRING_INLINE fstr_bool match(char *a, String b){return(match_cs(a,b));}
|
||||
FSTRING_INLINE fstr_bool match(String a, String b){return(match_ss(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_part(char *a, char *b, int32_t *len){return(match_part_ccl(a,b,len));}
|
||||
FSTRING_INLINE fstr_bool match_part(String a, char *b, int32_t *len){return(match_part_scl(a,b,len));}
|
||||
FSTRING_INLINE fstr_bool match_part(char *a, char *b){return(match_part_cc(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_part(String a, char *b){return(match_part_sc(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_part(char *a, String b){return(match_part_cs(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_part(String a, String b){return(match_part_ss(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_insensitive(char *a, char *b){return(match_insensitive_cc(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_insensitive(String a, char *b){return(match_insensitive_sc(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_insensitive(char *a, String b){return(match_insensitive_cs(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_insensitive(String a, String b){return(match_insensitive_ss(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(char *a, char *b, int32_t *len){return(match_part_insensitive_ccl(a,b,len));}
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(String a, char *b, int32_t *len){return(match_part_insensitive_scl(a,b,len));}
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(char *a, char *b){return(match_part_insensitive_cc(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(String a, char *b){return(match_part_insensitive_sc(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(char *a, String b){return(match_part_insensitive_cs(a,b));}
|
||||
FSTRING_INLINE fstr_bool match_part_insensitive(String a, String b){return(match_part_insensitive_ss(a,b));}
|
||||
FSTRING_INLINE int32_t compare(char *a, char *b){return(compare_cc(a,b));}
|
||||
FSTRING_INLINE int32_t compare(String a, char *b){return(compare_sc(a,b));}
|
||||
FSTRING_INLINE int32_t compare(char *a, String b){return(compare_cs(a,b));}
|
||||
FSTRING_INLINE int32_t compare(String a, String b){return(compare_ss(a,b));}
|
||||
FSTRING_INLINE int32_t find(char *str, int32_t start, char character){return(find_c_char(str,start,character));}
|
||||
FSTRING_INLINE int32_t find(String str, int32_t start, char character){return(find_s_char(str,start,character));}
|
||||
FSTRING_INLINE int32_t rfind(String str, int32_t start, char character){return(rfind_s_char(str,start,character));}
|
||||
FSTRING_INLINE int32_t find(char *str, int32_t start, char *characters){return(find_c_chars(str,start,characters));}
|
||||
FSTRING_INLINE int32_t find(String str, int32_t start, char *characters){return(find_s_chars(str,start,characters));}
|
||||
FSTRING_INLINE int32_t find_substr(char *str, int32_t start, String seek){return(find_substr_c(str,start,seek));}
|
||||
FSTRING_INLINE int32_t find_substr(String str, int32_t start, String seek){return(find_substr_s(str,start,seek));}
|
||||
FSTRING_INLINE int32_t rfind_substr(String str, int32_t start, String seek){return(rfind_substr_s(str,start,seek));}
|
||||
FSTRING_INLINE int32_t find_substr_insensitive(char *str, int32_t start, String seek){return(find_substr_insensitive_c(str,start,seek));}
|
||||
FSTRING_INLINE int32_t find_substr_insensitive(String str, int32_t start, String seek){return(find_substr_insensitive_s(str,start,seek));}
|
||||
FSTRING_INLINE fstr_bool has_substr(char *s, String seek){return(has_substr_c(s,seek));}
|
||||
FSTRING_INLINE fstr_bool has_substr(String s, String seek){return(has_substr_s(s,seek));}
|
||||
FSTRING_INLINE fstr_bool has_substr_insensitive(char *s, String seek){return(has_substr_insensitive_c(s,seek));}
|
||||
FSTRING_INLINE fstr_bool has_substr_insensitive(String s, String seek){return(has_substr_insensitive_s(s,seek));}
|
||||
FSTRING_INLINE int32_t copy_fast_unsafe(char *dest, char *src){return(copy_fast_unsafe_cc(dest,src));}
|
||||
FSTRING_INLINE int32_t copy_fast_unsafe(char *dest, String src){return(copy_fast_unsafe_cs(dest,src));}
|
||||
FSTRING_INLINE fstr_bool copy_checked(String *dest, String src){return(copy_checked_ss(dest,src));}
|
||||
FSTRING_INLINE fstr_bool copy_partial(String *dest, char *src){return(copy_partial_sc(dest,src));}
|
||||
FSTRING_INLINE fstr_bool copy_partial(String *dest, String src){return(copy_partial_ss(dest,src));}
|
||||
FSTRING_INLINE int32_t copy(char *dest, char *src){return(copy_cc(dest,src));}
|
||||
FSTRING_INLINE void copy(String *dest, String src){(copy_ss(dest,src));}
|
||||
FSTRING_INLINE void copy(String *dest, char *src){(copy_sc(dest,src));}
|
||||
FSTRING_INLINE fstr_bool append_checked(String *dest, String src){return(append_checked_ss(dest,src));}
|
||||
FSTRING_INLINE fstr_bool append_partial(String *dest, char *src){return(append_partial_sc(dest,src));}
|
||||
FSTRING_INLINE fstr_bool append_partial(String *dest, String src){return(append_partial_ss(dest,src));}
|
||||
FSTRING_INLINE fstr_bool append(String *dest, char c){return(append_s_char(dest,c));}
|
||||
FSTRING_INLINE fstr_bool append(String *dest, String src){return(append_ss(dest,src));}
|
||||
FSTRING_INLINE fstr_bool append(String *dest, char *src){return(append_sc(dest,src));}
|
||||
FSTRING_INLINE void to_lower(char *src, char *dst){(to_lower_cc(src,dst));}
|
||||
FSTRING_INLINE void to_lower(String *dst, String src){(to_lower_ss(dst,src));}
|
||||
FSTRING_INLINE void to_lower(String *str){(to_lower_s(str));}
|
||||
FSTRING_INLINE void to_upper(char *src, char *dst){(to_upper_cc(src,dst));}
|
||||
FSTRING_INLINE void to_upper(String *dst, String src){(to_upper_ss(dst,src));}
|
||||
FSTRING_INLINE void to_upper(String *str){(to_upper_s(str));}
|
||||
FSTRING_INLINE void to_camel(char *src, char *dst){(to_camel_cc(src,dst));}
|
||||
FSTRING_INLINE int32_t str_is_int(char *str){return(str_is_int_c(str));}
|
||||
FSTRING_INLINE fstr_bool str_is_int(String str){return(str_is_int_s(str));}
|
||||
FSTRING_INLINE int32_t str_to_int(char *str){return(str_to_int_c(str));}
|
||||
FSTRING_INLINE int32_t str_to_int(String str){return(str_to_int_s(str));}
|
||||
FSTRING_INLINE int32_t reverse_seek_slash(String str, int32_t pos){return(reverse_seek_slash_pos(str,pos));}
|
||||
FSTRING_INLINE fstr_bool set_last_folder(String *dir, char *folder_name, char slash){return(set_last_folder_sc(dir,folder_name,slash));}
|
||||
FSTRING_INLINE fstr_bool set_last_folder(String *dir, String folder_name, char slash){return(set_last_folder_ss(dir,folder_name,slash));}
|
||||
FSTRING_INLINE fstr_bool string_set_match(void *str_set, int32_t item_size, int32_t count, String str, int32_t *match_index){return(string_set_match_table(str_set,item_size,count,str,match_index));}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
780
4ed_metagen.cpp
780
4ed_metagen.cpp
|
@ -406,7 +406,7 @@ typedef struct Item_Node{
|
|||
typedef struct Item_Set{
|
||||
Item_Node *items;
|
||||
int32_t count;
|
||||
} Item_Set;
|
||||
} Item_Set;
|
||||
|
||||
typedef struct Parse{
|
||||
String code;
|
||||
|
@ -722,7 +722,7 @@ doc_parse_last_parameter(String source, int32_t *pos){
|
|||
}
|
||||
*pos = p;
|
||||
|
||||
return(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1587,7 +1587,7 @@ compile_meta_unit(Partition *part, char **files, int32_t file_count,
|
|||
++index;
|
||||
}
|
||||
else{
|
||||
fprintf(stderr, "warning : invalid function signature\n");
|
||||
fprintf(stderr, "warning: invalid function signature\n");
|
||||
}
|
||||
}break;
|
||||
|
||||
|
@ -1877,28 +1877,26 @@ print_str(FILE *file, String str){
|
|||
}
|
||||
|
||||
static void
|
||||
print_function_body_code(FILE *file, int32_t *index, Cpp_Token **token_ptr, int32_t count, String *code,
|
||||
int32_t start){
|
||||
int32_t i = *index;
|
||||
Cpp_Token *token = *token_ptr;
|
||||
|
||||
String pstr = {0};
|
||||
print_function_body_code(String *out, Parse_Context *context, int32_t start){
|
||||
String pstr = {0}, lexeme = {0};
|
||||
Cpp_Token *token = 0;
|
||||
|
||||
int32_t do_print = 0;
|
||||
int32_t nest_level = 0;
|
||||
int32_t finish = false;
|
||||
int32_t do_whitespace_print = false;
|
||||
for (; i < count; ++i, ++token){
|
||||
for (; (token = get_token(context)) != 0; get_next_token(context)){
|
||||
if (do_whitespace_print){
|
||||
pstr = str_start_end(code->str, start, token->start);
|
||||
print_str(file, pstr);
|
||||
pstr = str_start_end(context->data, start, token->start);
|
||||
append_ss(out, pstr);
|
||||
}
|
||||
else{
|
||||
do_whitespace_print = true;
|
||||
}
|
||||
|
||||
int32_t do_print = true;
|
||||
do_print = true;
|
||||
if (token->type == CPP_TOKEN_COMMENT){
|
||||
String lexeme = make_string(code->str + token->start, token->size);
|
||||
lexeme = get_lexeme(*token, context->data);
|
||||
if (check_and_fix_docs(&lexeme)){
|
||||
do_print = false;
|
||||
}
|
||||
|
@ -1913,28 +1911,23 @@ print_function_body_code(FILE *file, int32_t *index, Cpp_Token **token_ptr, int3
|
|||
}
|
||||
}
|
||||
|
||||
if (i < count){
|
||||
if (do_print){
|
||||
pstr = make_string(code->str + token->start, token->size);
|
||||
print_str(file, pstr);
|
||||
}
|
||||
|
||||
start = token->start + token->size;
|
||||
if (do_print){
|
||||
pstr = get_lexeme(*token, context->data);
|
||||
append_ss(out, pstr);
|
||||
}
|
||||
|
||||
start = token->start + token->size;
|
||||
|
||||
if (finish){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
*index = i;
|
||||
*token_ptr = token;
|
||||
}
|
||||
|
||||
static void
|
||||
print_function_docs(FILE *file, Partition *part, String name, String doc_string){
|
||||
if (doc_string.size == 0){
|
||||
fprintf(file, "No documentation generated for this function, assume it is non-public.\n");
|
||||
fprintf(file, "No documentation generated for this function.\n");
|
||||
fprintf(stderr, "warning: no documentation string for %.*s\n", name.size, name.str);
|
||||
}
|
||||
|
||||
|
@ -2264,8 +2257,6 @@ generate_custom_headers(){
|
|||
append_s_char(&out, '\n');
|
||||
}
|
||||
|
||||
dump_file_out(context);
|
||||
|
||||
for (int32_t i = main_api_count; i < os_api_count; ++i){
|
||||
append_sc(&out, "typedef ");
|
||||
append_ss(&out, func_4ed_names.names[i].macro);
|
||||
|
@ -2281,8 +2272,6 @@ generate_custom_headers(){
|
|||
}
|
||||
|
||||
if (begin_file_out(&context, API_H, &out)){
|
||||
file = context.file;
|
||||
|
||||
for (int32_t i = 0; i < unit_custom.set.count; ++i){
|
||||
append_sc(&out, "#define ");
|
||||
append_ss(&out, func_4ed_names.names[i].macro);
|
||||
|
@ -2333,345 +2322,282 @@ generate_custom_headers(){
|
|||
|
||||
end_file_out(context);
|
||||
}
|
||||
else{
|
||||
// TODO(allen): warning
|
||||
}
|
||||
|
||||
// NOTE(allen): Documentation
|
||||
{
|
||||
// NOTE(allen): String Library
|
||||
if (begin_file_out(&context, STRING_H, &out)){
|
||||
file = context.file;
|
||||
|
||||
//
|
||||
// Output 4coder_string.h
|
||||
//
|
||||
Cpp_Token *token = 0;
|
||||
int32_t start = 0;
|
||||
|
||||
file = fopen(STRING_H, "wb");
|
||||
Parse parse = string_unit.parse[0];
|
||||
Parse_Context pcontext = setup_parse_context(parse);
|
||||
|
||||
{
|
||||
String *code = &string_unit.parse[0].code;
|
||||
Cpp_Token_Stack *token_stack = &string_unit.parse[0].tokens;
|
||||
|
||||
int32_t start = 0;
|
||||
|
||||
int32_t count = token_stack->count;
|
||||
Cpp_Token *tokens = token_stack->tokens;
|
||||
Cpp_Token *token = tokens;
|
||||
int32_t i = 0;
|
||||
|
||||
for (i = 0; i < count; ++i, ++token){
|
||||
if (token->type == CPP_TOKEN_IDENTIFIER &&
|
||||
!(token->flags & CPP_TFLAG_PP_BODY)){
|
||||
String lexeme = make_string(code->str + token->start, token->size);
|
||||
if (match_ss(lexeme, make_lit_string("FSTRING_BEGIN"))){
|
||||
start = token->start + token->size;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String pstr = {0};
|
||||
int32_t do_whitespace_print = true;
|
||||
|
||||
for(++i, ++token; i < count; ++i, ++token){
|
||||
if (do_whitespace_print){
|
||||
pstr = str_start_end(code->str, start, token->start);
|
||||
print_str(file, pstr);
|
||||
}
|
||||
else{
|
||||
do_whitespace_print = true;
|
||||
}
|
||||
|
||||
String lexeme = get_lexeme(*token, code->str);
|
||||
|
||||
int32_t do_print = true;
|
||||
if (match_ss(lexeme, make_lit_string("FSTRING_DECLS"))){
|
||||
fprintf(file, "#if !defined(FCODER_STRING_H)\n#define FCODER_STRING_H\n\n");
|
||||
|
||||
do_print = false;
|
||||
|
||||
#define RETURN_PADDING 16
|
||||
#define SIG_PADDING 30
|
||||
|
||||
for (int32_t j = 0; j < string_unit.set.count; ++j){
|
||||
char line_space[2048];
|
||||
String line = make_fixed_width_string(line_space);
|
||||
|
||||
Item_Node *item = string_unit.set.items + j;
|
||||
|
||||
if (item->t != Item_Macro){
|
||||
String marker = item->marker;
|
||||
String ret = item->ret;
|
||||
String name = item->name;
|
||||
String args = item->args;
|
||||
|
||||
append_ss(&line, marker);
|
||||
append_padding(&line, ' ', RETURN_PADDING);
|
||||
append_ss(&line, ret);
|
||||
append_padding(&line, ' ', SIG_PADDING);
|
||||
append_ss(&line, name);
|
||||
append_ss(&line, args);
|
||||
terminate_with_null(&line);
|
||||
|
||||
fprintf(file, "%s;\n", line.str);
|
||||
}
|
||||
else{
|
||||
String name = item->name;
|
||||
String args = item->args;
|
||||
String body = item->body;
|
||||
|
||||
append_ss(&line, make_lit_string("#ifndef "));
|
||||
append_padding(&line, ' ', 10);
|
||||
append_ss(&line, name);
|
||||
terminate_with_null(&line);
|
||||
fprintf(file, "%s\n", line.str);
|
||||
line.size = 0;
|
||||
|
||||
append_ss(&line, make_lit_string("# define "));
|
||||
append_padding(&line, ' ', 10);
|
||||
append_ss(&line, name);
|
||||
append_ss(&line, args);
|
||||
append_s_char(&line, ' ');
|
||||
append_ss(&line, body);
|
||||
terminate_with_null(&line);
|
||||
fprintf(file, "%s\n", line.str);
|
||||
line.size = 0;
|
||||
|
||||
append_ss(&line, make_lit_string("#endif"));
|
||||
terminate_with_null(&line);
|
||||
fprintf(file, "%s\n", line.str);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
fprintf(file, "\n#if !defined(FSTRING_C)\n\n"
|
||||
"// NOTE(allen): This section is here to enable nicer names\n"
|
||||
"// for C++ users who can have overloaded functions. None of\n"
|
||||
"// these functions add new features.\n");
|
||||
|
||||
for (int32_t j = 0; j < string_unit.set.count; ++j){
|
||||
char line_space[2048];
|
||||
String line = make_fixed_width_string(line_space);
|
||||
|
||||
Item_Node *item = &string_unit.set.items[j];
|
||||
|
||||
if (item->t != Item_Macro){
|
||||
String cpp_name = item->cpp_name;
|
||||
if (cpp_name.str != 0){
|
||||
String ret = item->ret;
|
||||
String args = item->args;
|
||||
|
||||
append_ss(&line, make_lit_string("FSTRING_INLINE"));
|
||||
append_padding(&line, ' ', RETURN_PADDING);
|
||||
append_ss(&line, ret);
|
||||
append_padding(&line, ' ', SIG_PADDING);
|
||||
append_ss(&line, cpp_name);
|
||||
append_ss(&line, args);
|
||||
terminate_with_null(&line);
|
||||
|
||||
fprintf(file, "%s;\n", line.str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(file, "\n#endif\n");
|
||||
}
|
||||
|
||||
fprintf(file, "\n#endif\n");
|
||||
|
||||
{
|
||||
fprintf(file, "\n#if !defined(FSTRING_C) && !defined(FSTRING_GUARD)\n\n");
|
||||
|
||||
for (int32_t j = 0; j < string_unit.set.count; ++j){
|
||||
char line_space[2048];
|
||||
String line = make_fixed_width_string(line_space);
|
||||
|
||||
Item_Node *item = &string_unit.set.items[j];
|
||||
|
||||
if (item->t != Item_Macro){
|
||||
String cpp_name = item->cpp_name;
|
||||
if (cpp_name.str != 0){
|
||||
String name = item->name;
|
||||
String ret = item->ret;
|
||||
String args = item->args;
|
||||
Argument_Breakdown breakdown = item->breakdown;
|
||||
|
||||
append_ss(&line, make_lit_string("FSTRING_INLINE"));
|
||||
append_s_char(&line, ' ');
|
||||
append_ss(&line, ret);
|
||||
append_s_char(&line, '\n');
|
||||
append_ss(&line, cpp_name);
|
||||
append_ss(&line, args);
|
||||
if (match_ss(ret, make_lit_string("void"))){
|
||||
append_ss(&line, make_lit_string("{("));
|
||||
}
|
||||
else{
|
||||
append_ss(&line, make_lit_string("{return("));
|
||||
}
|
||||
append_ss(&line, name);
|
||||
append_s_char(&line, '(');
|
||||
|
||||
if (breakdown.count > 0){
|
||||
for (int32_t i = 0; i < breakdown.count; ++i){
|
||||
if (i != 0){
|
||||
append_s_char(&line, ',');
|
||||
}
|
||||
append_ss(&line, breakdown.args[i].param_name);
|
||||
}
|
||||
}
|
||||
else{
|
||||
append_ss(&line, make_lit_string("void"));
|
||||
}
|
||||
|
||||
append_ss(&line, make_lit_string("));}"));
|
||||
terminate_with_null(&line);
|
||||
|
||||
fprintf(file, "%s\n", line.str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(file, "\n#endif\n");
|
||||
}
|
||||
}
|
||||
else if (match_ss(lexeme, make_lit_string("DOC_EXPORT"))){
|
||||
++i, ++token;
|
||||
if (i < count && token->type == CPP_TOKEN_COMMENT){
|
||||
++i, ++token;
|
||||
if (i < count && token->type == CPP_PP_DEFINE){
|
||||
++i, ++token;
|
||||
for (; i < count; ++i, ++token){
|
||||
if (!(token->flags & CPP_TFLAG_PP_BODY)){
|
||||
break;
|
||||
}
|
||||
}
|
||||
--i, --token;
|
||||
do_print = false;
|
||||
do_whitespace_print = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (match_ss(lexeme, make_lit_string("FSTRING_INLINE"))){
|
||||
if (!(token->flags & CPP_TFLAG_PP_BODY)){
|
||||
fprintf(file, "#if !defined(FSTRING_GUARD)\n");
|
||||
|
||||
print_function_body_code(file, &i, &token, count, code, start);
|
||||
|
||||
fprintf(file, "\n#endif");
|
||||
do_print = false;
|
||||
}
|
||||
}
|
||||
else if (match_ss(lexeme, make_lit_string("FSTRING_LINK"))){
|
||||
if (!(token->flags & CPP_TFLAG_PP_BODY)){
|
||||
fprintf(file, "#if defined(FSTRING_IMPLEMENTATION)\n");
|
||||
|
||||
print_function_body_code(file, &i, &token, count, code, start);
|
||||
|
||||
fprintf(file, "\n#endif");
|
||||
do_print = false;
|
||||
}
|
||||
}
|
||||
else if (match_ss(lexeme, make_lit_string("CPP_NAME"))){
|
||||
|
||||
Cpp_Token *token_start = token;
|
||||
int32_t i_start = i;
|
||||
int32_t has_cpp_name = false;
|
||||
|
||||
++i, ++token;
|
||||
if (token->type == CPP_TOKEN_PARENTHESE_OPEN){
|
||||
++i, ++token;
|
||||
if (token->type == CPP_TOKEN_IDENTIFIER){
|
||||
++i, ++token;
|
||||
if (token->type == CPP_TOKEN_PARENTHESE_CLOSE){
|
||||
has_cpp_name = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!has_cpp_name){
|
||||
i = i_start;
|
||||
token = token_start;
|
||||
}
|
||||
|
||||
do_print = false;
|
||||
}
|
||||
else if (token->type == CPP_TOKEN_COMMENT){
|
||||
lexeme = make_string(code->str + token->start, token->size);
|
||||
if (check_and_fix_docs(&lexeme)){
|
||||
do_print = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < count){
|
||||
if (do_print){
|
||||
pstr = make_string(code->str + token->start, token->size);
|
||||
print_str(file, pstr);
|
||||
}
|
||||
|
||||
for (; (token = get_token(&pcontext)) != 0; get_next_token(&pcontext)){
|
||||
if (!(token->flags & CPP_TFLAG_PP_BODY) &&
|
||||
token->type == CPP_TOKEN_IDENTIFIER){
|
||||
String lexeme = get_lexeme(*token, pcontext.data);
|
||||
if (match_ss(lexeme, make_lit_string("FSTRING_BEGIN"))){
|
||||
start = token->start + token->size;
|
||||
break;
|
||||
}
|
||||
}
|
||||
pstr = str_start_end(code->str, start, code->size);
|
||||
print_str(file, pstr);
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
String pstr = {0};
|
||||
int32_t do_whitespace_print = true;
|
||||
|
||||
//
|
||||
// Output Docs
|
||||
//
|
||||
for(;(token = get_next_token(&pcontext)) != 0;){
|
||||
if (do_whitespace_print){
|
||||
pstr = str_start_end(pcontext.data, start, token->start);
|
||||
append_ss(&out, pstr);
|
||||
}
|
||||
else{
|
||||
do_whitespace_print = true;
|
||||
}
|
||||
|
||||
String lexeme = get_lexeme(*token, pcontext.data);
|
||||
|
||||
int32_t do_print = true;
|
||||
if (match_ss(lexeme, make_lit_string("FSTRING_DECLS"))){
|
||||
append_sc(&out, "#if !defined(FCODER_STRING_H)\n#define FCODER_STRING_H\n\n");
|
||||
do_print = false;
|
||||
|
||||
static int32_t RETURN_PADDING = 16;
|
||||
static int32_t SIG_PADDING = 27;
|
||||
|
||||
for (int32_t j = 0; j < string_unit.set.count; ++j){
|
||||
char line_[2048];
|
||||
String line = make_fixed_width_string(line_);
|
||||
Item_Node *item = string_unit.set.items + j;
|
||||
|
||||
if (item->t == Item_Function){
|
||||
append_ss (&line, item->marker);
|
||||
append_padding (&line, ' ', RETURN_PADDING);
|
||||
append_ss (&line, item->ret);
|
||||
append_padding (&line, ' ', SIG_PADDING);
|
||||
append_ss (&line, item->name);
|
||||
append_ss (&line, item->args);
|
||||
append_sc (&line, ";\n");
|
||||
}
|
||||
else if (item->t == Item_Macro){
|
||||
append_ss (&line, make_lit_string("#ifndef "));
|
||||
append_padding (&line, ' ', 10);
|
||||
append_ss (&line, item->name);
|
||||
append_s_char (&line, '\n');
|
||||
|
||||
append_ss (&line, make_lit_string("# define "));
|
||||
append_padding (&line, ' ', 10);
|
||||
append_ss (&line, item->name);
|
||||
append_ss (&line, item->args);
|
||||
append_s_char (&line, ' ');
|
||||
append_ss (&line, item->body);
|
||||
append_s_char (&line, '\n');
|
||||
|
||||
append_ss (&line, make_lit_string("#endif"));
|
||||
append_s_char (&line, '\n');
|
||||
}
|
||||
else{
|
||||
InvalidPath;
|
||||
}
|
||||
|
||||
append_ss(&out, line);
|
||||
}
|
||||
|
||||
append_sc(&out, "\n#endif\n");
|
||||
|
||||
// NOTE(allen): C++ overload definitions
|
||||
append_sc(&out, "\n#if !defined(FSTRING_C) && !defined(FSTRING_GUARD)\n\n");
|
||||
|
||||
for (int32_t j = 0; j < string_unit.set.count; ++j){
|
||||
char line_space[2048];
|
||||
String line = make_fixed_width_string(line_space);
|
||||
|
||||
Item_Node *item = &string_unit.set.items[j];
|
||||
|
||||
if (item->t == Item_Function){
|
||||
String cpp_name = item->cpp_name;
|
||||
if (cpp_name.str != 0){
|
||||
Argument_Breakdown breakdown = item->breakdown;
|
||||
|
||||
append_ss (&line, make_lit_string("FSTRING_INLINE"));
|
||||
append_padding(&line, ' ', RETURN_PADDING);
|
||||
append_ss (&line, item->ret);
|
||||
append_padding(&line, ' ', SIG_PADDING);
|
||||
append_ss (&line, cpp_name);
|
||||
append_ss (&line, item->args);
|
||||
if (match_ss(item->ret, make_lit_string("void"))){
|
||||
append_ss(&line, make_lit_string("{("));//}
|
||||
}
|
||||
else{
|
||||
append_ss(&line, make_lit_string("{return("));//}
|
||||
}
|
||||
append_ss (&line, item->name);
|
||||
append_s_char(&line, '(');
|
||||
|
||||
if (breakdown.count > 0){
|
||||
for (int32_t i = 0; i < breakdown.count; ++i){
|
||||
if (i != 0){
|
||||
append_s_char(&line, ',');
|
||||
}
|
||||
append_ss(&line, breakdown.args[i].param_name);
|
||||
}
|
||||
}
|
||||
else{
|
||||
append_ss(&line, make_lit_string("void"));
|
||||
}
|
||||
|
||||
//{
|
||||
append_ss(&line, make_lit_string("));}\n"));
|
||||
|
||||
append_ss(&out, line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
append_sc(&out, "\n#endif\n");
|
||||
}
|
||||
|
||||
else if (match_ss(lexeme, make_lit_string("DOC_EXPORT"))){
|
||||
token = get_next_token(&pcontext);
|
||||
if (token && token->type == CPP_TOKEN_COMMENT){
|
||||
token = get_next_token(&pcontext);
|
||||
if (token && token->type == CPP_PP_DEFINE){
|
||||
for (;(token = get_next_token(&pcontext)) != 0;){
|
||||
if (!(token->flags & CPP_TFLAG_PP_BODY)){
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (token != 0){
|
||||
get_prev_token(&pcontext);
|
||||
}
|
||||
do_print = false;
|
||||
do_whitespace_print = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (match_ss(lexeme, make_lit_string("FSTRING_INLINE")) ||
|
||||
match_ss(lexeme, make_lit_string("FSTRING_LINK"))){
|
||||
if (!(token->flags & CPP_TFLAG_PP_BODY)){
|
||||
if (match_ss(lexeme, make_lit_string("FSTRING_INLINE"))){
|
||||
append_sc(&out, "#if !defined(FSTRING_GUARD)\n");
|
||||
}
|
||||
else{
|
||||
append_sc(&out, "#if defined(FSTRING_IMPLEMENTATION)\n");
|
||||
}
|
||||
print_function_body_code(&out, &pcontext, start);
|
||||
append_sc(&out, "\n#endif");
|
||||
do_print = false;
|
||||
}
|
||||
}
|
||||
|
||||
else if (match_ss(lexeme, make_lit_string("CPP_NAME"))){
|
||||
Cpp_Token *token_start = token;
|
||||
int32_t has_cpp_name = false;
|
||||
|
||||
token = get_next_token(&pcontext);
|
||||
if (token && token->type == CPP_TOKEN_PARENTHESE_OPEN){
|
||||
token = get_next_token(&pcontext);
|
||||
if (token && token->type == CPP_TOKEN_IDENTIFIER){
|
||||
token = get_next_token(&pcontext);
|
||||
if (token && token->type == CPP_TOKEN_PARENTHESE_CLOSE){
|
||||
has_cpp_name = true;
|
||||
do_print = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!has_cpp_name){
|
||||
token = set_token(&pcontext, token_start);
|
||||
}
|
||||
}
|
||||
|
||||
else if (token->type == CPP_TOKEN_COMMENT){
|
||||
if (check_and_fix_docs(&lexeme)){
|
||||
do_print = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ((token = get_token(&pcontext)) != 0){
|
||||
if (do_print){
|
||||
pstr = get_lexeme(*token, pcontext.data);
|
||||
append_ss(&out, pstr);
|
||||
}
|
||||
start = token->start + token->size;
|
||||
}
|
||||
}
|
||||
pstr = str_start_end(pcontext.data, start, parse.code.size);
|
||||
append_ss(&out, pstr);
|
||||
|
||||
file = fopen(API_DOC, "wb");
|
||||
end_file_out(context);
|
||||
}
|
||||
else{
|
||||
// TODO(allen): warning
|
||||
}
|
||||
|
||||
|
||||
// Output Docs
|
||||
|
||||
if (begin_file_out(&context, API_DOC, &out)){
|
||||
|
||||
fprintf(file,
|
||||
"<html lang=\"en-US\">\n"
|
||||
"<head>\n"
|
||||
"<title>4coder API Docs</title>\n"
|
||||
"<style>\n"
|
||||
append_sc(&out,
|
||||
"<html lang=\"en-US\">"
|
||||
"<head>"
|
||||
"<title>4coder API Docs</title>"
|
||||
"<style>"
|
||||
|
||||
"body { "
|
||||
"background: " BACK_COLOR "; "
|
||||
"color: " TEXT_COLOR "; "
|
||||
"}\n"
|
||||
"}"
|
||||
|
||||
// H things
|
||||
"h1,h2,h3,h4 { "
|
||||
"color: " POP_COLOR_1 "; "
|
||||
"margin: 0; "
|
||||
"}\n"
|
||||
"}"
|
||||
|
||||
"h2 { "
|
||||
"margin-top: 6mm; "
|
||||
"}\n"
|
||||
"}"
|
||||
|
||||
"h3 { "
|
||||
"margin-top: 5mm; margin-bottom: 5mm; "
|
||||
"}\n"
|
||||
"}"
|
||||
|
||||
"h4 { "
|
||||
"font-size: 1.1em; "
|
||||
"}\n"
|
||||
"}"
|
||||
|
||||
// ANCHORS
|
||||
"a { "
|
||||
"color: " POP_COLOR_1 "; "
|
||||
"text-decoration: none; "
|
||||
"}\n"
|
||||
"}"
|
||||
"a:visited { "
|
||||
"color: " VISITED_LINK "; "
|
||||
"}\n"
|
||||
"}"
|
||||
"a:hover { "
|
||||
"background: " POP_BACK_1 "; "
|
||||
"}\n"
|
||||
"}"
|
||||
|
||||
// LIST
|
||||
"ul { "
|
||||
"list-style: none; "
|
||||
"padding: 0; "
|
||||
"margin: 0; "
|
||||
"}\n"
|
||||
"}"
|
||||
|
||||
"</style>\n"
|
||||
"</style>"
|
||||
"</head>\n"
|
||||
"<body>\n"
|
||||
"<body>"
|
||||
"<div style='font-family:Arial; margin: 0 auto; "
|
||||
"width: 800px; text-align: justify; line-height: 1.25;'>\n"
|
||||
"<h1 style='margin-top: 5mm; margin-bottom: 5mm;'>4coder API</h1>\n"
|
||||
"width: 800px; text-align: justify; line-height: 1.25;'>"
|
||||
"<h1 style='margin-top: 5mm; margin-bottom: 5mm;'>4coder API</h1>"
|
||||
);
|
||||
|
||||
struct Section{
|
||||
|
@ -2686,149 +2612,136 @@ generate_custom_headers(){
|
|||
{"string_library", "String Library"}
|
||||
};
|
||||
|
||||
fprintf(file,
|
||||
"<h3 style='margin:0;'>Table of Contents</h3>\n"
|
||||
"<ul>\n");
|
||||
append_sc(&out,
|
||||
"<h3 style='margin:0;'>Table of Contents</h3>""<ul>");
|
||||
|
||||
dump_file_out(context);
|
||||
|
||||
int32_t section_count = ArrayCount(sections);
|
||||
for (int32_t i = 0; i < section_count; ++i){
|
||||
fprintf(file,
|
||||
"<li><a href='#section_%s'>§%d %s</a></li>",
|
||||
sections[i].id_string,
|
||||
i+1,
|
||||
sections[i].display_string);
|
||||
append_sc (&out, "<li><a href='#section_");
|
||||
append_sc (&out, sections[i].id_string);
|
||||
append_sc (&out, "'>§");
|
||||
append_int_to_str (&out, i+1);
|
||||
append_s_char (&out, ' ');
|
||||
append_sc (&out, sections[i].display_string);
|
||||
append_sc (&out, "</a></li>");
|
||||
}
|
||||
|
||||
fprintf(file,
|
||||
"</ul>\n"
|
||||
);
|
||||
append_sc(&out, "</ul>");
|
||||
|
||||
#define MAJOR_SECTION "1"
|
||||
|
||||
fprintf(file,
|
||||
"<h2 id='section_%s'>§"MAJOR_SECTION" %s</h2>\n"
|
||||
"<div>\n"
|
||||
|
||||
"<p>\n"
|
||||
"This is the documentation for " VERSION " The documentation is still under "
|
||||
"construction so some of the links are linking to sections that have not "
|
||||
"been written yet. What is here should be correct and I suspect useful "
|
||||
"even without some of the other sections. "
|
||||
"</p>\n"
|
||||
|
||||
"<p>\n"
|
||||
"If you have questions or discover errors please contact "
|
||||
"<span style='"CODE_STYLE"'>editor@4coder.net</span> or "
|
||||
"to get help from community members you can post on the "
|
||||
"4coder forums hosted on handmade.network at "
|
||||
"<span style='"CODE_STYLE"'>4coder.handmade.network</span>"
|
||||
"</p>\n"
|
||||
|
||||
"</div>\n",
|
||||
sections[0].id_string,
|
||||
sections[0].display_string
|
||||
);
|
||||
append_sc(&out, "\n<h2 id='section_");
|
||||
append_sc(&out, sections[0].id_string);
|
||||
append_sc(&out, "'>§"MAJOR_SECTION" ");
|
||||
append_sc(&out, sections[0].display_string);
|
||||
append_sc(&out,
|
||||
"</h2>"
|
||||
"<div>"
|
||||
"<p>This is the documentation for " VERSION " The documentation is still "
|
||||
"under construction so some of the links are linking to sections that "
|
||||
"have not been written yet. What is here should be correct and I suspect "
|
||||
"useful even without some of the other sections.</p>"
|
||||
"<p>If you have questions or discover errors please contact "
|
||||
"<span style='"CODE_STYLE"'>editor@4coder.net</span> or "
|
||||
"to get help from community members you can post on the "
|
||||
"4coder forums hosted on handmade.network at "
|
||||
"<span style='"CODE_STYLE"'>4coder.handmade.network</span></p>"
|
||||
"</div>");
|
||||
|
||||
#undef MAJOR_SECTION
|
||||
#define MAJOR_SECTION "2"
|
||||
// TODO(allen): Write the 4coder system descriptions.
|
||||
fprintf(file,
|
||||
"<h2 id='section_%s'>§"MAJOR_SECTION" %s</h2>\n",
|
||||
sections[1].id_string,
|
||||
sections[1].display_string);
|
||||
append_sc(&out, "\n<h2 id='section_");
|
||||
append_sc(&out, sections[1].id_string);
|
||||
append_sc(&out, "'>§"MAJOR_SECTION" ");
|
||||
append_sc(&out, sections[1].display_string);
|
||||
append_sc(&out, "</h2>");
|
||||
|
||||
{
|
||||
fprintf(file,
|
||||
"<div><i>\n"
|
||||
"Coming Soon"
|
||||
"</i><div>\n");
|
||||
}
|
||||
append_sc(&out, "<div><i>Coming Soon</i><div>");
|
||||
|
||||
#undef MAJOR_SECTION
|
||||
#define MAJOR_SECTION "3"
|
||||
|
||||
fprintf(file,
|
||||
"<h2 id='section_%s'>§"MAJOR_SECTION" %s</h2>\n",
|
||||
sections[2].id_string,
|
||||
sections[2].display_string);
|
||||
{
|
||||
append_sc(&out, "\n<h2 id='section_");
|
||||
append_sc(&out, sections[2].id_string);
|
||||
append_sc(&out, "'>§"MAJOR_SECTION" ");
|
||||
append_sc(&out, sections[2].display_string);
|
||||
append_sc(&out, "</h2>");
|
||||
|
||||
|
||||
#undef SECTION
|
||||
#define SECTION MAJOR_SECTION".1"
|
||||
|
||||
fprintf(file,
|
||||
"<h3>§"SECTION" Function List</h3>\n"
|
||||
"<ul>\n");
|
||||
|
||||
for (int32_t i = 0; i < unit_custom.set.count; ++i){
|
||||
String name = func_4ed_names.names[i].public_name;
|
||||
fprintf(file,
|
||||
"<li>"
|
||||
"<a href='#%.*s_doc'>%.*s</a>"
|
||||
"</li>\n",
|
||||
name.size, name.str,
|
||||
name.size, name.str
|
||||
);
|
||||
}
|
||||
fprintf(file, "</ul>\n");
|
||||
|
||||
|
||||
append_sc(&out, "<h3>§"SECTION" Function List</h3><ul>");
|
||||
|
||||
for (int32_t i = 0; i < unit_custom.set.count; ++i){
|
||||
String name = func_4ed_names.names[i].public_name;
|
||||
append_sc(&out, "<li><a href='#");
|
||||
append_ss(&out, name);
|
||||
append_sc(&out, "_doc'>");
|
||||
append_ss(&out, name);
|
||||
append_sc(&out, "</a></li>");
|
||||
}
|
||||
append_sc(&out, "</ul>");
|
||||
|
||||
#undef SECTION
|
||||
#define SECTION MAJOR_SECTION".2"
|
||||
|
||||
fprintf(file,
|
||||
"<h3>§"SECTION" Type List</h3>\n"
|
||||
"<ul>\n"
|
||||
);
|
||||
|
||||
for (int32_t i = 0; i < unit.set.count; ++i){
|
||||
String name = unit.set.items[i].name;
|
||||
fprintf(file,
|
||||
"<li>"
|
||||
"<a href='#%.*s_doc'>%.*s</a>"
|
||||
"</li>\n",
|
||||
name.size, name.str,
|
||||
name.size, name.str
|
||||
);
|
||||
}
|
||||
|
||||
fprintf(file, "</ul>\n");
|
||||
|
||||
|
||||
append_sc(&out, "<h3>§"SECTION" Type List</h3><ul>");
|
||||
|
||||
for (int32_t i = 0; i < unit.set.count; ++i){
|
||||
String name = unit.set.items[i].name;
|
||||
append_sc(&out, "<li><a href='#");
|
||||
append_ss(&out, name);
|
||||
append_sc(&out, "_doc'>");
|
||||
append_ss(&out, name);
|
||||
append_sc(&out, "</a></li>");
|
||||
}
|
||||
append_sc(&out, "</ul>");
|
||||
|
||||
#undef SECTION
|
||||
#define SECTION MAJOR_SECTION".3"
|
||||
|
||||
append_sc(&out, "<h3>§"SECTION" Function Descriptions</h3>\n");
|
||||
for (int32_t i = 0; i < unit_custom.set.count; ++i){
|
||||
String name = func_4ed_names.names[i].public_name;
|
||||
|
||||
fprintf(file, "<h3>§"SECTION" Function Descriptions</h3>\n");
|
||||
for (int32_t i = 0; i < unit_custom.set.count; ++i){
|
||||
String name = func_4ed_names.names[i].public_name;
|
||||
|
||||
fprintf(file,
|
||||
"<div id='%.*s_doc' style='margin-bottom: 1cm;'>\n"
|
||||
"<h4>§"SECTION".%d: %.*s</h4>\n"
|
||||
"<div style='"CODE_STYLE" "DESCRIPT_SECTION_STYLE"'>",
|
||||
name.size, name.str, i+1,
|
||||
name.size, name.str
|
||||
);
|
||||
print_function_html(file, unit_custom.set.items[i], name, "app->");
|
||||
fprintf(file, "</div>\n");
|
||||
|
||||
String doc_string = unit_custom.set.items[i].doc_string;
|
||||
print_function_docs(file, part, name, doc_string);
|
||||
|
||||
fprintf(file, "</div><hr>\n");
|
||||
}
|
||||
append_sc (&out, "<div id='");
|
||||
append_ss (&out, name);
|
||||
append_sc (&out, "_doc' style='margin-bottom: 1cm;'><h4>§"SECTION".");
|
||||
append_int_to_str(&out, i+1);
|
||||
append_sc (&out, ": ");
|
||||
append_ss (&out, name);
|
||||
append_sc (&out, "</h4><div style='"CODE_STYLE" "DESCRIPT_SECTION_STYLE"'>");
|
||||
|
||||
dump_file_out(context);
|
||||
|
||||
// TODO(allen): Continue converting this to the string system.
|
||||
print_function_html(file, unit_custom.set.items[i], name, "app->");
|
||||
fprintf(file, "</div>\n");
|
||||
|
||||
String doc_string = unit_custom.set.items[i].doc_string;
|
||||
print_function_docs(file, part, name, doc_string);
|
||||
|
||||
fprintf(file, "</div><hr>\n");
|
||||
}
|
||||
|
||||
#undef SECTION
|
||||
#define SECTION MAJOR_SECTION".4"
|
||||
|
||||
fprintf(file, "<h3>§"SECTION" Type Descriptions</h3>\n");
|
||||
int32_t I = 1;
|
||||
for (int32_t i = 0; i < unit.set.count; ++i, ++I){
|
||||
print_item(part, file, unit.set.items + i, SECTION, I);
|
||||
}
|
||||
|
||||
fprintf(file, "<h3>§"SECTION" Type Descriptions</h3>\n");
|
||||
int32_t I = 1;
|
||||
for (int32_t i = 0; i < unit.set.count; ++i, ++I){
|
||||
print_item(part, file, unit.set.items + i, SECTION, I);
|
||||
}
|
||||
|
||||
|
||||
#undef MAJOR_SECTION
|
||||
#define MAJOR_SECTION "4"
|
||||
|
||||
fprintf(file,
|
||||
fprintf(file,
|
||||
"<h2 id='section_%s'>§"MAJOR_SECTION" %s</h2>\n",
|
||||
sections[3].id_string,
|
||||
sections[3].display_string);
|
||||
|
@ -2936,7 +2849,10 @@ generate_custom_headers(){
|
|||
"</html>\n"
|
||||
);
|
||||
|
||||
fclose(file);
|
||||
end_file_out(context);
|
||||
}
|
||||
else{
|
||||
// TODO(allen): warning
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue