typedef enum { LEFT, LEFTPLUS, CENTRE } alignment;
typedef struct {
alignment align;
- int just_numbers;
+ int number_at_all, just_numbers;
wchar_t *underline;
wchar_t *number_suffix;
} alignstruct;
ret.bullet.alt = NULL;
ret.bullet.type = word_Normal;
ret.atitle.just_numbers = FALSE; /* ignored */
+ ret.atitle.number_at_all = TRUE; /* ignored */
/*
* Defaults.
ret.atitle.underline = L"\x2550\0=\0\0";
ret.achapter.align = LEFT;
ret.achapter.just_numbers = FALSE;
+ ret.achapter.number_at_all = TRUE;
ret.achapter.number_suffix = L": ";
ret.achapter.underline = L"\x203E\0-\0\0";
ret.nasect = 1;
- ret.asect = mknewa(alignstruct, ret.nasect);
+ ret.asect = snewn(ret.nasect, alignstruct);
ret.asect[0].align = LEFTPLUS;
ret.asect[0].just_numbers = TRUE;
+ ret.asect[0].number_at_all = TRUE;
ret.asect[0].number_suffix = L" ";
ret.asect[0].underline = L"\0";
ret.include_version_id = TRUE;
if (!ustricmp(p->keyword, L"text-indent")) {
ret.indent = utoi(uadv(p->keyword));
} else if (!ustricmp(p->keyword, L"text-charset")) {
- char *csname = utoa_dup(uadv(p->keyword), CS_ASCII);
- ret.charset = charset_from_localenc(csname);
- sfree(csname);
+ ret.charset = charset_from_ustr(&p->fpos, uadv(p->keyword));
} else if (!ustricmp(p->keyword, L"text-filename")) {
sfree(ret.filename);
ret.filename = dupstr(adv(p->origkeyword));
ret.achapter.underline = uadv(p->keyword);
} else if (!ustricmp(p->keyword, L"text-chapter-numeric")) {
ret.achapter.just_numbers = utob(uadv(p->keyword));
+ } else if (!ustricmp(p->keyword, L"text-chapter-shownumber")) {
+ ret.achapter.number_at_all = utob(uadv(p->keyword));
} else if (!ustricmp(p->keyword, L"text-chapter-suffix")) {
ret.achapter.number_suffix = uadv(p->keyword);
} else if (!ustricmp(p->keyword, L"text-section-align")) {
}
if (n >= ret.nasect) {
int i;
- ret.asect = resize(ret.asect, n+1);
+ ret.asect = sresize(ret.asect, n+1, alignstruct);
for (i = ret.nasect; i <= n; i++)
ret.asect[i] = ret.asect[ret.nasect-1];
ret.nasect = n+1;
}
if (n >= ret.nasect) {
int i;
- ret.asect = resize(ret.asect, n+1);
+ ret.asect = sresize(ret.asect, n+1, alignstruct);
for (i = ret.nasect; i <= n; i++)
ret.asect[i] = ret.asect[ret.nasect-1];
ret.nasect = n+1;
}
if (n >= ret.nasect) {
int i;
- ret.asect = resize(ret.asect, n+1);
+ ret.asect = sresize(ret.asect, n+1, alignstruct);
for (i = ret.nasect; i <= n; i++)
ret.asect[i] = ret.asect[ret.nasect-1];
ret.nasect = n+1;
}
ret.asect[n].just_numbers = utob(q);
+ } else if (!ustricmp(p->keyword, L"text-section-shownumber")) {
+ wchar_t *q = uadv(p->keyword);
+ int n = 0;
+ if (uisdigit(*q)) {
+ n = utoi(q);
+ q = uadv(q);
+ }
+ if (n >= ret.nasect) {
+ int i;
+ ret.asect = sresize(ret.asect, n+1, alignstruct);
+ for (i = ret.nasect; i <= n; i++)
+ ret.asect[i] = ret.asect[ret.nasect-1];
+ ret.nasect = n+1;
+ }
+ ret.asect[n].number_at_all = utob(q);
} else if (!ustricmp(p->keyword, L"text-section-suffix")) {
wchar_t *q = uadv(p->keyword);
int n = 0;
}
if (n >= ret.nasect) {
int i;
- ret.asect = resize(ret.asect, n+1);
+ ret.asect = sresize(ret.asect, n+1, alignstruct);
for (i = ret.nasect; i <= n; i++) {
ret.asect[i] = ret.asect[ret.nasect-1];
}
word spaceword;
textfile tf;
wchar_t *prefixextra;
- int nesting, nestindent;
+ int nesting, nestbase, nestindent;
int indentb, indenta;
IGNORE(unused);
/*
* Open the output file.
*/
- tf.fp = fopen(conf.filename, "w");
+ if (!strcmp(conf.filename, "-"))
+ tf.fp = stdout;
+ else
+ tf.fp = fopen(conf.filename, "w");
if (!tf.fp) {
- error(err_cantopenw, conf.filename);
+ err_cantopenw(conf.filename);
return;
}
tf.charset = conf.charset;
conf.atitle, conf.indent, conf.width, &conf);
nestindent = conf.listindentbefore + conf.listindentafter;
- nesting = (conf.indent_preambles ? 0 : -conf.indent);
+ nestbase = (conf.indent_preambles ? 0 : -conf.indent);
+ nesting = nestbase;
/* Do the main document */
for (p = sourceform; p; p = p->next) switch (p->type) {
break;
case para_LcontPop:
nesting -= nestindent;
- assert(nesting >= 0);
+ assert(nesting >= nestbase);
break;
/*
* Tidy up
*/
text_output(&tf, NULL); /* end charset conversion */
- fclose(tf.fp);
+ if (tf.fp != stdout)
+ fclose(tf.fp);
sfree(conf.asect);
sfree(conf.filename);
}
wchar_t s[2];
s[0] = c;
s[1] = L'\0';
- while (n--)
+ while (n-- > 0)
text_output(tf, s);
}
int firstlinewidth, wrapwidth;
wrappedline *wrapping, *p;
- if (align.just_numbers && nprefix) {
- text_rdaddw(&t, nprefix, NULL, cfg);
- rdadds(&t, align.number_suffix);
- } else if (!align.just_numbers && tprefix) {
- text_rdaddw(&t, tprefix, NULL, cfg);
- rdadds(&t, align.number_suffix);
+ if (align.number_at_all) {
+ if (align.just_numbers && nprefix) {
+ text_rdaddw(&t, nprefix, NULL, cfg);
+ rdadds(&t, align.number_suffix);
+ } else if (!align.just_numbers && tprefix) {
+ text_rdaddw(&t, tprefix, NULL, cfg);
+ rdadds(&t, align.number_suffix);
+ }
}
margin = length = ustrwid(t.text ? t.text : L"", cfg->charset);
for (; text; text = text->next) if (text->type == word_WeakCode) {
int wid = ustrwid(text->text, tf->charset);
if (wid > width)
- error(err_text_codeline, &text->fpos, wid, width);
+ err_text_codeline(&text->fpos, wid, width);
text_output_many(tf, indent, L' ');
text_output(tf, text->text);
text_output(tf, L"\n");