- ostringstream s;
-
- if (numbertype == "sectioning" || numbertype == "appendix") {
- if (ctr == "chapter" && head == 0) {
- s << labelItem("chapter", numbertype, langtype, true);
- } else if (ctr == "section" && head <= 1) {
- s << numberLabel("chapter", numbertype, langtype, head)
- << labelItem("section", numbertype, langtype, head == 1);
- } else if (ctr == "subsection" && head <= 2) {
- s << numberLabel("section", numbertype, langtype, head)
- << labelItem("subsection", numbertype, langtype, head == 2);
- } else if (ctr == "subsubsection" && head <= 3) {
- s << numberLabel("subsection", numbertype, langtype, head)
- << labelItem("subsubsection", numbertype, langtype, head == 3);
- } else if (ctr == "paragraph" && head <= 4) {
- s << numberLabel("subsubsection", numbertype, langtype, head)
- << labelItem("paragraph", numbertype, langtype, head == 4);
- } else if (ctr == "subparagraph" && head <= 5) {
- s << numberLabel("paragraph", numbertype, langtype, head)
- << labelItem("subparagraph", numbertype, langtype, head == 5);
- } else if (ctr == "figure" || ctr == "table") {
- // figure, table, ...
- lyxerr << "Counter:" << ctr << endl;
- s << numberLabel("chapter", numbertype, langtype, head)
- << labelItem(ctr, numbertype, langtype, head == 1);
- }
-
- } else if (numbertype == "enumeration") {
- ostringstream ei;
- ostringstream eii;
- ostringstream eiii;
- ostringstream eiv;
-
- if (langtype == "hebrew") {
- ei << '.' << value("enumi");
- eii << '(' << hebrewCounter(value("enumii")) << ')';
- eiii << '.' << romanCounter(value("enumiii"));
- eiv << '.' << alphaCounter(value("enumiv"));
- } else {
- ei << value("enumi") << '.';
- eii << '(' << loweralphaCounter(value("enumii")) << ')';
- eiii << romanCounter(value("enumiii")) << '.';
- eiv << alphaCounter(value("enumiv")) << '.';
- }
- if (ctr == "enumii") {
- s << eii.str();
- } else if (ctr == "enumi") {
- s << ei.str();
- } else if (ctr == "enumiii") {
- s << eiii.str();
- } else if (ctr == "enumiv") {
- s << eiv.str();
- }
+ docstring label = format;
+ while (true) {
+#ifdef WITH_WARNINGS
+#warning Using boost::regex or boost::spirit would make this code a lot simpler... (Lgb)
+#endif
+
+ size_t const i = label.find('\\', 0);
+ if (i == docstring::npos)
+ break;
+ size_t const j = label.find('{', i + 1);
+ if (j == docstring::npos)
+ break;
+ size_t const k = label.find('}', j + 1);
+ if (k == string::npos)
+ break;
+ docstring const numbertype(label, i + 1, j - i - 1);
+ docstring const counter(label, j + 1, k - j - 1);
+ docstring const rep = labelItem(counter, numbertype);
+ label = docstring(label, 0, i) + rep + docstring(label, k + 1, string::npos);
+ //lyxerr << " : " << " (" << counter << ","
+ // << numbertype << ") -> " << label << endl;