static void selection_make_accessible (tree t, path i1, path i2, path& o1, path& o2) { o1= i1; o2= i2; if (!is_accessible_cursor (t, o1)) o1= previous_accessible (t, o1); if (!is_accessible_cursor (t, o1)) o1= next_accessible (t, o1); if (!is_accessible_cursor (t, o2)) o2= next_accessible (t, o2); if (!is_accessible_cursor (t, o2)) o2= previous_accessible (t, o2); if (path_inf (o1, o2)) o1= shift (t, o1, 1); }
path edit_cursor_rep::make_cursor_accessible (path p, bool forwards) { //time_t t1= texmacs_time (); path start_p= p; bool inverse= false; int old_mode= get_access_mode (); if (get_init_string (MODE) == "src") set_access_mode (DRD_ACCESS_SOURCE); while (!is_accessible_cursor (et, p) && !in_source ()) { path pp; ASSERT (rp <= p, "path outside document"); p= rp * closest_inside (subtree (et, rp), p / rp); if (forwards ^ inverse) pp= rp * next_valid (subtree (et, rp), p / rp); else pp= rp * previous_valid (subtree (et, rp), p / rp); if (pp == p) { if (inverse) break; else { p= start_p; inverse= true; } } else p= pp; } set_access_mode (old_mode); //time_t t2= texmacs_time (); //if (t2-t1 >= 1) cout << "made_cursor_accessible took " << t2-t1 << "ms\n"; return p; }