* src/LaTeXFeatures.C
(LaTeXFeatures::getPackages): Add package xy
* src/mathed/InsetMathXYMatrix.[Ch]
(spacing_): New
(spacing_code_): New
(validate): New, require xy package
* src/mathed/InsetMathXYMatrix.C
(InsetMathXYMatrix::write): write spacing_ and spacing_code_
(InsetMathXYMatrix::infoize): output spacing_ and spacing_code_
* src/mathed/MathFactory.C
(createInsetMath): handle special arguments of xymatrix
* src/mathed/MathParser.C
(Parser::parse1): ditto
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15643
a592a061-630c-0410-9148-
cb99ea01b6c8
packages << "\\usepackage[dot]{bibtopic}\n";
}
+ if (isRequired("xy"))
+ packages << "\\usepackage[all]{xy}\n";
+
return packages.str();
}
#include "InsetMathXYMatrix.h"
#include "MathStream.h"
-#include "MathStream.h"
#include "LaTeXFeatures.h"
#include "support/std_ostream.h"
namespace lyx {
-InsetMathXYMatrix::InsetMathXYMatrix()
- : InsetMathGrid(1, 1)
+InsetMathXYMatrix::InsetMathXYMatrix(LyXLength const & s, char c)
+ : InsetMathGrid(1, 1), spacing_(s), spacing_code_(c)
{}
void InsetMathXYMatrix::write(WriteStream & os) const
{
- os << "\\xymatrix{";
+ os << "\\xymatrix";
+ switch (spacing_code_) {
+ case 'R':
+ case 'C':
+ case 'M':
+ case 'W':
+ case 'H':
+ case 'L':
+ os << '@' << spacing_code_ << '='
+ << from_ascii(spacing_.asLatexString());
+ break;
+ default:
+ if (!spacing_.empty())
+ os << "@=" << from_ascii(spacing_.asLatexString());
+ }
+ os << '{';
InsetMathGrid::write(os);
os << "}\n";
}
void InsetMathXYMatrix::infoize(odocstream & os) const
{
os << "xymatrix ";
+ switch (spacing_code_) {
+ case 'R':
+ case 'C':
+ case 'M':
+ case 'W':
+ case 'H':
+ case 'L':
+ os << spacing_code_ << ' '
+ << from_ascii(spacing_.asLatexString()) << ' ';
+ break;
+ default:
+ if (!spacing_.empty())
+ os << from_ascii(spacing_.asLatexString()) << ' ';
+ }
InsetMathGrid::infoize(os);
}
}
+void InsetMathXYMatrix::validate(LaTeXFeatures & features) const
+{
+ features.require("xy");
+ InsetMathGrid::validate(features);
+}
+
+
} // namespace lyx
class InsetMathXYMatrix : public InsetMathGrid {
public:
///
- InsetMathXYMatrix();
+ InsetMathXYMatrix(LyXLength const & = LyXLength(), char c = '\0');
///
void metrics(MetricsInfo &, Dimension &) const;
///
void normalize(NormalStream &) const;
///
void maple(MapleStream &) const;
+ ///
+ void validate(LaTeXFeatures & features) const;
private:
///
virtual std::auto_ptr<InsetBase> doClone() const;
+ /// extra spacing, may be empty
+ LyXLength spacing_;
+ ///
+ char spacing_code_;
};
return MathAtom(new InsetMathMakebox);
if (s == "kern")
return MathAtom(new InsetMathKern);
- if (s == "xymatrix")
- return MathAtom(new InsetMathXYMatrix);
+ if (s.substr(0, 8) == "xymatrix") {
+ char spacing_code = '\0';
+ LyXLength spacing;
+ size_t const len = s.length();
+ size_t i = 8;
+ if (i < len && s[i] == '@') {
+ ++i;
+ if (i < len) {
+ switch (s[i]) {
+ case 'R':
+ case 'C':
+ case 'M':
+ case 'W':
+ case 'H':
+ case 'L':
+ spacing_code = s[i];
+ ++i;
+ break;
+ }
+ }
+ if (i < len && s[i] == '=') {
+ ++i;
+ spacing = LyXLength(to_ascii(s.substr(i)));
+ }
+ }
+ return MathAtom(new InsetMathXYMatrix(spacing, spacing_code));
+ }
if (s == "xrightarrow" || s == "xleftarrow")
return MathAtom(new InsetMathXArrow(s));
if (s == "split" || s == "gathered" || s == "aligned" || s == "alignedat")
}
else if (t.cs() == "xymatrix") {
- cell->push_back(createInsetMath(t.cs()));
+ odocstringstream os;
+ while (good() && nextToken().cat() != catBegin)
+ os << getToken().asInput();
+ cell->push_back(createInsetMath(t.cs() + os.str()));
parse2(cell->back(), FLAG_ITEM, mode, false);
}