- switch(layout->labeltype) {
- case LABEL_COUNTER:
- if (layout->toclevel <= buf.params().secnumdepth
- && (layout->latextype != LATEX_ENVIRONMENT
- || isFirstInSequence(it.pit(), it.plist()))) {
- counters.step(layout->counter);
- par.params().labelString(
- par.expandLabel(layout, buf.params()));
- } else
- par.params().labelString(docstring());
- break;
-
- case LABEL_ITEMIZE: {
- // At some point of time we should do something more
- // clever here, like:
- // par.params().labelString(
- // buf.params().user_defined_bullet(par.itemdepth).getText());
- // for now, use a simple hardcoded label
- docstring itemlabel;
- switch (par.itemdepth) {
- case 0:
- itemlabel = char_type(0x2022);
- break;
- case 1:
- itemlabel = char_type(0x2013);
- break;
- case 2:
- itemlabel = char_type(0x2217);
- break;
- case 3:
- itemlabel = char_type(0x2219); // or 0x00b7
- break;
- }
- par.params().labelString(itemlabel);
- break;
- }
-
- case LABEL_ENUMERATE: {
- // FIXME: Yes I know this is a really, really! bad solution
- // (Lgb)
- docstring enumcounter = from_ascii("enum");
-
- switch (par.itemdepth) {
- case 2:
- enumcounter += 'i';
- case 1:
- enumcounter += 'i';
- case 0:
- enumcounter += 'i';
- break;
- case 3:
- enumcounter += "iv";
- break;
- default:
- // not a valid enumdepth...
- break;
- }
-
- // Maybe we have to reset the enumeration counter.
- if (needEnumCounterReset(it))
- counters.reset(enumcounter);
-
- counters.step(enumcounter);
-
- string format;
-
- switch (par.itemdepth) {
- case 0:
- format = N_("\\arabic{enumi}.");
- break;
- case 1:
- format = N_("(\\alph{enumii})");
- break;
- case 2:
- format = N_("\\roman{enumiii}.");
- break;
- case 3:
- format = N_("\\Alph{enumiv}.");
- break;
- default:
- // not a valid enumdepth...
- break;
- }
-
- par.params().labelString(counters.counterLabel(
- par.translateIfPossible(from_ascii(format), buf.params())));
-
- break;
- }
-
- case LABEL_SENSITIVE: {
- string const & type = counters.current_float();
- docstring full_label;
- if (type.empty())
- full_label = buf.B_("Senseless!!! ");
- else {
- docstring name = buf.B_(textclass.floats().getType(type).name());
- if (counters.hasCounter(from_utf8(type))) {
- counters.step(from_utf8(type));
- full_label = bformat(from_ascii("%1$s %2$s:"),
- name,
- counters.theCounter(from_utf8(type)));
- } else
- full_label = bformat(from_ascii("%1$s #:"), name);
- }
- par.params().labelString(full_label);
- break;
- }
-
- case LABEL_NO_LABEL:
- par.params().labelString(docstring());
- break;
-
- case LABEL_MANUAL:
- case LABEL_TOP_ENVIRONMENT:
- case LABEL_CENTERED_TOP_ENVIRONMENT:
- case LABEL_STATIC:
- case LABEL_BIBLIO:
- par.params().labelString(
- par.translateIfPossible(layout->labelstring(),
- buf.params()));
- break;
- }
-}
-
-} // anon namespace
-
-void updateLabels(Buffer const & buf, ParIterator & parit)
-{
- BOOST_ASSERT(parit.pit() == 0);
-
- // set the position of the text in the buffer to be able
- // to resolve macros in it. This has nothing to do with
- // labels, but by putting it here we avoid implementing
- // a whole bunch of traversal routines just for this call.
- parit.text()->setMacrocontextPosition(parit);
-
- depth_type maxdepth = 0;
- pit_type const lastpit = parit.lastpit();
- for ( ; parit.pit() <= lastpit ; ++parit.pit()) {
- // reduce depth if necessary
- parit->params().depth(min(parit->params().depth(), maxdepth));
- maxdepth = parit->getMaxDepthAfter();
-
- // set the counter for this paragraph
- setLabel(buf, parit);
-
- // Now the insets
- InsetList::const_iterator iit = parit->insetList().begin();
- InsetList::const_iterator end = parit->insetList().end();
- for (; iit != end; ++iit) {
- parit.pos() = iit->pos;
- iit->inset->updateLabels(buf, parit);
- }
- }
-
-}
-
-
-// FIXME: buf should should be const because updateLabels() modifies
-// the contents of the paragraphs.
-void updateLabels(Buffer const & buf, bool childonly)
-{
- Buffer const * const master = buf.masterBuffer();
- // Use the master text class also for child documents
- TextClass const & textclass = master->params().getTextClass();