int trans(int c, char *p1) { int f; f = ROM; switch( c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '!': case '%': case '(': case '[': case ')': case ']': case ',': if (rf == ITAL) shim(); roman(c); break; case '.': if (rf == ROM) roman(c); else cs[csp++] = c; f = rf; break; case '|': if (rf == ITAL) shim(); shim(); roman(c); shim(); break; case '=': if (rf == ITAL) shim(); name4('e','q'); break; case '+': if (rf == ITAL) shim(); name4('p', 'l'); break; case '>': case '<': if (rf == ITAL) shim(); if (p1[psp]=='=') { /* look ahead for == <= >= */ name4(c,'='); psp++; } else { cs[csp++] = c; } break; case '-': if (rf == ITAL) shim(); if (p1[psp]=='>') { name4('-','>'); psp++; } else { name4('m','i'); } break; case '/': if (rf == ITAL) shim(); name4('s','l'); break; case '~': case ' ': shim(); shim(); break; case '^': shim(); break; case '\\': /* troff - pass 2 or 3 more chars */ if (rf == ITAL) shim(); cs[csp++] = c; cs[csp++] = c = p1[psp++]; cs[csp++] = p1[psp++]; if (c=='(') cs[csp++] = p1[psp++]; if (c=='*' && cs[csp-1] == '(') { cs[csp++] = p1[psp++]; cs[csp++] = p1[psp++]; } break; case '\'': cs[csp++] = '\\'; cs[csp++] = 'f'; cs[csp++] = rf==ITAL ? ITAL : ROM; name4('f','m'); cs[csp++] = '\\'; cs[csp++] = 'f'; cs[csp++] = 'P'; f = rf==ITAL ? ITAL : ROM; break; case 'f': if (ft == ITAL) { cs[csp++] = '\\'; cs[csp++] = '^'; cs[csp++] = 'f'; cs[csp++] = '\\'; cs[csp++] = '|'; /* trying | instead of ^ */ f = ITAL; } else cs[csp++] = 'f'; break; case 'j': if (ft == ITAL) { cs[csp++] = '\\'; cs[csp++] = '^'; cs[csp++] = 'j'; f = ITAL; } else cs[csp++] = 'j'; break; default: cs[csp++] = c; f = ft==ITAL ? ITAL : ROM; break; } return(f); }
int trans(int c, char *blah) { int f; if (isalpharune(c) && ft == ITAL && c != 'f' && c != 'j') { /* italic letter */ shim(pclass, nclass = ILET); cadd(c); return ITAL; } if (isalpharune(c) && ft != ITAL) { /* other letter */ shim(pclass, nclass = OLET); cadd(c); return ROM; } if (isdigitrune(c)) { shim(pclass, nclass = DIG); roman(c); return ROM; /* this is the right side font of this object */ } f = ROM; nclass = OTHER; switch (c) { case ':': case ';': case '!': case '%': case '?': shim(pclass, nclass); roman(c); return f; case '(': case '[': shim(pclass, nclass = LPAR); roman(c); return f; case ')': case ']': shim(pclass, nclass = RPAR); roman(c); return f; case ',': shim(pclass, nclass = OTHER); roman(c); return f; case '.': if (rf == ROM) roman(c); else cadd(c); return f; case '|': /* postscript needs help with default width! */ shim(pclass, nclass = VBAR); sadd("\\v'.17m'\\z|\\v'-.17m'\\|"); /* and height */ return f; case '=': shim(pclass, nclass = PLUS); sadd("\\(eq"); return f; case '+': shim(pclass, nclass = PLUS); sadd("\\(pl"); return f; case '>': case '<': /* >, >=, >>, <, <-, <=, << */ shim(pclass, nclass = PLUS); if (*psp == '=') { sadd(c == '<' ? "\\(<=" : "\\(>="); psp++; } else if (c == '<' && *psp == '-') { /* <- only */ sadd("\\(<-"); psp++; } else if (*psp == c) { /* << or >> */ cadd(c); cadd(c); psp++; } else { cadd(c); } return f; case '-': shim(pclass, nclass = PLUS); /* probably too big for ->'s */ if (*psp == '>') { sadd("\\(->"); psp++; } else { sadd("\\(mi"); } return f; case '/': shim(pclass, nclass = SLASH); cadd('/'); return f; case '~': case ' ': sadd("\\|\\|"); return f; case '^': sadd("\\|"); return f; case '\\': /* troff - pass only \(xx without comment */ shim(pclass, nclass); cadd('\\'); cadd(c = *psp++); if (c == '(' && *psp && *(psp+1)) { cadd(*psp++); cadd(*psp++); } else fprintf(stderr, "eqn warning: unquoted troff command \\%c, file %s:%d\n", c, curfile->fname, curfile->lineno); return f; case '\'': shim(pclass, nclass); sadd("\\(fm"); return f; case 'f': if (ft == ITAL) { shim(pclass, nclass = ILETF); cadd('f'); f = ITAL; } else cadd('f'); return f; case 'j': if (ft == ITAL) { shim(pclass, nclass = ILETJ); cadd('j'); f = ITAL; } else cadd('j'); return f; default: shim(pclass, nclass); cadd(c); return ft==ITAL ? ITAL : ROM; } }
void html_li(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { int t = par_format.flags & P_LISTMASK; /* When handling the code <li><li> @was_li will be 1 and it means we * have to insert a line break since no list item content has done it * for us. */ if (html_context->was_li) { html_context->line_breax = 0; ln_break(html_context, 1); } /*kill_html_stack_until(html_context, 0 "", "UL", "OL", NULL);*/ if (t == P_NO_BULLET) { /* Print nothing. */ } else if (!par_format.list_number) { if (t == P_O) /* Print U+25E6 WHITE BULLET. */ put_chrs(html_context, (unsigned char *)"◦", 7); else if (t == P_SQUARE) /* Print U+25AA BLACK SMALL SQUARE. */ put_chrs(html_context, (unsigned char *)"▪", 7); else /* Print U+2022 BULLET. */ put_chrs(html_context, (unsigned char *)"•", 7); put_chrs(html_context, (unsigned char *)" ", 6); par_format.leftmargin += 2; par_format.align = ALIGN_LEFT; } else { unsigned char c = 0; int nlen; int t = par_format.flags & P_LISTMASK; int s = get_num(a, (unsigned char *)"value", html_context->doc_cp); struct string n; if (!init_string(&n)) return; if (s != -1) par_format.list_number = s; if (t == P_ALPHA || t == P_alpha) { unsigned char n0; put_chrs(html_context, (unsigned char *)" ", 6); c = 1; n0 = par_format.list_number ? (par_format.list_number - 1) % 26 + (t == P_ALPHA ? 'A' : 'a') : 0; if (n0) add_char_to_string(&n, n0); } else if (t == P_ROMAN || t == P_roman) { roman(&n, par_format.list_number); if (t == P_ROMAN) { unsigned char *x; for (x = n.source; *x; x++) *x = c_toupper(*x); } } else { unsigned char n0[64]; if (par_format.list_number < 10) { put_chrs(html_context, (unsigned char *)" ", 6); c = 1; } ulongcat(n0, NULL, par_format.list_number, (sizeof(n) - 1), 0); add_to_string(&n, n0); } nlen = n.length; put_chrs(html_context, n.source, nlen); put_chrs(html_context, (unsigned char *)". ", 7); par_format.leftmargin += nlen + c + 2; par_format.align = ALIGN_LEFT; done_string(&n); { struct html_element *element; element = search_html_stack(html_context, (unsigned char *)"ol"); if (element) element->parattr.list_number = par_format.list_number + 1; } par_format.list_number = 0; } html_context->putsp = HTML_SPACE_SUPPRESS; html_context->line_breax = 2; html_context->was_li = 1; }