namespace lyx {
-InsetMathXYMatrix::InsetMathXYMatrix(Buffer * buf, Length const & s, char c)
- : InsetMathGrid(buf, 1, 1), spacing_(s), spacing_code_(c)
+InsetMathXYMatrix::InsetMathXYMatrix(Buffer * buf, Length const & s, char c,
+ bool e) : InsetMathGrid(buf, 1, 1), spacing_(s), spacing_code_(c),
+ equal_spacing_(e)
{
}
{
MathEnsurer ensurer(os);
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());
+ if (equal_spacing_) {
+ os << "@!";
+ switch (spacing_code_) {
+ case '0':
+ case 'R':
+ case 'C':
+ os << spacing_code_;
+ }
+ } else {
+ 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);
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()) << ' ';
+ if (equal_spacing_) {
+ switch (spacing_code_) {
+ case '0':
+ case 'R':
+ case 'C':
+ os << '!' << spacing_code_ << ' ';
+ }
+ } else {
+ 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);
}
class InsetMathXYMatrix : public InsetMathGrid {
public:
///
- InsetMathXYMatrix(Buffer * buf, Length const & = Length(), char c = '\0');
+ InsetMathXYMatrix(Buffer * buf, Length const & = Length(), char c = '\0',
+ bool equal_spacing = false);
///
void metrics(MetricsInfo &, Dimension &) const;
///
Length spacing_;
///
char spacing_code_;
+ ///
+ bool equal_spacing_;
};
if (s.substr(0, 8) == "xymatrix") {
char spacing_code = '\0';
Length spacing;
+ bool equal_spacing = false;
size_t const len = s.length();
size_t i = 8;
if (i < len && s[i] == '@') {
++i;
- if (i < len) {
+ if (i < len && s[i] == '!') {
+ equal_spacing = true;
+ ++i;
+ if (i < len) {
+ switch (s[i]) {
+ case '0':
+ case 'R':
+ case 'C':
+ spacing_code = static_cast<char>(s[i]);
+ }
+ }
+ } else if (i < len) {
switch (s[i]) {
case 'R':
case 'C':
++i;
break;
}
- }
- if (i < len && s[i] == '=') {
- ++i;
- spacing = Length(to_ascii(s.substr(i)));
+ if (i < len && s[i] == '=') {
+ ++i;
+ spacing = Length(to_ascii(s.substr(i)));
+ }
}
}
- return MathAtom(new InsetMathXYMatrix(buf, spacing, spacing_code));
+ return MathAtom(new InsetMathXYMatrix(buf, spacing, spacing_code,
+ equal_spacing));
}
if (s == "xrightarrow" || s == "xleftarrow")
return MathAtom(new InsetMathXArrow(buf, s));