diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2016-04-20 02:50:20 +0200 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2016-04-20 02:50:20 +0200 |
commit | 9b2a563b4931ca39cd6dd14bf85cda627714a4b2 (patch) | |
tree | afcc5ead7219b0f9f38728eb58c88dfe641325dc /src/content-parser.c | |
parent | c216deff59e2c0dd9538ced99d6b579013b3b5de (diff) | |
download | blogc-9b2a563b4931ca39cd6dd14bf85cda627714a4b2.tar.gz blogc-9b2a563b4931ca39cd6dd14bf85cda627714a4b2.tar.bz2 blogc-9b2a563b4931ca39cd6dd14bf85cda627714a4b2.zip |
content-parser: extract post description from content
description is the first line of the first paragraph parsed from content
file. users can override it declaring DESCRIPTION variable in source
file itself.
this also fixes a bug with line endings when using single line
blockquotes.
Diffstat (limited to 'src/content-parser.c')
-rw-r--r-- | src/content-parser.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/content-parser.c b/src/content-parser.c index 782a85d..795cc34 100644 --- a/src/content-parser.c +++ b/src/content-parser.c @@ -460,7 +460,7 @@ blogc_is_ordered_list_item(const char *str, size_t prefix_len) char* -blogc_content_parse(const char *src, size_t *end_excerpt) +blogc_content_parse(const char *src, size_t *end_excerpt, char **description) { // src is always nul-terminated. size_t src_len = strlen(src); @@ -698,14 +698,10 @@ blogc_content_parse(const char *src, size_t *end_excerpt) case CONTENT_BLOCKQUOTE_END: if (c == '\n' || c == '\r' || is_last) { tmp_str = sb_string_new(); - for (sb_slist_t *l = lines; l != NULL; l = l->next) { - if (l->next == NULL) - sb_string_append_printf(tmp_str, "%s", l->data); - else - sb_string_append_printf(tmp_str, "%s%s", l->data, - line_ending); - } - tmp = blogc_content_parse(tmp_str->str, NULL); + for (sb_slist_t *l = lines; l != NULL; l = l->next) + sb_string_append_printf(tmp_str, "%s%s", l->data, + line_ending); + tmp = blogc_content_parse(tmp_str->str, NULL, description); sb_string_append_printf(rv, "<blockquote>%s</blockquote>%s", tmp, line_ending); free(tmp); @@ -1019,6 +1015,8 @@ blogc_content_parse(const char *src, size_t *end_excerpt) state = CONTENT_PARAGRAPH_END; end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); + if (description != NULL && *description == NULL) + *description = sb_strndup(src + start, end - start); } if (!is_last) break; |