void edit_graphics_rep::set_graphical_object (tree t) { go_box= box (); graphical_object= t; if (N (graphical_object) == 0) return; edit_env env= get_typesetter ()->env; //tree old_fr= env->local_begin (GR_FRAME, (tree) find_frame ()); frame f_env= env->fr; env->fr= find_frame (); if (!is_nil (env->fr)) { int i,n=0; go_box= typeset_as_concat (env, t, path (0)); for (i=0; i<N(go_box); i++) if (go_box[i]!="") n++; if (n) { array<box> bx(n); n=0; for (i=0; i<N(go_box); i++) if (go_box[i]!="") { array<box> bx2(1); array<SI> spc2(1); bx2[0]= go_box[i]; spc2[0]=0; bx[n]= concat_box (path (0), bx2, spc2); n++; } go_box= composite_box (path (0), bx); } } env->fr= f_env; //env->local_end (GR_FRAME, old_fr); }
box typeset_as_concat (edit_env env, tree t, path ip, array<line_item>& a) { concater ccc= tm_new<concater_rep> (env, true); ccc->typeset (t, ip); ccc->finish (); a= ccc->a; tm_delete (ccc); int i, n=N(a); if (n == 0) return empty_box (ip); // FIXME: n=0 should never happen array<box> items (n); array<SI> spc (n); if (n>0) { spc[0]=0; for (i=0; i<n-1; i++) { items[i] = a[i]->b; spc [i+1]= a[i]->spc->def; } items[i]= a[i]->b; } box b= concat_box (ip, items, spc); return b; }