* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
* \author Martin Vermeer
- * \author André Pönitz
+ * \author André Pönitz
* \author Richard Heck (roman numerals)
*
* Full author contact details are available in file CREDITS.
#include "Counters.h"
+#include "Lexer.h"
+
#include "support/convert.h"
#include "support/debug.h"
#include "support/lstrings.h"
-#include <boost/assert.hpp>
+#include "support/lassert.h"
#include <sstream>
}
+bool Counter::read(Lexer & lex)
+{
+ enum {
+ CT_WITHIN = 1,
+ CT_LABELSTRING,
+ CT_LABELSTRING_APPENDIX,
+ CT_END
+ };
+
+ LexerKeyword counterTags[] = {
+ { "end", CT_END },
+ { "labelstring", CT_LABELSTRING },
+ { "labelstringappendix", CT_LABELSTRING_APPENDIX },
+ { "within", CT_WITHIN }
+ };
+
+ lex.pushTable(counterTags);
+
+ bool getout = false;
+ while (!getout && lex.isOK()) {
+ int le = lex.lex();
+ switch (le) {
+ case Lexer::LEX_UNDEF:
+ lex.printError("Unknown counter tag `$$Token'");
+ continue;
+ default:
+ break;
+ }
+ switch (le) {
+ case CT_WITHIN:
+ lex.next();
+ master_ = lex.getDocString();
+ if (master_ == "none")
+ master_.erase();
+ break;
+ case CT_LABELSTRING:
+ lex.next();
+ labelstring_ = lex.getDocString();
+ labelstringappendix_ = labelstring_;
+ break;
+ case CT_LABELSTRING_APPENDIX:
+ lex.next();
+ labelstringappendix_ = lex.getDocString();
+ break;
+ case CT_END:
+ getout = true;
+ break;
+ }
+ }
+
+ // Here if have a full counter if getout == true
+ if (!getout)
+ LYXERR0("No End tag found for counter!");
+ lex.popTable();
+ return getout;
+}
+
void Counter::set(int v)
{
value_ = v;
}
+bool Counters::read(Lexer & lex, docstring const & name)
+{
+ if (hasCounter(name)) {
+ LYXERR(Debug::TCLASS, "Reading existing counter " << to_utf8(name));
+ return counterList[name].read(lex);
+ }
+ LYXERR(Debug::TCLASS, "Reading new counter " << to_utf8(name));
+ Counter cnt;
+ bool success = cnt.read(lex);
+ if (success)
+ counterList[name] = cnt;
+ else
+ LYXERR0("Error reading counter `" << name << "'!");
+ return success;
+}
+
+
void Counters::set(docstring const & ctr, int const val)
{
CounterList::iterator const it = counterList.find(ctr);
void Counters::reset()
{
appendix_ = false;
+ subfloat_ = false;
current_float_.erase();
CounterList::iterator it = counterList.begin();
CounterList::iterator const end = counterList.end();
void Counters::reset(docstring const & match)
{
- BOOST_ASSERT(!match.empty());
+ LASSERT(!match.empty(), /**/);
CounterList::iterator it = counterList.begin();
CounterList::iterator end = counterList.end();