char *scr_single_func_w( char * in, char * end, char * * result ) { char * pchar; sub_index var_ind; symvar symvar_entry; symsub * symsubval; int rc; int len; uint32_t width; if( *(in + 3) == '&' ) { // symbol name pchar = scan_sym( in + 4, &symvar_entry, &var_ind ); if( symvar_entry.flags & local_var ) { // lookup var in dict rc = find_symvar_l( &input_cbs->local_dict, symvar_entry.name, var_ind, &symsubval ); } else { rc = find_symvar( &global_dict, symvar_entry.name, var_ind, &symsubval ); } if( rc == 2 ) { width = cop_text_width( symsubval->value, strlen( symsubval->value ), g_curr_font); } else { /*******************************************************************/ /* for undefined variable calc length of name, & and perhaps * */ /*******************************************************************/ width = cop_text_width( symvar_entry.name, strlen( symvar_entry.name ), g_curr_font ) + wgml_fonts[g_curr_font].width_table['&']; if( symvar_entry.flags & local_var ) { // add width of * width += wgml_fonts[g_curr_font].width_table['*']; } } } else { // string pchar = in + 3; len = 0; while( !((*pchar == ' ') || (*pchar == '.') || (pchar == end)) ) { len++; pchar++; } width = cop_text_width( in + 3, len, g_curr_font ); } len = width; width = (width * CPI + g_resh / 2) / g_resh; sprintf( *result, "%d", width ); #if 0 // perhaps as debug output sprintf( *result + strlen( *result ), " %d", len ); #endif *result += strlen( *result ); **result = '\0'; if( *pchar == '.' ) { pchar++; // skip optional terminating dot } ProcFlags.substituted = true; // something changed return( pchar ); }
static void prep_docnum_line( text_line * p_line, char * p ) { text_chars * curr_t; uint32_t h_left; uint32_t h_right; h_left = g_page_left + conv_hor_unit( &layout_work.docnum.left_adjust ); h_right = g_page_right - conv_hor_unit( &layout_work.docnum.right_adjust ); if( *p ) { curr_t = alloc_text_chars( layout_work.docnum.string, 1 + strlen( p ) + strlen( layout_work.docnum.string ), g_curr_font ); } else { curr_t = alloc_text_chars( layout_work.docnum.string, 1 + strlen( layout_work.docnum.string ), g_curr_font ); } if( *p ) { strcat_s( curr_t->text, curr_t->length, p ); } curr_t->count = strlen( curr_t->text ); curr_t->count = len_to_trail_space( curr_t->text, curr_t->count ); intrans( curr_t->text, &curr_t->count, g_curr_font ); curr_t->width = cop_text_width( curr_t->text, curr_t->count, g_curr_font ); while( curr_t->width > (h_right - h_left) ) { // too long for line if( curr_t->count < 2) { // sanity check break; } curr_t->count -= 1; // truncate text curr_t->width = cop_text_width( curr_t->text, curr_t->count, g_curr_font ); } p_line->first = curr_t; p_line->last = curr_t; p_line->line_height = wgml_fonts[g_curr_font].line_height; curr_t->x_address = h_left; if( layout_work.docnum.page_position == pos_center ) { if( h_left + curr_t->width < h_right ) { curr_t->x_address += (h_right - h_left - curr_t->width) / 2; } } else if( layout_work.docnum.page_position == pos_right ) { curr_t->x_address = h_right - curr_t->width; } ju_x_start = curr_t->x_address; return; }
void start_line_with_string( const char *text, font_number font, bool leave_1space ) { text_chars *n_char; // new text char size_t count; unsigned space_count; count = strlen( text ); if( count == 0 ) { return; } space_count = 0; while( *(text + count - 1) == ' ' ) { // strip trailing spaces space_count++; if( --count == 0 ) { break; } } if( leave_1space && space_count > 0 ) {// for ordered :LI keep 1 trailing space space_count--; count++; } n_char = alloc_text_chars( text, count, font ); n_char->x_address = g_cur_h_start; ju_x_start = g_cur_h_start; input_cbs->fmflags &= ~II_sol; // no longer start of line n_char->width = cop_text_width( n_char->text, n_char->count, font ); /***********************************************************/ /* Test if word hits right margin */ /***********************************************************/ if( n_char->x_address + n_char->width > g_page_right ) { process_line_full( t_line, ProcFlags.concat ); t_line = alloc_text_line(); n_char->x_address = g_cur_h_start; } if( t_line == NULL ) { t_line = alloc_text_line(); } if( t_line->first == NULL ) { // first element in output line t_line->first = n_char; t_line->line_height = wgml_fonts[font].line_height; ju_x_start = n_char->x_address; ProcFlags.line_started = true; } else { t_line->last->next = n_char; n_char->prev = t_line->last; } t_line->last = n_char; g_cur_h_start = n_char->x_address + n_char->width; post_space = space_count * wgml_fonts[layout_work.defaults.font].spc_width; }
static void doc_header( su *p_sk, su *top_sk, xx_str *h_string, font_number font, spacing_line spacing_ln, bool no_eject ) { doc_element * cur_el; font_number font_save; int32_t h_left; text_chars * curr_t; text_line * hd_line; font_save = g_curr_font; g_curr_font = font; g_curr_font = font_save; set_skip_vars( NULL, top_sk, p_sk, spacing_ln, g_curr_font ); if( (h_string == NULL) || (*h_string == '\0') || (*h_string == ' ') || (*h_string == '\t') ) { /********************************************************/ /* header contained "yes" but the string was empty: */ /* the OW docs do this with APPENDIX for PS/PDF output */ /********************************************************/ hd_line = alloc_text_line(); // defaults work } else { curr_t = alloc_text_chars( h_string, strlen( h_string ), font ); curr_t->width = cop_text_width( curr_t->text, curr_t->count, font ); h_left = g_page_left +(g_page_right - g_page_left - curr_t->width) / 2; curr_t->x_address = h_left; hd_line = alloc_text_line(); hd_line->first = curr_t; hd_line->line_height = wgml_fonts[font].line_height; } if( input_cbs->fmflags & II_research ) { test_out_t_line( hd_line ); } cur_el = alloc_doc_el( el_text ); cur_el->blank_lines = g_blank_lines; g_blank_lines = 0; cur_el->depth = hd_line->line_height; cur_el->subs_skip = g_subs_skip; cur_el->top_skip = g_top_skip; cur_el->element.text.overprint = ProcFlags.overprint; ProcFlags.overprint = false; cur_el->element.text.spacing = g_spacing; cur_el->element.text.first = hd_line; ProcFlags.skips_valid = false; hd_line = NULL; if( no_eject ) { insert_col_main( cur_el ); } else { insert_page_width( cur_el ); } }
static void prep_date_line( text_line *p_line, const char *p ) { text_chars * curr_t; uint32_t h_left; uint32_t h_right; symsub * subdate; int rc; h_left = g_page_left + conv_hor_unit( &layout_work.date.left_adjust ); h_right = g_page_right - conv_hor_unit( &layout_work.date.right_adjust ); if( *p ) { curr_t = alloc_text_chars( p, strlen( p ), g_curr_font ); } else { rc = find_symvar( &global_dict, "date", no_subscript, &subdate ); curr_t = alloc_text_chars( subdate->value, strlen( subdate->value ), g_curr_font ); } curr_t->count = len_to_trail_space( curr_t->text, curr_t->count ); curr_t->count = intrans( curr_t->text, curr_t->count, g_curr_font ); curr_t->width = cop_text_width( curr_t->text, curr_t->count, g_curr_font ); while( curr_t->width > (h_right - h_left) ) { // too long for line if( curr_t->count < 2) { // sanity check break; } curr_t->count -= 1; // truncate text curr_t->width = cop_text_width( curr_t->text, curr_t->count, g_curr_font ); } p_line->first = curr_t; p_line->last = curr_t; curr_t->x_address = h_left; if( layout_work.date.page_position == pos_center ) { if( h_left + curr_t->width < h_right ) { curr_t->x_address += (h_right - h_left - curr_t->width) / 2; } } else if( layout_work.date.page_position == pos_right ) { curr_t->x_address = h_right - curr_t->width; } ju_x_start = curr_t->x_address; return; }
static void prep_title_line( text_line * p_line, const char * p ) { text_chars * curr_t; uint32_t h_left; uint32_t h_right; uint32_t curr_x; h_left = g_page_left + conv_hor_unit( &layout_work.title.left_adjust, g_curr_font ); h_right = g_page_right - conv_hor_unit( &layout_work.title.right_adjust, g_curr_font ); curr_t = alloc_text_chars( p, strlen( p ), g_curr_font ); curr_t->count = len_to_trail_space( curr_t->text, curr_t->count ); curr_t->count = intrans( curr_t->text, curr_t->count, g_curr_font ); curr_t->font = layout_work.title.font; curr_t->width = cop_text_width( curr_t->text, curr_t->count, g_curr_font ); while( curr_t->width > (h_right - h_left) ) { // too long for line if( curr_t->count < 2 ) { // sanity check break; } curr_t->count -= 1; // truncate text curr_t->width = cop_text_width( curr_t->text, curr_t->count, g_curr_font ); } p_line->first = curr_t; p_line->last = curr_t; curr_x = h_left; if( layout_work.title.page_position == pos_center ) { if( h_left + curr_t->width < h_right ) { curr_x += (h_right - h_left - curr_t->width) / 2; } } else if( layout_work.title.page_position == pos_right ) { curr_x = h_right - curr_t->width; } curr_t->x_address = curr_x; ju_x_start = curr_x; return; }
condcode scr_width( parm parms[MAX_FUN_PARMS], size_t parmcount, char * * result, int32_t ressize ) { char * pval; char * pend; char * pa; char * pe; size_t len; char type; uint32_t width; ressize = ressize; if( (parmcount < 1) || (parmcount > 2) ) { return( neg ); } pval = parms[0].start; pend = parms[0].stop; unquote_if_quoted( &pval, &pend ); if( pend == pval ) { // null string width 0 **result = '0'; *result += 1; **result = '\0'; return( pos ); } len = pend - pval; if( parmcount > 1 ) { // evalute type if( parms[1].stop > parms[1].start ) {// type pa = parms[1].start; pe = parms[1].stop; unquote_if_quoted( &pa, &pe ); type = tolower( *pa ); switch( type ) { case 'c': // CPI width = cop_text_width( pval, len, g_curr_font ); width = (width * CPI + g_resh / 2) / g_resh; break; case 'u': // Device Units width = cop_text_width( pval, len, g_curr_font ); break; case 'n': // character count width = len; break; default: g_err( err_func_parm, "2 (type)" ); g_info_inp_pos(); err_count++; show_include_stack(); return( neg ); break; } } } else { // default type c processing width = cop_text_width( pval, len, g_curr_font ); width = (width * CPI + g_resh / 2) / g_resh; } sprintf( *result, "%d", width ); *result += strlen( *result ); **result = '\0'; return( pos ); }
static void content_reg( banner_lay_tag * ban ) { text_chars * curr_t; char * pbuf; symsub * symsubval; int k; int rc; switch( ban->region->contents.content_type ) { case string_content: pbuf = mem_alloc( buf_size ); *pbuf = '\0'; if( ban->region->script_format ) { /***************************************************************/ /* substitute variables and create text_chars instances */ /***************************************************************/ for( k = 0; k < 3; ++k ) { if( ban->region->script_region[k].string != NULL ) { substitute_vars( pbuf, ban->region->script_region[k].string, ban->region->script_region[k].len ); if( *pbuf ) { curr_t = alloc_text_chars( pbuf, strlen( pbuf ), ban->region->font ); /***************************************************/ /* use font 0 for width calculation */ /* even if another font is used for banregion */ /* to get the same result as wgml4 TBD */ /***************************************************/ curr_t->width = cop_text_width( curr_t->text, curr_t->count, 0 ); // ban->region->font ); reg_text[k] = curr_t; } } } } else { // no script format only normal string with perhaps vars substitute_vars( pbuf, ban->region->contents.string, strlen( ban->region->contents.string ) ); if( *pbuf ) { curr_t = alloc_text_chars( pbuf, strlen( pbuf ), ban->region->font ); /***********************************************************/ /* is font 0 used for width calc? TBD */ /***********************************************************/ curr_t->width = cop_text_width( curr_t->text, curr_t->count, ban->region->font ); if( ban->region->region_position == pos_left ) { reg_text[0] = curr_t; } else if( ban->region->region_position == pos_center ) { reg_text[1] = curr_t; } else if( ban->region->region_position == pos_right ) { reg_text[2] = curr_t; } else { reg_text[0] = curr_t; // position left if unknown } } } mem_free( pbuf ); break; case author_content : rc = find_symvar( &global_dict, "$author", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "author", 6, ban->region->font ); } break; case bothead_content : rc = find_symvar( &global_dict, "$bothead", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "bothead", 7, ban->region->font ); } break; case date_content : rc = find_symvar( &global_dict, "$date", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "date", 4, ban->region->font ); } break; case docnum_content : rc = find_symvar( &global_dict, "$docnum", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "docnum", 6, ban->region->font ); } break; case head0_content : rc = find_symvar( &global_dict, "$head0", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "head0", 5, ban->region->font ); } break; case head1_content : rc = find_symvar( &global_dict, "$head1", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "head1", 5, ban->region->font ); } break; case head2_content : rc = find_symvar( &global_dict, "$head2", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "head2", 5, ban->region->font ); } break; case head3_content : rc = find_symvar( &global_dict, "$head3", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "head3", 5, ban->region->font ); } break; case head4_content : rc = find_symvar( &global_dict, "$head4", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "head4", 5, ban->region->font ); } break; case head5_content : rc = find_symvar( &global_dict, "$head5", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "head5", 5, ban->region->font ); } break; case head6_content : rc = find_symvar( &global_dict, "$head6", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "head6", 5, ban->region->font ); } break; case headnum0_content : rc = find_symvar( &global_dict, "$hnum0", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "hnum0", 5, ban->region->font ); } break; case headnum1_content : rc = find_symvar( &global_dict, "$hnum1", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "hnum1", 5, ban->region->font ); } break; case headnum2_content : rc = find_symvar( &global_dict, "$hnum2", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "hnum2", 5, ban->region->font ); } break; case headnum3_content : rc = find_symvar( &global_dict, "$hnum3", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "hnum3", 5, ban->region->font ); } break; case headnum4_content : rc = find_symvar( &global_dict, "$hnum4", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "hnum4", 5, ban->region->font ); } break; case headnum5_content : rc = find_symvar( &global_dict, "$hnum5", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "hnum5", 5, ban->region->font ); } break; case headnum6_content : rc = find_symvar( &global_dict, "$hnum6", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "hnum6", 5, ban->region->font ); } break; case headtext0_content : rc = find_symvar( &global_dict, "$htext0", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "htext0", 5, ban->region->font ); } break; case headtext1_content : rc = find_symvar( &global_dict, "$htext1", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "htext1", 5, ban->region->font ); } break; case headtext2_content : rc = find_symvar( &global_dict, "$htext2", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "htext2", 5, ban->region->font ); } break; case headtext3_content : rc = find_symvar( &global_dict, "$htext3", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "htext3", 5, ban->region->font ); } break; case headtext4_content : rc = find_symvar( &global_dict, "$htext4", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "htext4", 5, ban->region->font ); } break; case headtext5_content : rc = find_symvar( &global_dict, "$htext5", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "htext5", 5, ban->region->font ); } break; case headtext6_content : rc = find_symvar( &global_dict, "$htext6", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "htext6", 5, ban->region->font ); } break; case pgnuma_content : rc = find_symvar( &global_dict, "$pgnuma", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "pgnuma", 6, ban->region->font ); } break; case pgnumad_content : rc = find_symvar( &global_dict, "$pgnumad", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "pgnumad", 7, ban->region->font ); } break; case pgnumc_content : rc = find_symvar( &global_dict, "$pgnumc", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "pgnumc", 6, ban->region->font ); } break; case pgnumcd_content : rc = find_symvar( &global_dict, "$pgnumcd", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "pgnumcd", 7, ban->region->font ); } break; case pgnumr_content : rc = find_symvar( &global_dict, "$pgnumr", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "pgnumr", 6, ban->region->font ); } break; case pgnumrd_content : rc = find_symvar( &global_dict, "$pgnumrd", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "pgnumrd", 7, ban->region->font ); } break; case sec_content : rc = find_symvar( &global_dict, "$sec", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "sec", 3, ban->region->font ); } break; case stitle_content : rc = find_symvar( &global_dict, "$stitle", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "stitle", 6, ban->region->font ); } break; case title_content : rc = find_symvar( &global_dict, "$title", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "title", 6, ban->region->font ); } break; case time_content : rc = find_symvar( &global_dict, "$time", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "time", 4, ban->region->font ); } break; case tophead_content : rc = find_symvar( &global_dict, "$tophead", no_subscript, &symsubval ); if( rc == 2 ) { curr_t = alloc_text_chars( symsubval->value, strlen( symsubval->value ), ban->region->font ); } else { curr_t = alloc_text_chars( "tophead", 7, ban->region->font ); } break; case no_content : // empty region curr_t = NULL; // curr_t = alloc_text_chars( "no content", 10, ban->region->font ); break; default: // the other possible banner region values are TBD curr_t = alloc_text_chars( "Dummy region", 12, ban->region->font ); break; } if( curr_t == NULL ) { /* do nothing */ } else { if( ban->region->contents.content_type != string_content ) { /***********************************************************/ /* is font 0 used for width calc? TBD */ /***********************************************************/ curr_t->width = cop_text_width( curr_t->text, curr_t->count, ban->region->font ); if( ban->region->region_position == pos_left ) { reg_text[0] = curr_t; } else if( ban->region->region_position == pos_center ) { reg_text[1] = curr_t; } else if( ban->region->region_position == pos_right ) { reg_text[2] = curr_t; } else { reg_text[0] = curr_t; // position left if invalid } } } return; }
static void hx_header( int hx_lvl, const char *hnumstr, const char *txt ) { doc_element * cur_el; font_number font_save; font_number font; int32_t width; int32_t widthn; text_chars * curr_t; text_chars * curr_tn; text_line * hd_line; hd_line = NULL; font_save = g_curr_font; g_spacing_ln = layout_work.hx[hx_lvl].spacing; if( layout_work.hx[hx_lvl].line_break ) { set_skip_vars( &layout_work.hx[hx_lvl].pre_skip, &layout_work.hx[hx_lvl].pre_top_skip, &layout_work.hx[hx_lvl].post_skip, g_spacing_ln, layout_work.hx[hx_lvl].number_font ); } else { set_skip_vars( &layout_work.hx[hx_lvl].pre_skip, &layout_work.hx[hx_lvl].pre_top_skip, NULL, g_spacing_ln, layout_work.hx[hx_lvl].number_font ); } post_space = 0; curr_t = NULL; curr_tn = NULL; width = 0; widthn = 0; hd_line = alloc_text_line(); if( layout_work.hx[hx_lvl].number_form != num_none ) { font = layout_work.hx[hx_lvl].number_font; curr_tn = alloc_text_chars( hnumstr, strlen( hnumstr ), font ); curr_tn->width = cop_text_width( curr_tn->text, curr_tn->count, font ); widthn = curr_tn->width + wgml_fonts[font].spc_width;; hd_line->first = curr_tn; hd_line->line_height = wgml_fonts[font].line_height; hd_line->last = curr_tn; } if( (txt != NULL) && (*txt != '\0') ) { font = layout_work.hx[hx_lvl].font; curr_t = alloc_text_chars( txt, strlen( txt ), font ); curr_t->width = cop_text_width( curr_t->text, curr_t->count, font ); width = curr_t->width; if( hd_line->first == NULL ) { hd_line->first = curr_t; } else { curr_tn->next = curr_t; curr_t->prev = curr_tn; } hd_line->last = curr_t; if( hd_line->line_height < wgml_fonts[font].line_height ) { hd_line->line_height = wgml_fonts[font].line_height; } } if( curr_t == NULL ) { curr_t = curr_tn; curr_tn = NULL; width = widthn; widthn = 0; } g_cur_left = g_page_left + conv_hor_unit( &layout_work.hx[hx_lvl].indent ) + conv_hor_unit( &layout_work.hx[hx_lvl].align ); if( layout_work.hx[hx_lvl].page_position == pos_left ) { if( curr_tn != NULL ) { curr_tn->x_address = g_cur_left; } curr_t->x_address = g_cur_left + widthn; } else { if( layout_work.hx[hx_lvl].page_position == pos_center ) { curr_t->x_address = g_cur_left + widthn + (g_page_right - g_cur_left - widthn - width) / 2; } else { curr_t->x_address = g_page_right - width; } if( curr_tn != NULL ) { curr_tn->x_address = curr_t->x_address - widthn; } } if( input_cbs->fmflags & II_research ) { test_out_t_line( hd_line ); } cur_el = alloc_doc_el( el_text ); cur_el->blank_lines = g_blank_lines; g_blank_lines = 0; cur_el->depth = hd_line->line_height; cur_el->subs_skip = g_subs_skip; cur_el->top_skip = g_top_skip; cur_el->element.text.overprint = ProcFlags.overprint; ProcFlags.overprint = false; cur_el->element.text.spacing = g_spacing; cur_el->element.text.first = hd_line; ProcFlags.skips_valid = false; hd_line = NULL; if( layout_work.hx[hx_lvl].page_eject == ej_no ) { insert_col_main( cur_el ); } else { insert_page_width( cur_el ); } }