diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2016-06-27 03:01:20 +0200 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2016-06-29 01:35:45 +0200 |
commit | 519f1f8031687ebf3853817a8b2e3557c2443d67 (patch) | |
tree | 320be2942773ee95c34a798da09685728115045f /src/utils.c | |
parent | 4cfeb39fbe99be28f22611c6146b1655549f7850 (diff) | |
download | blogc-519f1f8031687ebf3853817a8b2e3557c2443d67.tar.gz blogc-519f1f8031687ebf3853817a8b2e3557c2443d67.tar.bz2 blogc-519f1f8031687ebf3853817a8b2e3557c2443d67.zip |
content-parser: rewrote inline parser.
parser is stricter now, and won't produce invalid HTML anymore.
Diffstat (limited to 'src/utils.c')
-rw-r--r-- | src/utils.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/utils.c b/src/utils.c index 855b503..d7362a6 100644 --- a/src/utils.c +++ b/src/utils.c @@ -287,6 +287,27 @@ sb_str_replace(const char *str, const char search, const char *replace) } +char* +sb_str_find(const char *str, char c) +{ + // this is somewhat similar to strchr, but respects '\' escaping. + if (str == NULL) + return NULL; + if (c == '\0') + return (char*) str + strlen(str); + for (size_t i = 0; str[i] != '\0'; i++) { + if (str[i] == '\\') { + i++; + continue; + } + if (str[i] == c) { + return (char*) str + i; + } + } + return NULL; +} + + void sb_strv_free(char **strv) { @@ -425,6 +446,26 @@ sb_string_append_printf(sb_string_t *str, const char *format, ...) } +sb_string_t* +sb_string_append_escaped(sb_string_t *str, const char *suffix) +{ + if (str == NULL) + return NULL; + if (suffix == NULL) + return str; + bool escaped = false; + for (size_t i = 0; suffix[i] != '\0'; i++) { + if (suffix[i] == '\\' && !escaped) { + escaped = true; + continue; + } + escaped = false; + str = sb_string_append_c(str, suffix[i]); + } + return str; +} + + sb_trie_t* sb_trie_new(sb_free_func_t free_func) { |