]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathSplit.cpp
InsetMath: normalize the line endings of 2 files
[lyx.git] / src / mathed / InsetMathSplit.cpp
index 647f5cf7371eeed6b9354a4041cf2138bb05b532..37741de98705c8463ccc477289dcbbf7ed8a4562 100644 (file)
-/**
- * \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 "support/gettext.h"
-#include "LaTeXFeatures.h"
-
-#include "support/lstrings.h"
-
-#include <ostream>
-
-using namespace std;
-
-namespace lyx {
-
-using support::bformat;
-
-
-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