Andre Poenitz a écrit :
On Sat, Apr 01, 2006 at 09:47:19AM +0200, Abdelrazak Younes wrote:
What happens if you put in a "proper" test as I proposed?
It seems to work fine.

I was actually surprised that it != 0 worked. I thought it should not.

[...] This DocIterator/ParIterator is really complicated.

The other option LyX used for half a decade or so is not to have
DocIterators at all...

I didn't say it is not needed or useful. Just that I find it complicated to follow. I also think it is maybe overused in "buffer_funcs.C". Let me take an example:

bool needEnumCounterReset(ParIterator const & it)
{
        Paragraph const & par = *it;
        BOOST_ASSERT(par.layout()->labeltype == LABEL_ENUMERATE);
        lyx::depth_type const cur_depth = par.getDepth();
        ParIterator prev_it = it;
        while (prev_it.pit()) {
                --prev_it.top().pit();
                Paragraph const & prev_par = *prev_it;
                if (prev_par.getDepth() <= cur_depth)
                        return  prev_par.layout()->labeltype !=
                                LABEL_ENUMERATE;
        }
        // start of nested inset: reset
        return true;
}

I would rewrite this like this:

bool needEnumCounterReset(ParagraphList & pars, size_t const pos)
{
        BOOST_ASSERT(pars[pos].layout()->labeltype == LABEL_ENUMERATE);
        lyx::depth_type const cur_depth = pars[pos].getDepth();
        for (size_t i = pos - 1; i != 0; ++i)
        {
                if (pars[i].getDepth() <= cur_depth)
                        return  pars[i].layout()->labeltype !=
                                LABEL_ENUMERATE;
        }
        // start of nested inset: reset
        return true;
}

Maybe I am missing something but this is simpler. Please correct me if I am wrong.

Abdel.

Reply via email to