diff options
Diffstat (limited to 'WWW/Library/Implementation/HTMLGen.c')
-rw-r--r-- | WWW/Library/Implementation/HTMLGen.c | 539 |
1 files changed, 260 insertions, 279 deletions
diff --git a/WWW/Library/Implementation/HTMLGen.c b/WWW/Library/Implementation/HTMLGen.c index 51afd388..c0821dee 100644 --- a/WWW/Library/Implementation/HTMLGen.c +++ b/WWW/Library/Implementation/HTMLGen.c @@ -1,16 +1,16 @@ /* HTML Generator -** ============== -** -** This version of the HTML object sends HTML markup to the output stream. -** -** Bugs: Line wrapping is not done at all. -** All data handled as PCDATA. -** Should convert old XMP, LISTING and PLAINTEXT to PRE. -** -** It is not obvious to me right now whether the HEAD should be generated -** from the incomming data or the anchor. Currently it is from the former -** which is cleanest. -*/ + * ============== + * + * This version of the HTML object sends HTML markup to the output stream. + * + * Bugs: Line wrapping is not done at all. + * All data handled as PCDATA. + * Should convert old XMP, LISTING and PLAINTEXT to PRE. + * + * It is not obvious to me right now whether the HEAD should be generated + * from the incomming data or the anchor. Currently it is from the former + * which is cleanest. + */ #include <HTUtils.h> @@ -49,53 +49,52 @@ static int hcode; #endif /* HTML Object -** ----------- -*/ + * ----------- + */ struct _HTStream { - const HTStreamClass * isa; - HTStream * target; - HTStreamClass targetClass; /* COPY for speed */ + const HTStreamClass *isa; + HTStream *target; + HTStreamClass targetClass; /* COPY for speed */ }; struct _HTStructured { - const HTStructuredClass * isa; - HTStream * target; - HTStreamClass targetClass; /* COPY for speed */ - - char buffer[BUFFER_SIZE+1]; /* 1for NL */ - int buffer_maxchars; - char * write_pointer; - char * line_break [MAX_CLEANNESS+1]; - int cleanness; - BOOL overflowed; - BOOL delete_line_break_char[MAX_CLEANNESS+1]; - BOOL preformatted; - BOOL escape_specials; - BOOL in_attrval; + const HTStructuredClass *isa; + HTStream *target; + HTStreamClass targetClass; /* COPY for speed */ + + char buffer[BUFFER_SIZE + 1]; /* 1for NL */ + int buffer_maxchars; + char *write_pointer; + char *line_break[MAX_CLEANNESS + 1]; + int cleanness; + BOOL overflowed; + BOOL delete_line_break_char[MAX_CLEANNESS + 1]; + BOOL preformatted; + BOOL escape_specials; + BOOL in_attrval; #ifdef USE_COLOR_STYLE - HText * text; + HText *text; #endif }; /* Flush Buffer -** ------------ -*/ + * ------------ + */ -static void flush_breaks ( - HTStructured * me) +static void flush_breaks(HTStructured * me) { int i; - for (i=0; i<= MAX_CLEANNESS; i++) { + + for (i = 0; i <= MAX_CLEANNESS; i++) { me->line_break[i] = NULL; } } -static void HTMLGen_flush ( - HTStructured * me) +static void HTMLGen_flush(HTStructured * me) { - (*me->targetClass.put_block)(me->target, - me->buffer, - me->write_pointer - me->buffer); + (*me->targetClass.put_block) (me->target, + me->buffer, + me->write_pointer - me->buffer); me->write_pointer = me->buffer; flush_breaks(me); me->cleanness = 0; @@ -104,34 +103,30 @@ static void HTMLGen_flush ( #ifdef USE_COLOR_STYLE /* - * We need to flush our buffer each time before we effect a color style - * change, this also relies on the subsequent stage not doing any - * buffering - this is currently true, in cases where it matters the - * target stream should be the HTPlain converter. - * The flushing currently prevents reasonable line breaking in lines - * with tags. Since color styles help visual scanning of displayed - * source lines, and long lines are wrapped in GridText anyway, this - * is probably acceptable (or even A Good Thing - more to see in one - * screenful). - * The pointer to the HText structure is initialized here before - * we effect the first style change. Getting it from the global - * HTMainText variable isn't very clean, since it relies on the fact - * that HText_new() has already been called for the current stream - * stack's document by the time we start processing the first element; - * we rely on HTMLGenerator's callers (HTMLParsedPresent in particular) - * to guarantee this when it matters. Normally the target stream will - * have been setup by HTPlainPresent, which does what we need in this - * respect. (A check whether we have the right output stream could be - * done by checking that targetClass.name is "PlainPresenter" or similar.) + * We need to flush our buffer each time before we effect a color style change, + * this also relies on the subsequent stage not doing any buffering - this is + * currently true, in cases where it matters the target stream should be the + * HTPlain converter. The flushing currently prevents reasonable line breaking + * in lines with tags. Since color styles help visual scanning of displayed + * source lines, and long lines are wrapped in GridText anyway, this is + * probably acceptable (or even A Good Thing - more to see in one screenful). + * The pointer to the HText structure is initialized here before we effect the + * first style change. Getting it from the global HTMainText variable isn't + * very clean, since it relies on the fact that HText_new() has already been + * called for the current stream stack's document by the time we start + * processing the first element; we rely on HTMLGenerator's callers + * (HTMLParsedPresent in particular) to guarantee this when it matters. + * Normally the target stream will have been setup by HTPlainPresent, which + * does what we need in this respect. (A check whether we have the right + * output stream could be done by checking that targetClass.name is + * "PlainPresenter" or similar.) * - * All special color style handling is only done if LYPreparsedSource - * is set. We could always do it for displaying source generated by - * an internal gateway, but this makes the rule more simple for the - * user: color styles are applied to html source only with the - * -preparsed flag. - kw + * All special color style handling is only done if LYPreparsedSource is set. + * We could always do it for displaying source generated by an internal + * gateway, but this makes the rule more simple for the user: color styles are + * applied to html source only with the -preparsed flag. - kw */ -static void do_cstyle_flush ( - HTStructured * me) +static void do_cstyle_flush(HTStructured * me) { if (!me->text && LYPreparsedSource) { me->text = HTMainText; @@ -143,19 +138,18 @@ static void do_cstyle_flush ( #endif /* COLOR_STYLE */ /* Weighted optional line break -** -** We keep track of all the breaks for when we chop the line -*/ + * + * We keep track of all the breaks for when we chop the line + */ -static void allow_break ( - HTStructured * me, - int new_cleanness, - BOOL dlbc) +static void allow_break(HTStructured * me, int new_cleanness, + BOOL dlbc) { - if (dlbc && me->write_pointer == me->buffer) dlbc = NO; + if (dlbc && me->write_pointer == me->buffer) + dlbc = NO; me->line_break[new_cleanness] = - dlbc ? me->write_pointer - 1 /* Point to space */ - : me->write_pointer ; /* point to gap */ + dlbc ? me->write_pointer - 1 /* Point to space */ + : me->write_pointer; /* point to gap */ me->delete_line_break_char[new_cleanness] = dlbc; if (new_cleanness >= me->cleanness && (me->overflowed || me->line_break[new_cleanness] > me->buffer)) @@ -163,40 +157,38 @@ static void allow_break ( } /* Character handling -** ------------------ -** -** The tricky bits are the line break handling. This attempts -** to synchrononise line breaks on sentence or phrase ends. This -** is important if one stores SGML files in a line-oriented code -** repository, so that if a small change is made, line ends don't -** shift in a ripple-through to apparently change a large part of the -** file. We give extra "cleanness" to spaces appearing directly -** after periods (full stops), [semi]colons and commas. -** This should make the source files easier to read and modify -** by hand, too, though this is not a primary design consideration. TBL -*/ -static void HTMLGen_put_character ( - HTStructured * me, - char c) + * ------------------ + * + * The tricky bits are the line break handling. This attempts + * to synchrononise line breaks on sentence or phrase ends. This + * is important if one stores SGML files in a line-oriented code + * repository, so that if a small change is made, line ends don't + * shift in a ripple-through to apparently change a large part of the + * file. We give extra "cleanness" to spaces appearing directly + * after periods (full stops), [semi]colons and commas. + * This should make the source files easier to read and modify + * by hand, too, though this is not a primary design consideration. TBL + */ +static void HTMLGen_put_character(HTStructured * me, char c) { if (me->escape_specials && UCH(c) < 32) { if (c == HT_NON_BREAK_SPACE || c == HT_EN_SPACE || - c == LY_SOFT_HYPHEN) { /* recursion... */ + c == LY_SOFT_HYPHEN) { /* recursion... */ HTMLGen_put_character(me, '&'); HTMLGen_put_character(me, '#'); HTMLGen_put_character(me, 'x'); - switch(c) { - case HT_NON_BREAK_SPACE: /*   */ + switch (c) { + case HT_NON_BREAK_SPACE: /*   */ HTMLGen_put_character(me, 'A'); HTMLGen_put_character(me, '0'); break; - case HT_EN_SPACE: /*   */ + case HT_EN_SPACE: /*   */ HTMLGen_put_character(me, '2'); HTMLGen_put_character(me, '0'); HTMLGen_put_character(me, '0'); HTMLGen_put_character(me, '2'); break; - case LY_SOFT_HYPHEN: /* ­ */ + case LY_SOFT_HYPHEN: /* ­ */ HTMLGen_put_character(me, 'A'); HTMLGen_put_character(me, 'D'); break; @@ -213,54 +205,62 @@ static void HTMLGen_put_character ( } /* Figure our whether we can break at this point - */ + */ if ((!me->preformatted && (c == ' ' || c == '\t'))) { int new_cleanness = 3; + if (me->write_pointer > (me->buffer + 1)) { char delims[5]; - char * p; - strcpy(delims, ",;:."); /* @@ english bias */ + char *p; + + strcpy(delims, ",;:."); /* @@ english bias */ p = strchr(delims, me->write_pointer[-2]); - if (p) new_cleanness = p - delims + 6; - if (!me->in_attrval) new_cleanness += 10; + if (p) + new_cleanness = p - delims + 6; + if (!me->in_attrval) + new_cleanness += 10; } allow_break(me, new_cleanness, YES); } /* - * Flush buffer out when full, or whenever the line is over - * the nominal maximum and we can break at all + * Flush buffer out when full, or whenever the line is over the nominal + * maximum and we can break at all */ if (me->write_pointer >= me->buffer + me->buffer_maxchars || (me->overflowed && me->cleanness)) { if (me->cleanness) { char line_break_char = me->line_break[me->cleanness][0]; - char * saved = me->line_break[me->cleanness]; + char *saved = me->line_break[me->cleanness]; - if (me->delete_line_break_char[me->cleanness]) saved++; + if (me->delete_line_break_char[me->cleanness]) + saved++; me->line_break[me->cleanness][0] = '\n'; - (*me->targetClass.put_block)(me->target, - me->buffer, - me->line_break[me->cleanness] - me->buffer + 1); + (*me->targetClass.put_block) (me->target, + me->buffer, + me->line_break[me->cleanness] - + me->buffer + 1); me->line_break[me->cleanness][0] = line_break_char; - { /* move next line in */ - char * p = saved; + { /* move next line in */ + char *p = saved; char *q; - for (q = me->buffer; p < me->write_pointer; ) + + for (q = me->buffer; p < me->write_pointer;) *q++ = *p++; } me->cleanness = 0; /* Now we have to check whether ther are any perfectly good breaks - ** which weren't good enough for the last line but may be - ** good enough for the next - */ + * which weren't good enough for the last line but may be good + * enough for the next + */ { int i; - for(i=0; i <= MAX_CLEANNESS; i++) { + + for (i = 0; i <= MAX_CLEANNESS; i++) { if (me->line_break[i] != NULL && me->line_break[i] > saved) { me->line_break[i] = me->line_break[i] - - (saved-me->buffer); + (saved - me->buffer); me->cleanness = i; } else { me->line_break[i] = NULL; @@ -269,13 +269,13 @@ static void HTMLGen_put_character ( } me->delete_line_break_char[0] = 0; - me->write_pointer = me->write_pointer - (saved-me->buffer); + me->write_pointer = me->write_pointer - (saved - me->buffer); me->overflowed = NO; } else { - (*me->targetClass.put_block)(me->target, - me->buffer, - me->buffer_maxchars); + (*me->targetClass.put_block) (me->target, + me->buffer, + me->buffer_maxchars); me->write_pointer = me->buffer; flush_breaks(me); me->overflowed = YES; @@ -284,46 +284,40 @@ static void HTMLGen_put_character ( } /* String handling -** --------------- -*/ -static void HTMLGen_put_string ( - HTStructured * me, - const char * s) + * --------------- + */ +static void HTMLGen_put_string(HTStructured * me, const char *s) { - const char * p; + const char *p; for (p = s; *p; p++) HTMLGen_put_character(me, *p); } -static void HTMLGen_write ( - HTStructured * me, - const char * s, - int l) +static void HTMLGen_write(HTStructured * me, const char *s, + int l) { - const char * p; + const char *p; for (p = s; p < (s + l); p++) HTMLGen_put_character(me, *p); } /* Start Element -** ------------- -** -** Within the opening tag, there may be spaces -** and the line may be broken at these spaces. -*/ -static int HTMLGen_start_element ( - HTStructured * me, - int element_number, - const BOOL* present, - const char ** value, - int charset GCC_UNUSED, - char ** insert GCC_UNUSED) + * ------------- + * + * Within the opening tag, there may be spaces + * and the line may be broken at these spaces. + */ +static int HTMLGen_start_element(HTStructured * me, int element_number, + const BOOL *present, + const char **value, + int charset GCC_UNUSED, + char **insert GCC_UNUSED) { int i; BOOL was_preformatted = me->preformatted; - HTTag * tag = &HTML_dtd.tags[element_number]; + HTTag *tag = &HTML_dtd.tags[element_number]; #if defined(USE_COLOR_STYLE) char *title = NULL; @@ -331,49 +325,47 @@ static int HTMLGen_start_element ( if (LYPreparsedSource) { /* - * Same logic as in HTML_start_element, copied from there. - kw + * Same logic as in HTML_start_element, copied from there. - kw */ - HTSprintf (&Style_className, ";%s", HTML_dtd.tags[element_number].name); - strcpy (myHash, HTML_dtd.tags[element_number].name); - if (class_string[0]) - { + HTSprintf(&Style_className, ";%s", HTML_dtd.tags[element_number].name); + strcpy(myHash, HTML_dtd.tags[element_number].name); + if (class_string[0]) { int len = strlen(myHash); - sprintf (myHash + len, ".%.*s", (int) sizeof(myHash) - len - 2, class_string); - HTSprintf (&Style_className, ".%s", class_string); + + sprintf(myHash + len, ".%.*s", (int) sizeof(myHash) - len - 2, class_string); + HTSprintf(&Style_className, ".%s", class_string); } class_string[0] = '\0'; strtolower(myHash); hcode = hash_code(myHash); strtolower(Style_className); - if (TRACE_STYLE) - { + if (TRACE_STYLE) { fprintf(tfp, "CSSTRIM:%s -> %d", myHash, hcode); - if (hashStyles[hcode].code!=hcode) - { + if (hashStyles[hcode].code != hcode) { char *rp = strrchr(myHash, '.'); + fprintf(tfp, " (undefined) %s\n", myHash); - if (rp) - { + if (rp) { int hcd; - *rp = '\0'; /* trim the class */ + + *rp = '\0'; /* trim the class */ hcd = hash_code(myHash); fprintf(tfp, "CSS:%s -> %d", myHash, hcd); - if (hashStyles[hcd].code!=hcd) + if (hashStyles[hcd].code != hcd) fprintf(tfp, " (undefined) %s\n", myHash); else fprintf(tfp, " ca=%d\n", hashStyles[hcd].color); } - } - else + } else fprintf(tfp, " ca=%d\n", hashStyles[hcode].color); } - if (displayStyles[element_number + STARTAT].color > -2) /* actually set */ + if (displayStyles[element_number + STARTAT].color > -2) /* actually set */ { CTRACE2(TRACE_STYLE, (tfp, "CSSTRIM: start_element: top <%s>\n", - HTML_dtd.tags[element_number].name)); + HTML_dtd.tags[element_number].name)); do_cstyle_flush(me); HText_characterStyle(me->text, hcode, 1); } @@ -384,6 +376,7 @@ static int HTMLGen_start_element ( HTMLGen_put_string(me, tag->name); if (present) { BOOL had_attr = NO; + for (i = 0; i < tag->number_of_attributes; i++) { if (present[i]) { had_attr = YES; @@ -391,14 +384,14 @@ static int HTMLGen_start_element ( allow_break(me, 11, YES); #ifdef USE_COLOR_STYLE /* - * Try to mimic HTML_start_element's special handling - * for HTML_LINK. If applicable, color the displayed - * attribute / value pairs differently. - kw + * Try to mimic HTML_start_element's special handling for + * HTML_LINK. If applicable, color the displayed attribute / + * value pairs differently. - kw */ if (LYPreparsedSource && element_number == HTML_LINK && !title && present[HTML_LINK_CLASS] && - value && *value[HTML_LINK_CLASS]!='\0' && + value && *value[HTML_LINK_CLASS] != '\0' && !present[HTML_LINK_REV] && (present[HTML_LINK_REL] || present[HTML_LINK_HREF])) { if (present[HTML_LINK_TITLE] && *value[HTML_LINK_TITLE]) { @@ -406,7 +399,7 @@ static int HTMLGen_start_element ( LYTrimHead(title); LYTrimTail(title); } - if ((!title || *title=='\0') && present[HTML_LINK_REL]) { + if ((!title || *title == '\0') && present[HTML_LINK_REL]) { StrAllocCopy(title, value[HTML_LINK_REL]); } if (title && *title) { @@ -432,8 +425,9 @@ static int HTMLGen_start_element ( HTMLGen_put_string(me, "='"); HTMLGen_put_string(me, value[i]); HTMLGen_put_character(me, '\''); - } else { /* attribute value has both kinds of quotes */ + } else { /* attribute value has both kinds of quotes */ const char *p; + HTMLGen_put_string(me, "=\""); for (p = value[i]; *p; p++) { if (*p != '"') { @@ -452,7 +446,7 @@ static int HTMLGen_start_element ( #ifdef USE_COLOR_STYLE if (had_attr && LYPreparsedSource && element_number == HTML_LINK) { /* - * Clean up after special HTML_LINK handling - kw + * Clean up after special HTML_LINK handling - kw */ if (title && *title) { do_cstyle_flush(me); @@ -465,15 +459,15 @@ static int HTMLGen_start_element ( if (had_attr) allow_break(me, 12, NO); } - HTMLGen_put_string(me, ">"); /* got rid of \n LJM */ + HTMLGen_put_string(me, ">"); /* got rid of \n LJM */ /* - * Make very specific HTML assumption that PRE can't be nested! + * Make very specific HTML assumption that PRE can't be nested! */ - me->preformatted = (element_number == HTML_PRE) ? YES : was_preformatted; + me->preformatted = (element_number == HTML_PRE) ? YES : was_preformatted; /* - * Can break after element start. + * Can break after element start. */ if (!me->preformatted && tag->contents != SGML_EMPTY) { if (HTML_dtd.tags[element_number].contents == SGML_ELEMENT) @@ -481,15 +475,13 @@ static int HTMLGen_start_element ( else allow_break(me, 2, NO); } - #if defined(USE_COLOR_STYLE) /* - * Same logic as in HTML_start_element, copied from there. - kw + * Same logic as in HTML_start_element, copied from there. - kw */ /* end really empty tags straight away */ - if (LYPreparsedSource && ReallyEmptyTagNum(element_number)) - { + if (LYPreparsedSource && ReallyEmptyTagNum(element_number)) { CTRACE2(TRACE_STYLE, (tfp, "STYLE:begin_element:ending EMPTY element style\n")); do_cstyle_flush(me); @@ -500,14 +492,14 @@ static int HTMLGen_start_element ( #endif /* USE_COLOR_STYLE */ if (element_number == HTML_OBJECT && tag->contents == SGML_LITTERAL) { /* - * These conditions only approximate the ones used in HTML.c. - * Let our SGML parser know that further content is to be parsed - * normally not literally. - kw + * These conditions only approximate the ones used in HTML.c. Let our + * SGML parser know that further content is to be parsed normally not + * literally. - kw */ if (!present) { return HT_PARSER_OTHER_CONTENT; } else if (!present[HTML_OBJECT_DECLARE] && - !(present[HTML_OBJECT_NAME] && + !(present[HTML_OBJECT_NAME] && value[HTML_OBJECT_NAME] && *value[HTML_OBJECT_NAME])) { if (present[HTML_OBJECT_SHAPES] || !(present[HTML_OBJECT_USEMAP] && @@ -519,25 +511,23 @@ static int HTMLGen_start_element ( } /* End Element -** ----------- -** -*/ + * ----------- + * + */ /* When we end an element, the style must be returned to that -** in effect before that element. Note that anchors (etc?) -** don't have an associated style, so that we must scan down the -** stack for an element with a defined style. (In fact, the styles -** should be linked to the whole stack not just the top one.) -** TBL 921119 -*/ -static int HTMLGen_end_element ( - HTStructured * me, - int element_number, - char ** insert GCC_UNUSED) + * in effect before that element. Note that anchors (etc?) + * don't have an associated style, so that we must scan down the + * stack for an element with a defined style. (In fact, the styles + * should be linked to the whole stack not just the top one.) + * TBL 921119 + */ +static int HTMLGen_end_element(HTStructured * me, int element_number, + char **insert GCC_UNUSED) { if (!me->preformatted && HTML_dtd.tags[element_number].contents != SGML_EMPTY) { /* - * Can break before element end. + * Can break before element end. */ if (HTML_dtd.tags[element_number].contents == SGML_ELEMENT) allow_break(me, 14, NO); @@ -552,7 +542,7 @@ static int HTMLGen_end_element ( } #ifdef USE_COLOR_STYLE /* - * Same logic as in HTML_end_element, copied from there. - kw + * Same logic as in HTML_end_element, copied from there. - kw */ TrimColorClass(HTML_dtd.tags[element_number].name, Style_className, &hcode); @@ -568,49 +558,43 @@ static int HTMLGen_end_element ( } /* Expanding entities -** ------------------ -** -*/ -static int HTMLGen_put_entity ( - HTStructured * me, - int entity_number) + * ------------------ + * + */ +static int HTMLGen_put_entity(HTStructured * me, int entity_number) { int nent = HTML_dtd.number_of_entities; HTMLGen_put_character(me, '&'); if (entity_number < nent) { - HTMLGen_put_string(me, HTML_dtd.entity_names[entity_number]); + HTMLGen_put_string(me, HTML_dtd.entity_names[entity_number]); } HTMLGen_put_character(me, ';'); return HT_OK; } /* Free an HTML object -** ------------------- -** -*/ -static void HTMLGen_free ( - HTStructured * me) + * ------------------- + * + */ +static void HTMLGen_free(HTStructured * me) { - (*me->targetClass.put_character)(me->target, '\n'); + (*me->targetClass.put_character) (me->target, '\n'); HTMLGen_flush(me); - (*me->targetClass._free)(me->target); /* ripple through */ + (*me->targetClass._free) (me->target); /* ripple through */ #ifdef USE_COLOR_STYLE FREE(Style_className); #endif FREE(me); } -static void PlainToHTML_free ( - HTStructured * me) +static void PlainToHTML_free(HTStructured * me) { HTMLGen_end_element(me, HTML_PRE, 0); HTMLGen_free(me); } -static void HTMLGen_abort ( - HTStructured * me, - HTError e GCC_UNUSED) +static void HTMLGen_abort(HTStructured * me, HTError e GCC_UNUSED) { HTMLGen_free(me); #ifdef USE_COLOR_STYLE @@ -618,82 +602,79 @@ static void HTMLGen_abort ( #endif } -static void PlainToHTML_abort ( - HTStructured * me, - HTError e GCC_UNUSED) +static void PlainToHTML_abort(HTStructured * me, HTError e GCC_UNUSED) { PlainToHTML_free(me); } /* Structured Object Class -** ----------------------- -*/ -static const HTStructuredClass HTMLGeneration = /* As opposed to print etc */ + * ----------------------- + */ +static const HTStructuredClass HTMLGeneration = /* As opposed to print etc */ { - "HTMLGen", - HTMLGen_free, - HTMLGen_abort, - HTMLGen_put_character, HTMLGen_put_string, HTMLGen_write, - HTMLGen_start_element, HTMLGen_end_element, - HTMLGen_put_entity + "HTMLGen", + HTMLGen_free, + HTMLGen_abort, + HTMLGen_put_character, HTMLGen_put_string, HTMLGen_write, + HTMLGen_start_element, HTMLGen_end_element, + HTMLGen_put_entity }; /* Subclass-specific Methods -** ------------------------- -*/ -extern int LYcols; /* LYCurses.h, set in LYMain.c */ + * ------------------------- + */ +extern int LYcols; /* LYCurses.h, set in LYMain.c */ -HTStructured * HTMLGenerator ( - HTStream * output) +HTStructured *HTMLGenerator(HTStream *output) { - HTStructured* me = (HTStructured*)malloc(sizeof(*me)); + HTStructured *me = (HTStructured *) malloc(sizeof(*me)); + if (me == NULL) outofmem(__FILE__, "HTMLGenerator"); me->isa = &HTMLGeneration; me->target = output; - me->targetClass = *me->target->isa; /* Copy pointers to routines for speed*/ + me->targetClass = *me->target->isa; /* Copy pointers to routines for speed */ me->write_pointer = me->buffer; flush_breaks(me); me->line_break[0] = me->buffer; - me->cleanness = 0; + me->cleanness = 0; me->overflowed = NO; me->delete_line_break_char[0] = NO; - me->preformatted = NO; + me->preformatted = NO; me->in_attrval = NO; /* - * For what line length should we attempt to wrap ? - kw + * For what line length should we attempt to wrap ? - kw */ if (!LYPreparsedSource) { - me->buffer_maxchars = 80; /* work as before - kw */ + me->buffer_maxchars = 80; /* work as before - kw */ } else if (dump_output_width > 1) { - me->buffer_maxchars = dump_output_width; /* try to honor -width - kw */ + me->buffer_maxchars = dump_output_width; /* try to honor -width - kw */ } else if (dump_output_immediately) { - me->buffer_maxchars = 80; /* try to honor -width - kw */ + me->buffer_maxchars = 80; /* try to honor -width - kw */ } else { me->buffer_maxchars = LYcols - 2; - if (me->buffer_maxchars < 38) /* too narrow, let GridText deal */ + if (me->buffer_maxchars < 38) /* too narrow, let GridText deal */ me->buffer_maxchars = 40; } - if (me->buffer_maxchars > 900) /* likely not true - kw */ + if (me->buffer_maxchars > 900) /* likely not true - kw */ me->buffer_maxchars = 78; - if (me->buffer_maxchars > BUFFER_SIZE) /* must not be larger! */ + if (me->buffer_maxchars > BUFFER_SIZE) /* must not be larger! */ me->buffer_maxchars = BUFFER_SIZE - 2; /* - * If dump_output_immediately is set, there likely isn't anything - * after this stream to interpret the Lynx special chars. Also - * if they get displayed via HTPlain, that will probably make - * non-breaking space chars etc. invisible. So let's translate - * them to numerical character references. For debugging - * purposes we'll use the new hex format. + * If dump_output_immediately is set, there likely isn't anything after + * this stream to interpret the Lynx special chars. Also if they get + * displayed via HTPlain, that will probably make non-breaking space chars + * etc. invisible. So let's translate them to numerical character + * references. For debugging purposes we'll use the new hex format. */ me->escape_specials = LYPreparsedSource; #ifdef USE_COLOR_STYLE - me->text = NULL; /* Will be initialized when first needed. - kw */ + me->text = NULL; /* Will be initialized when first needed. - kw */ FREE(Style_className); class_string[0] = '\0'; #endif /* COLOR_STYLE */ @@ -702,46 +683,46 @@ HTStructured * HTMLGenerator ( } /* Stream Object Class -** ------------------- -** -** This object just converts a plain text stream into HTML -** It is officially a structured strem but only the stream bits exist. -** This is just the easiest way of typecasting all the routines. -*/ + * ------------------- + * + * This object just converts a plain text stream into HTML + * It is officially a structured strem but only the stream bits exist. + * This is just the easiest way of typecasting all the routines. + */ static const HTStructuredClass PlainToHTMLConversion = { - "plaintexttoHTML", - HTMLGen_free, - PlainToHTML_abort, - HTMLGen_put_character, - HTMLGen_put_string, - HTMLGen_write, - NULL, /* Structured stuff */ - NULL, - NULL + "plaintexttoHTML", + HTMLGen_free, + PlainToHTML_abort, + HTMLGen_put_character, + HTMLGen_put_string, + HTMLGen_write, + NULL, /* Structured stuff */ + NULL, + NULL }; /* HTConverter from plain text to HTML Stream -** ------------------------------------------ -*/ -HTStream* HTPlainToHTML ( - HTPresentation * pres GCC_UNUSED, - HTParentAnchor * anchor GCC_UNUSED, - HTStream * sink) + * ------------------------------------------ + */ +HTStream *HTPlainToHTML(HTPresentation *pres GCC_UNUSED, + HTParentAnchor *anchor GCC_UNUSED, + HTStream *sink) { - HTStructured *me = (HTStructured *)malloc(sizeof(*me)); + HTStructured *me = (HTStructured *) malloc(sizeof(*me)); + if (me == NULL) outofmem(__FILE__, "PlainToHTML"); - me->isa = (const HTStructuredClass *)&PlainToHTMLConversion; + me->isa = (const HTStructuredClass *) &PlainToHTMLConversion; /* - * Copy pointers to routines for speed. + * Copy pointers to routines for speed. */ me->target = sink; me->targetClass = *me->target->isa; me->write_pointer = me->buffer; flush_breaks(me); - me->cleanness = 0; + me->cleanness = 0; me->overflowed = NO; me->delete_line_break_char[0] = NO; /* try to honor -width - kw */ @@ -752,5 +733,5 @@ HTStream* HTPlainToHTML ( me->preformatted = YES; me->escape_specials = NO; me->in_attrval = NO; - return (HTStream*) me; + return (HTStream *) me; } |