if (me->escape_specials && (unsigned char)c < 32) {
if (me->escape_specials && UCH(c) < 32) {
PRIVATE void HTMLGen_put_character ARGS2(	HTStructured *, 	me,	char,			c){    if (me->escape_specials && (unsigned char)c < 32) {	if (c == HT_NON_BREAK_SPACE || c == HT_EN_SPACE ||	    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: /* &#xA0; */		HTMLGen_put_character(me, 'A');		HTMLGen_put_character(me, '0');		break;	    case HT_EN_SPACE: /* &#x2002; */		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: /* &#xAD; */		HTMLGen_put_character(me, 'A');		HTMLGen_put_character(me, 'D');		break;	    }	    c = ';';	}    }    *me->write_pointer++ = c;    if (c == '\n') {	HTMLGen_flush(me);	return;    }    /* 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 */	    p = strchr(delims, me->write_pointer[-2]);	    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     */    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];	    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->line_break[me->cleanness][0] = line_break_char;	    {  /* move next line in */		char * p = saved;		char *q;		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	    */	    {		int 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);			me->cleanness = i;		    } else {			me->line_break[i] = NULL;		    }		}	    }	    me->delete_line_break_char[0] = 0;	    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->write_pointer = me->buffer;	    flush_breaks(me);	    me->overflowed = YES;	}    }}