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; }
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; }