// slightly tricky because we want to loop around
 
        Buffer::inset_iterator const begin(bv_->buffer()->inset_iterator_begin());
        Buffer::inset_iterator const end(bv_->buffer()->inset_iterator_end());
        Buffer::inset_iterator orig(cur.par(), cur.pos());
 
        if (orig == end)
                return;
 
        Buffer::inset_iterator it(orig);
 
        // skip the first inset
        ++it;
 
        if (it == end)
                return;
 
        for (; it != orig; ++it) {
                vector<Inset::Code>::iterator cit(
                        find(codes.begin(), codes.end(), (*it)->lyxCode()));
                if (cit == codes.end()) {
                        if (it == end)
                                it = begin;
                        continue;
                }
 
                if (!match.empty()) {
                        // this relies on the caller getting this right :(
                        InsetCommand * ic(static_cast<InsetCommand*>(*it));
                        if (ic->getContents() != match) {
                                if (it == end)
                                        it = begin;
                                continue;
                        }
                }
 
                t->setCursor(bv_, it.getPar(), it.getPos(), false);
                break;
        }

orig(par, pos) creates an iterator with an "it" of 0. This is really bad
semantics imho - an iterator should be valid, possibly == end() though

How do I do the above code ? Basically I want to iterate (and looping from end
back to begin) starting from the current cursor position.
 
inset_iterator has no operator+() or operator<() ??

Does Buffer::inset_iterator traverse insets inside insets or not ?

thanks
john
-- 
"The simpler it is, the harder it is." 
        - Tim Van Holder

Reply via email to