X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/halibut/blobdiff_plain/50d6b4bd6bf28be2f31eb2b176911948163984f8..c65367738ae7b8bde8c52d01d82a19987bb4941d:/bk_text.c diff --git a/bk_text.c b/bk_text.c index a0ebf82..359ea25 100644 --- a/bk_text.c +++ b/bk_text.c @@ -180,8 +180,36 @@ static textconfig text_configure(paragraph *source) { return ret; } +paragraph *text_config_filename(char *filename) +{ + paragraph *p; + wchar_t *ufilename, *up; + int len; + + p = mknew(paragraph); + memset(p, 0, sizeof(*p)); + p->type = para_Config; + p->next = NULL; + p->fpos.filename = ""; + p->fpos.line = p->fpos.col = -1; + + ufilename = ufroma_dup(filename); + len = ustrlen(ufilename) + 2 + lenof(L"text-filename"); + p->keyword = mknewa(wchar_t, len); + up = p->keyword; + ustrcpy(up, L"text-filename"); + up = uadv(up); + ustrcpy(up, ufilename); + up = uadv(up); + *up = L'\0'; + assert(up - p->keyword < len); + sfree(ufilename); + + return p; +} + void text_backend(paragraph *sourceform, keywordlist *keywords, - indexdata *idx) { + indexdata *idx, void *unused) { paragraph *p; textconfig conf; word *prefix, *body, *wp; @@ -191,6 +219,7 @@ void text_backend(paragraph *sourceform, keywordlist *keywords, int nesting, nestindent; int indentb, indenta; + IGNORE(unused); IGNORE(keywords); /* we don't happen to need this */ IGNORE(idx); /* or this */ @@ -444,18 +473,20 @@ static void text_rdaddwc(rdstringc *rs, word *text, word *end) { } } -static int text_width(word *); +static int text_width(void *, word *); -static int text_width_list(word *text) { +static int text_width_list(void *ctx, word *text) { int w = 0; while (text) { - w += text_width(text); + w += text_width(ctx, text); text = text->next; } return w; } -static int text_width(word *text) { +static int text_width(void *ctx, word *text) { + IGNORE(ctx); + switch (text->type) { case word_HyperLink: case word_HyperEnd: @@ -476,7 +507,7 @@ static int text_width(word *text) { : 0) + (text_convert(text->text, NULL) ? ustrlen(text->text) : - text_width_list(text->alt))); + text_width_list(ctx, text->alt))); case word_WhiteSpace: case word_EmphSpace: @@ -532,7 +563,7 @@ static void text_heading(FILE *fp, word *tprefix, word *nprefix, word *text, wrapwidth = indent + width; } - wrapping = wrap_para(text, firstlinewidth, wrapwidth, text_width); + wrapping = wrap_para(text, firstlinewidth, wrapwidth, text_width, NULL, 0); for (p = wrapping; p; p = p->next) { text_rdaddwc(&t, p->begin, p->end); length = (t.text ? strlen(t.text) : 0); @@ -600,7 +631,7 @@ static void text_para(FILE *fp, word *prefix, char *prefixextra, word *text, } else e = indent + extraindent; - wrapping = wrap_para(text, firstlinewidth, width, text_width); + wrapping = wrap_para(text, firstlinewidth, width, text_width, NULL, 0); for (p = wrapping; p; p = p->next) { rdstringc t = { 0, 0, NULL }; text_rdaddwc(&t, p->begin, p->end);