static paragraph *sourceparas;
static xhtmlfile *lastfile;
static xhtmlfile *xhtml_last_file = NULL;
-static int last_level=-1;
+static int last_level=-1, start_level;
static xhtmlsection *currentsection;
static xhtmlconfig xhtml_configure(paragraph *source)
*/
static int xhtml_do_contents(FILE *fp, xhtmlfile *file)
{
- int level, limit, start_level, count = 0;
+ int level, limit, count = 0;
if (!file)
return 0;
if (fp!=NULL) {
while (last_level > start_level) {
last_level--;
- fprintf(fp, "</ul>\n");
+ fprintf(fp, "</li></ul>\n");
}
}
return count;
if (fp!=NULL) {
while (last_level > start_level) {
last_level--;
- fprintf(fp, "</ul>\n");
+ fprintf(fp, "</li></ul>\n");
}
}
return count;
return FALSE;
if (fp==NULL || section->level < 0)
return TRUE;
- while (last_level > section->level) {
- last_level--;
- fprintf(fp, "</ul>\n");
- }
- while (last_level < section->level) {
+ if (last_level > section->level) {
+ while (last_level > section->level) {
+ last_level--;
+ fprintf(fp, "</li></ul>\n");
+ }
+ fprintf(fp, "</li>\n");
+ } else if (last_level < section->level) {
+ assert(last_level == section->level - 1);
last_level++;
fprintf(fp, "<ul>\n");
+ } else {
+ fprintf(fp, "</li>\n");
}
fprintf(fp, "<li><a href=\"%s#%s\">", section->file->filename, section->fragment);
if (section->para->kwtext) {
if (section->para->words) {
xhtml_para(fp, section->para->words, FALSE);
}
- fprintf(fp, "</a></li>\n");
+ fprintf(fp, "</a>\n");
return TRUE;
}
case para_Description:
case para_DescribedThing:
case para_BiblioCited:
- if (last_type!=p->type) {
+ if (last_type!=p->type &&
+ !(last_type==para_DescribedThing && p->type==para_Description) &&
+ !(last_type==para_Description && p->type==para_DescribedThing)) {
/* start up list if necessary */
if (p->type == para_Bullet) {
fprintf(fp, "<ul>\n");
closeofflist:
if (ptype == para_BiblioCited) {
fprintf(fp, "</dd>\n");
- } else if (p->type == para_DescribedThing) {
+ } else if (ptype == para_DescribedThing) {
fprintf(fp, "</dt>");
- } else if (p->type == para_Description) {
+ } else if (ptype == para_Description) {
fprintf(fp, "</dd>");
} else if (ptype == para_Bullet || ptype == para_NumberedList) {
fprintf(fp, "</li>");
int close_off=FALSE;
/* if (p2 && (xhtml_para_level(p2)>limit || xhtml_para_level(p2)==-1)) {*/
if (p2 && xhtml_para_level(p2)==-1) {
- if (p2->type != ptype && p2->type != para_LcontPush)
+ if (p2->type != ptype &&
+ !(p2->type==para_DescribedThing && ptype==para_Description) &&
+ !(p2->type==para_Description && ptype==para_DescribedThing) &&
+ p2->type != para_LcontPush)
close_off=TRUE;
} else {
close_off=TRUE;
rdaddc(&t, ']'); /* FIXME: configurability */
if (started)
- fprintf(fp, "<br>\n");
+ fprintf(fp, "<br />\n");
fprintf(fp, "%s\n", t.text);
sfree(t.text);
}