-/**
- * \file InsetMathSplit.cpp
- * This file is part of LyX, the document processor.
- * Licence details can be found in the file COPYING.
- *
- * \author André Pönitz
- *
- * Full author contact details are available in file CREDITS.
- */
-
-#include <config.h>
-
-#include "InsetMathSplit.h"
-#include "MathData.h"
-#include "MathStream.h"
-#include "MathStream.h"
-
-#include "FuncRequest.h"
-#include "FuncStatus.h"
-#include "gettext.h"
-#include "LaTeXFeatures.h"
-
-#include "support/lstrings.h"
-#include "support/std_ostream.h"
-
-
-namespace lyx {
-
-using support::bformat;
-
-using std::string;
-
-
-InsetMathSplit::InsetMathSplit(docstring const & name, char valign)
- : InsetMathGrid(1, 1, valign, docstring()), name_(name)
-{
-}
-
-
-Inset * InsetMathSplit::clone() const
-{
- return new InsetMathSplit(*this);
-}
-
-
-char InsetMathSplit::defaultColAlign(col_type col)
-{
- if (name_ == "split")
- return 'l';
- if (name_ == "gathered")
- return 'c';
- if (name_ == "aligned")
- return (col & 1) ? 'l' : 'r';
- if (name_ == "alignedat")
- return (col & 1) ? 'l' : 'r';
- return 'l';
-}
-
-
-void InsetMathSplit::draw(PainterInfo & pi, int x, int y) const
-{
- InsetMathGrid::draw(pi, x, y);
- setPosCache(pi, x, y);
-}
-
-
-bool InsetMathSplit::getStatus(Cursor & cur, FuncRequest const & cmd,
- FuncStatus & flag) const
-{
- switch (cmd.action) {
- case LFUN_TABULAR_FEATURE: {
- docstring const & s = cmd.argument();
- if (s == "add-vline-left" || s == "add-vline-right") {
- flag.message(bformat(
- from_utf8(N_("Can't add vertical grid lines in '%1$s'")), name_));
- flag.enabled(false);
- return true;
- }
- return InsetMathGrid::getStatus(cur, cmd, flag);
- }
- default:
- return InsetMathGrid::getStatus(cur, cmd, flag);
- }
-}
-
-
-void InsetMathSplit::write(WriteStream & ws) const
-{
- if (ws.fragile())
- ws << "\\protect";
- ws << "\\begin{" << name_ << '}';
- if (name_ != "split" && valign() != 'c')
- ws << '[' << valign() << ']';
- if (name_ == "alignedat")
- ws << '{' << static_cast<unsigned int>((ncols() + 1)/2) << '}';
- InsetMathGrid::write(ws);
- if (ws.fragile())
- ws << "\\protect";
- ws << "\\end{" << name_ << "}\n";
-}
-
-
-void InsetMathSplit::infoize(odocstream & os) const
-{
- docstring name = name_;
- name[0] = support::uppercase(name[0]);
- os << name << ' ';
-}
-
-
-void InsetMathSplit::validate(LaTeXFeatures & features) const
-{
- if (name_ == "split" || name_ == "gathered" || name_ == "aligned" ||
- name_ == "alignedat")
- features.require("amsmath");
- InsetMathGrid::validate(features);
-}
-
-
-} // namespace lyx
+/**\r
+ * \file InsetMathSplit.cpp\r
+ * This file is part of LyX, the document processor.\r
+ * Licence details can be found in the file COPYING.\r
+ *\r
+ * \author André Pönitz\r
+ *\r
+ * Full author contact details are available in file CREDITS.\r
+ */\r
+\r
+#include <config.h>\r
+\r
+#include "InsetMathSplit.h"\r
+\r
+#include "MathData.h"\r
+#include "MathStream.h"\r
+#include "MathStream.h"\r
+\r
+#include "FuncRequest.h"\r
+#include "FuncStatus.h"\r
+#include "support/gettext.h"\r
+#include "LaTeXFeatures.h"\r
+\r
+#include "support/lstrings.h"\r
+\r
+#include <ostream>\r
+\r
+using namespace std;\r
+\r
+namespace lyx {\r
+\r
+using support::bformat;\r
+\r
+\r
+// FIXME: handle numbers in gui, currently they are only read and written\r
+\r
+InsetMathSplit::InsetMathSplit(Buffer * buf, docstring const & name,\r
+ char valign, bool numbered)\r
+ : InsetMathGrid(buf, 1, 1, valign, docstring()), name_(name),\r
+ numbered_(numbered)\r
+{\r
+}\r
+\r
+\r
+Inset * InsetMathSplit::clone() const\r
+{\r
+ return new InsetMathSplit(*this);\r
+}\r
+\r
+\r
+//FIXME: This has probably no effect and can be removed.\r
+char InsetMathSplit::defaultColAlign(col_type col)\r
+{\r
+ if (name_ == "gathered")\r
+ return 'c';\r
+ if (name_ == "lgathered")\r
+ return 'l';\r
+ if (name_ == "rgathered")\r
+ return 'r';\r
+ if (name_ == "split"\r
+ || name_ == "aligned"\r
+ || name_ == "align"\r
+ || name_ == "alignedat")\r
+ return colAlign(hullAlign, col);\r
+ return 'l';\r
+}\r
+\r
+\r
+char InsetMathSplit::displayColAlign(idx_type idx) const\r
+{\r
+ if (name_ == "gathered")\r
+ return 'c';\r
+ if (name_ == "lgathered")\r
+ return 'l';\r
+ if (name_ == "rgathered")\r
+ return 'r';\r
+ if (name_ == "split"\r
+ || name_ == "aligned"\r
+ || name_ == "align"\r
+ || name_ == "alignedat")\r
+ return colAlign(hullAlign, col(idx));\r
+ return InsetMathGrid::displayColAlign(idx);\r
+}\r
+\r
+\r
+int InsetMathSplit::displayColSpace(col_type col) const\r
+{\r
+ if (name_ == "split" || name_ == "aligned" || name_ == "align")\r
+ return colSpace(hullAlign, col);\r
+ if (name_ == "alignedat")\r
+ return colSpace(hullAlignAt, col);\r
+ return 0;\r
+}\r
+\r
+\r
+\r
+void InsetMathSplit::draw(PainterInfo & pi, int x, int y) const\r
+{\r
+ InsetMathGrid::draw(pi, x, y);\r
+ setPosCache(pi, x, y);\r
+}\r
+\r
+\r
+bool InsetMathSplit::getStatus(Cursor & cur, FuncRequest const & cmd,\r
+ FuncStatus & flag) const\r
+{\r
+ switch (cmd.action()) {\r
+ case LFUN_INSET_MODIFY: {\r
+ istringstream is(to_utf8(cmd.argument()));\r
+ string s;\r
+ is >> s;\r
+ if (s != "tabular")\r
+ break;\r
+ is >> s;\r
+ if (s == "add-vline-left" || s == "add-vline-right") {\r
+ flag.message(bformat(\r
+ from_utf8(N_("Can't add vertical grid lines in '%1$s'")), name_));\r
+ flag.setEnabled(false);\r
+ return true;\r
+ }\r
+ if (s == "align-left" || s == "align-center" || s == "align-right") {\r
+ flag.setEnabled(false);\r
+ return true;\r
+ }\r
+ break;\r
+ }\r
+ default:\r
+ break;\r
+ }\r
+ return InsetMathGrid::getStatus(cur, cmd, flag);\r
+}\r
+\r
+\r
+void InsetMathSplit::write(WriteStream & ws) const\r
+{\r
+ MathEnsurer ensurer(ws);\r
+ if (ws.fragile())\r
+ ws << "\\protect";\r
+ docstring suffix;\r
+ if (!numbered_ && name_ == "align")\r
+ suffix = from_ascii("*");\r
+ ws << "\\begin{" << name_ << suffix << '}';\r
+ bool open = ws.startOuterRow();\r
+ if (name_ != "split" && name_ != "align" && verticalAlignment() != 'c')\r
+ ws << '[' << verticalAlignment() << ']';\r
+ if (name_ == "alignedat")\r
+ ws << '{' << static_cast<unsigned int>((ncols() + 1)/2) << '}';\r
+ InsetMathGrid::write(ws);\r
+ if (ws.fragile())\r
+ ws << "\\protect";\r
+ ws << "\\end{" << name_ << suffix << "}\n";\r
+ if (open)\r
+ ws.startOuterRow();\r
+}\r
+\r
+\r
+void InsetMathSplit::infoize(odocstream & os) const\r
+{\r
+ docstring name = name_;\r
+ name[0] = support::uppercase(name[0]);\r
+ if (name_ == "align" && !numbered_)\r
+ os << name << "* ";\r
+ else\r
+ os << name << ' ';\r
+}\r
+\r
+\r
+void InsetMathSplit::mathmlize(MathStream & ms) const\r
+{\r
+ // split, gathered, aligned, alignedat\r
+ // At the moment, those seem to display just fine without any\r
+ // special treatment.\r
+ // FIXME\r
+ // lgathered and rgathered could use the proper alignment, but\r
+ // it's not clear how to do that without copying a lot of code.\r
+ // One idea would be to wrap the table in an <mrow>, and set the\r
+ // alignment there via CSS.\r
+ // FIXME how to handle numbered and unnumbered align?\r
+ InsetMathGrid::mathmlize(ms);\r
+}\r
+\r
+\r
+void InsetMathSplit::htmlize(HtmlStream & ms) const\r
+{\r
+ // split, gathered, aligned, alignedat\r
+ // At the moment, those seem to display just fine without any\r
+ // special treatment.\r
+ // FIXME\r
+ // lgathered and rgathered could use the proper alignment.\r
+ // FIXME how to handle numbered and unnumbered align?\r
+ InsetMathGrid::htmlize(ms);\r
+}\r
+\r
+\r
+void InsetMathSplit::validate(LaTeXFeatures & features) const\r
+{\r
+ if (name_ == "split" || name_ == "gathered" || name_ == "aligned" ||\r
+ name_ == "alignedat" || name_ == "align")\r
+ features.require("amsmath");\r
+ else if (name_ == "lgathered" || name_ == "rgathered")\r
+ features.require("mathtools");\r
+ InsetMathGrid::validate(features);\r
+}\r
+\r
+\r
+} // namespace lyx\r