-/* This file is part of
- * ======================================================
+/**
+ * \file counters.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
- * LyX, The Document Processor
+ * \author Lars Gullik Bjønnes
+ * \author Martin Vermeer
*
- * Copyright 1995 Matthias Ettrich
- * Copyright 1995-2001 The LyX Team.
- *
- *
- * ====================================================== */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
+ * Full author contact details are available in file CREDITS.
+ */
#include <config.h>
#include "counters.h"
#include "debug.h"
+#include "Lsstream.h"
+
#include "support/lstrings.h"
#include "support/LAssert.h"
+using namespace lyx::support;
+
using std::endl;
using std::vector;
value_ = 0;
}
+
string Counter::master() const
{
return master_;
}
+
void Counter::setMaster(string const & m)
{
master_ = m;
}
-Counters::Counters()
-{
- // Ehh, should this take a textclass arg?
-
- // Sectioning counters:
- newCounter("part");
- newCounter("chapter");
- newCounter("section", "chapter");
- newCounter("subsection", "section");
- newCounter("subsubsection", "subsection");
- newCounter("paragraph", "subsubsection");
- newCounter("subparagraph", "paragraph");
-
- sects.push_back("chapter");
- sects.push_back("section");
- sects.push_back("subsection");
- sects.push_back("subsubsection");
- sects.push_back("paragraph");
- sects.push_back("subparagraph");
-
- // Enumeration counters:
- newCounter("enumi");
- newCounter("enumii", "enumi");
- newCounter("enumiii", "enumii");
- newCounter("enumiv", "enumiii");
-
- enums.push_back("enumi");
- enums.push_back("enumii");
- enums.push_back("enumiii");
- enums.push_back("enumiv");
-
- // Biblio:
- newCounter("bibitem");
-
- // Float counters:
- newCounter("Figure");
- newCounter("Table");
-}
-
void Counters::newCounter(string const & newc)
{
return;
}
counterList[newc];
- cit = counterList.find(newc);
- cit->second.setMaster("");
}
return;
}
- counterList[newc];
- cit = counterList.find(newc);
- cit->second.setMaster(masterc);
+ counterList[newc].setMaster(masterc);
}
void Counters::reset(string const & match)
{
- lyx::Assert(!match.empty());
+ Assert(!match.empty());
CounterList::iterator it = counterList.begin();
CounterList::iterator end = counterList.end();
}
}
+
void Counters::copy(Counters & from, Counters & to, string const & match)
{
CounterList::iterator it = counterList.begin();
return 'a' + n - 1;
}
+
inline
char alphaCounter(int n)
{
return 'A' + n - 1;
}
+
inline
char hebrewCounter(int n)
{
return hebrew[n-1];
}
+
inline
string const romanCounter(int n)
{
} // namespace anon
+
string Counters::labelItem(string const & ctr,
- string const & numbertype,
- string const & langtype,
- bool first)
+ string const & numbertype,
+ string const & langtype,
+ bool first)
{
- ostringstream s, o;
+ ostringstream s;
+ ostringstream o;
+
CounterList::iterator it = counterList.find(ctr);
if (it == counterList.end()) {
lyxerr << "Counter does not exist." << endl;
- return "";
+ return string();
}
- string mstr = it->second.master();
+
if (!first) {
- s << "." << value(ctr);
+ s << '.' << value(ctr);
} else {
if (numbertype == "sectioning" || numbertype == "appendix") {
if (numbertype == "appendix") {
}
s << o.str();
}
- return s.str();
+
+ return STRCONV(s.str());
}
+
string Counters::numberLabel(string const & ctr,
- string const & numbertype,
- string const & langtype,
- int head)
+ string const & numbertype,
+ string const & langtype,
+ int head)
{
- ostringstream s, o;
+ ostringstream s;
+
if (numbertype == "sectioning" || numbertype == "appendix") {
if (ctr == "chapter" && head == 0) {
s << labelItem("chapter", numbertype, langtype, true);
} else if (ctr == "subparagraph" && head <= 5) {
s << numberLabel("paragraph", numbertype, langtype, head)
<< labelItem("subparagraph", numbertype, langtype, head == 5);
- } else if (ctr == "Figure" || ctr == "Table") {
+ } else if (ctr == "figure" || ctr == "table") {
// figure, table, ...
lyxerr << "Counter:" << ctr << endl;
s << numberLabel("chapter", numbertype, langtype, head)
}
} else if (numbertype == "enumeration") {
- ostringstream ei, eii, eiii, eiv;
- //string ei, eiii, eiv;
- //char eii;
+ ostringstream ei;
+ ostringstream eii;
+ ostringstream eiii;
+ ostringstream eiv;
+
if (langtype == "hebrew") {
ei << '.' << value("enumi");
eii << '(' << hebrewCounter(value("enumii")) << ')';
s << eiv.str();
}
}
- return s.str();
+
+ return STRCONV(s.str());
}