Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}