Example #1
0
void    lay_banner( const gmltag * entry )
{
    char        *   p;
    condcode        cc;
    int             k;
    lay_att         curr;
    att_args        l_args;
    bool            cvterr;
 
    p = scan_start;
    cvterr = false;
 
    if( !GlobalFlags.firstpass ) {
        scan_start = scan_stop + 1;
        eat_lay_sub_tag();
        return;                         // process during first pass only
    }
    if( ProcFlags.lay_xxx != el_banner ) {
        ProcFlags.lay_xxx = el_banner;
        ProcFlags.banner = true;
        init_banner_wk( &wk );
    } else {
        if( !strnicmp( ":banner", buff2, sizeof( ":banner" ) ) ) {
            err_count++;                // nested :banner
            g_err( err_nested_tag, entry->tagname );
            file_mac_info();
 
            while( !ProcFlags.reprocess_line  ) {
                eat_lay_sub_tag();
                if( strnicmp( ":ebanner", buff2, sizeof( ":ebanner" ) ) ) {
                    ProcFlags.reprocess_line = false;  // not :ebanner, go on
                }
            }
            return;
        }
    }
    cc = get_lay_sub_and_value( &l_args );  // get att with value
    while( cc == pos ) {
        cvterr = true;
        for( k = 0; k < att_count; k++ ) {
            curr = banner_att[k];
 
            if( !strnicmp( att_names[curr], l_args.start[0], l_args.len[0] ) ) {
                p = l_args.start[1];
 
                if( count[k] ) {
                    cvterr = 1;         // attribute specified twice
                } else {
                    count[k] += 1;
                    sum_count++;
                    switch( curr ) {
                    case   e_left_adjust:
                        cvterr = i_space_unit( p, curr, &wk.left_adjust );
                        break;
                    case   e_right_adjust:
                        cvterr = i_space_unit( p, curr, &wk.right_adjust );
                        break;
                    case   e_depth:
                        cvterr = i_space_unit( p, curr, &wk.depth );
                        break;
                    case   e_place:
                        cvterr = i_place( p, curr, &wk.place );
                        break;
                    case   e_docsect:
                        cvterr = i_docsect( p, curr, &wk.docsect );
                        break;
                    case   e_refplace:  // not stored in banner struct
                        cvterr = i_place( p, curr, &refplace );
                        break;
                    case   e_refdoc:    // not stored in banner struct
                        cvterr = i_docsect( p, curr, &refdoc );
                        break;
                    default:
                        out_msg( "WGML logic error.\n");
                        cvterr = true;
                        break;
                    }
                }
                break;                  // break out of for loop
            }
        }
        if( cvterr ) {                  // there was an error
            err_count++;
            g_err( err_att_val_inv );
            file_mac_info();
        }
        cc = get_lay_sub_and_value( &l_args );  // get att with value
    }
    scan_start = scan_stop + 1;
    return;
}
Example #2
0
void    lay_fig( lay_tag ltag )
{
    char        *   p;
    condcode        cc;
    int             k;
    lay_att         curr;
    att_args        l_args;
    int             cvterr;

    /* unused parameters */ (void)ltag;

    p = scan_start;
    cvterr = false;

    if( !GlobalFlags.firstpass ) {
        scan_start = scan_stop;
        eat_lay_sub_tag();
        return;                         // process during first pass only
    }
    if( ProcFlags.lay_xxx != el_fig ) {
        ProcFlags.lay_xxx = el_fig;
    }
    cc = get_lay_sub_and_value( &l_args );  // get one with value
    while( cc == pos ) {
        cvterr = -1;
        for( k = 0, curr = fig_att[k]; curr > 0; k++, curr = fig_att[k] ) {

            if( !strnicmp( att_names[curr], l_args.start[0], l_args.len[0] ) ) {
                p = l_args.start[1];

                switch( curr ) {
                case   e_left_adjust:
                    cvterr = i_space_unit( p, curr,
                                           &layout_work.fig.left_adjust );
                    break;
                case   e_right_adjust:
                    cvterr = i_space_unit( p, curr,
                                           &layout_work.fig.right_adjust );
                    break;
                case   e_pre_skip:
                    cvterr = i_space_unit( p, curr, &layout_work.fig.pre_skip );
                    break;
                case   e_post_skip:
                    cvterr = i_space_unit( p, curr, &layout_work.fig.post_skip );
                    break;
                case   e_spacing:
                    cvterr = i_int8( p, curr, &layout_work.fig.spacing );
                    break;
                case   e_font:
                    cvterr = i_font_number( p, curr, &layout_work.fig.font );
                    if( layout_work.fig.font >= wgml_font_cnt ) {
                        layout_work.fig.font = 0;
                    }
                    break;
                case   e_default_place:
                    cvterr = i_place( p, curr,
                                      &layout_work.fig.default_place );
                    break;
                case   e_default_frame:
                    cvterr = i_default_frame( p, curr,
                                              &layout_work.fig.default_frame );
                    break;
                default:
                    out_msg( "WGML logic error.\n");
                    cvterr = true;
                    break;
                }
                if( cvterr ) {          // there was an error
                    err_count++;
                    g_err( err_att_val_inv );
                    file_mac_info();
                }
                break;                  // break out of for loop
            }
        }
        if( cvterr < 0 ) {
            err_count++;
            g_err( err_att_name_inv );
            file_mac_info();
        }
        cc = get_lay_sub_and_value( &l_args );  // get one with value
    }
    scan_start = scan_stop;
    return;
}