mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-24 21:55:29 +00:00
- Add support for the align environment from amsmath
- RTL fixes. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1479 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
d89e29cf7c
commit
a996b1bd2b
@ -146,9 +146,11 @@ Menuset
|
||||
Menu "edit_math"
|
||||
Item "Make eqnarray|e" "break-line e"
|
||||
Item "Make multline|m" "break-line m"
|
||||
Item "Make alignat 1 column|1" "break-line 1"
|
||||
Item "Make alignat 2 columns|2" "break-line 2"
|
||||
Item "Make alignat 3 columns|3" "break-line 3"
|
||||
Item "Make align 1 column|1" "break-line 1"
|
||||
Item "Make align 2 columns|2" "break-line 2"
|
||||
Item "Make align 3 columns|3" "break-line 3"
|
||||
Item "Make alignat 2 columns|2" "break-line B"
|
||||
Item "Make alignat 3 columns|3" "break-line C"
|
||||
Separator
|
||||
Item "Toggle numbering|n" "math-number"
|
||||
Item "Toggle numbering of line|u" "math-nonumber"
|
||||
|
@ -1,3 +1,12 @@
|
||||
2001-02-10 Dekel Tsur <dekelts@tau.ac.il>
|
||||
|
||||
* text.C (PrepareToPrint): RTL Fix.
|
||||
|
||||
* paragraph.C (GetUChar): New method.
|
||||
(String): Use GetUChar.
|
||||
|
||||
* buffer.C (asciiParagraph): Use GetUChar.
|
||||
|
||||
2001-02-09 Dekel Tsur <dekelts@tau.ac.il>
|
||||
|
||||
* text.C (GetVisibleRow): Fix selection drawing for RTL text in tables.
|
||||
|
@ -1528,7 +1528,7 @@ string const Buffer::asciiParagraph(LyXParagraph const * par,
|
||||
} else {
|
||||
islatex = 0;
|
||||
}
|
||||
c = par->GetChar(i);
|
||||
c = par->GetUChar(params, i);
|
||||
if (islatex)
|
||||
continue;
|
||||
switch (c) {
|
||||
|
@ -1,3 +1,8 @@
|
||||
2001-02-10 Dekel Tsur <dekelts@tau.ac.il>
|
||||
|
||||
* insettext.C (LocalDispatch): Restore the language if the inset
|
||||
becomes empty.
|
||||
|
||||
2001-02-09 Dekel Tsur <dekelts@tau.ac.il>
|
||||
|
||||
* insettext.C (moveRightIntern): Update the selection cursor.
|
||||
|
@ -1101,6 +1101,15 @@ InsetText::LocalDispatch(BufferView * bv,
|
||||
result = UNDISPATCHED;
|
||||
break;
|
||||
}
|
||||
|
||||
/// If the action has deleted all text in the inset, we need to change the
|
||||
// language to the language to the surronding text.
|
||||
if (par->Last() == 0 && !par->next) {
|
||||
LyXFont font(LyXFont::ALL_IGNORE);
|
||||
font.setLanguage(bv->getParentLanguage(this));
|
||||
SetFont(bv, font, false);
|
||||
}
|
||||
|
||||
if (result != FINISHED) {
|
||||
ShowInsetCursor(bv);
|
||||
} else
|
||||
|
@ -441,6 +441,8 @@ public:
|
||||
LyXFont const getFont(BufferParams const &, size_type pos) const;
|
||||
///
|
||||
value_type GetChar(size_type pos) const;
|
||||
///
|
||||
value_type GetUChar(BufferParams const &, size_type pos) const;
|
||||
/// The position must already exist.
|
||||
void SetChar(size_type pos, value_type c) {
|
||||
#ifndef HAVE_ROPE
|
||||
|
@ -1,3 +1,7 @@
|
||||
2001-02-10 Dekel Tsur <dekelts@tau.ac.il>
|
||||
|
||||
* Many files: add support for the align environment from amsmath.
|
||||
|
||||
2001-02-09 André Pönitz <poenitz@htwm.de>
|
||||
|
||||
* array.h: replace array buffer 'byte bf[]' by 'std::vector<byte> bf'
|
||||
|
@ -337,6 +337,12 @@ MathMatrixInset * create_multiline(short int type, int cols)
|
||||
cols = 1;
|
||||
|
||||
switch (type) {
|
||||
case LM_OT_ALIGN:
|
||||
case LM_OT_ALIGNN:
|
||||
columns = 2*cols;
|
||||
for (int i = 0; i < cols; ++i)
|
||||
align += "Rl";
|
||||
break;
|
||||
case LM_OT_ALIGNAT:
|
||||
case LM_OT_ALIGNATN:
|
||||
columns = 2*cols;
|
||||
@ -377,8 +383,11 @@ void MathedCursor::Insert(byte c, MathedTextCodes t)
|
||||
short int type = LM_OT_MPAR;
|
||||
int cols = 1;
|
||||
if (c >= '1' && c <= '9') {
|
||||
type = LM_OT_ALIGN;
|
||||
cols = c - '1' + 1;
|
||||
} else if (c >= 'A' && c <= 'I') {
|
||||
type = LM_OT_ALIGNAT;
|
||||
cols = c - '0';
|
||||
cols = c - 'A' + 1;
|
||||
} else if (c == 'm')
|
||||
type = LM_OT_MULTLINE;
|
||||
else if (c == 'e')
|
||||
|
@ -145,6 +145,10 @@ enum MathedInsetTypes {
|
||||
/// A multiline numbered paragraph
|
||||
LM_OT_MPARN,
|
||||
///
|
||||
LM_OT_ALIGN,
|
||||
///
|
||||
LM_OT_ALIGNN,
|
||||
///
|
||||
LM_OT_ALIGNAT,
|
||||
///
|
||||
LM_OT_ALIGNATN,
|
||||
@ -683,7 +687,8 @@ bool is_singlely_numbered(short int type)
|
||||
inline
|
||||
bool is_multi_numbered(short int type)
|
||||
{
|
||||
return type == LM_OT_MPARN || type == LM_OT_ALIGNATN;
|
||||
return type == LM_OT_MPARN || type == LM_OT_ALIGNN
|
||||
|| type == LM_OT_ALIGNATN;
|
||||
}
|
||||
|
||||
inline
|
||||
@ -695,7 +700,8 @@ bool is_numbered(short int type)
|
||||
inline
|
||||
bool is_multicolumn(short int type)
|
||||
{
|
||||
return type == LM_OT_ALIGNAT || type == LM_OT_ALIGNATN;
|
||||
return type == LM_OT_ALIGN || type == LM_OT_ALIGNN
|
||||
|| type == LM_OT_ALIGNAT || type == LM_OT_ALIGNATN;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -464,7 +464,11 @@ void MathMatrixInset::Metrics()
|
||||
}
|
||||
descent = h - ascent + 2;
|
||||
|
||||
|
||||
// Increase ws[i] for 'R' columns (except the first one)
|
||||
for (i = 1; i < nc; ++i)
|
||||
if (h_align[i] == 'R')
|
||||
ws[i] += 10*df_width;
|
||||
|
||||
// Adjust local tabs
|
||||
cxrow = row;
|
||||
width = MATH_COLSEP;
|
||||
@ -477,12 +481,18 @@ void MathMatrixInset::Metrics()
|
||||
isvoid = true;
|
||||
}
|
||||
switch (h_align[i]) {
|
||||
case 'l': lf = 0; break;
|
||||
case 'c': lf = (ws[i] - cxrow->getTab(i))/2;
|
||||
break;
|
||||
case 'r': lf = ws[i] - cxrow->getTab(i); break;
|
||||
case 'l':
|
||||
lf = 0;
|
||||
break;
|
||||
case 'c':
|
||||
lf = (ws[i] - cxrow->getTab(i))/2;
|
||||
break;
|
||||
case 'r':
|
||||
case 'R':
|
||||
lf = ws[i] - cxrow->getTab(i);
|
||||
break;
|
||||
}
|
||||
ww = (isvoid) ? lf: lf + cxrow->getTab(i);
|
||||
ww = (isvoid) ? lf : lf + cxrow->getTab(i);
|
||||
cxrow->setTab(i, lf + rg);
|
||||
rg = ws[i] - ww + MATH_COLSEP;
|
||||
if (cxrow == row) width += ws[i] + MATH_COLSEP;
|
||||
|
@ -65,13 +65,15 @@ MathedInsetTypes mathed_env = LM_OT_MIN;
|
||||
string mathed_label;
|
||||
|
||||
|
||||
int const latex_mathenv_num = 10;
|
||||
int const latex_mathenv_num = 12;
|
||||
char const * latex_mathenv[latex_mathenv_num] = {
|
||||
"math",
|
||||
"displaymath",
|
||||
"equation",
|
||||
"eqnarray*",
|
||||
"eqnarray",
|
||||
"align*",
|
||||
"align",
|
||||
"alignat*",
|
||||
"alignat",
|
||||
"multline*",
|
||||
@ -809,6 +811,15 @@ LyxArrayBase * mathed_parse(unsigned flags, LyxArrayBase * array,
|
||||
if (is_multiline(mathed_env)) {
|
||||
int cols = 1;
|
||||
if (is_multicolumn(mathed_env)) {
|
||||
if (mathed_env != LM_OT_ALIGNAT &&
|
||||
mathed_env != LM_OT_ALIGNATN &&
|
||||
yyis->good()) {
|
||||
char c;
|
||||
yyis->get(c);
|
||||
if (c != '%')
|
||||
lyxerr << "Math parse error: unexpected '"
|
||||
<< c << "'" << endl;
|
||||
}
|
||||
LexGetArg('{');
|
||||
cols = strToInt(string(yytext));
|
||||
}
|
||||
|
@ -336,8 +336,12 @@ void mathed_write(MathParInset * p, ostream & os, int * newlines,
|
||||
os << "\\begin{"
|
||||
<< latex_mathenv[mathed_env]
|
||||
<< "}";
|
||||
if (mathed_env == LM_OT_ALIGNAT || mathed_env == LM_OT_ALIGNATN)
|
||||
if (is_multicolumn(mathed_env)) {
|
||||
if (mathed_env != LM_OT_ALIGNAT
|
||||
&& mathed_env != LM_OT_ALIGNATN)
|
||||
os << "%";
|
||||
os << "{" << p->GetColumns()/2 << "}";
|
||||
}
|
||||
os << "\n";
|
||||
}
|
||||
++number_of_newlines;
|
||||
|
@ -1018,6 +1018,47 @@ LyXParagraph::GetChar(LyXParagraph::size_type pos) const
|
||||
}
|
||||
|
||||
|
||||
LyXParagraph::value_type
|
||||
LyXParagraph::GetUChar(BufferParams const & bparams,
|
||||
LyXParagraph::size_type pos) const
|
||||
{
|
||||
value_type c = GetChar(pos);
|
||||
if (!lyxrc.rtl_support)
|
||||
return c;
|
||||
|
||||
value_type uc = c;
|
||||
switch (c) {
|
||||
case '(':
|
||||
uc = ')';
|
||||
break;
|
||||
case ')':
|
||||
uc = '(';
|
||||
break;
|
||||
case '[':
|
||||
uc = ']';
|
||||
break;
|
||||
case ']':
|
||||
uc = '[';
|
||||
break;
|
||||
case '{':
|
||||
uc = '}';
|
||||
break;
|
||||
case '}':
|
||||
uc = '{';
|
||||
break;
|
||||
case '<':
|
||||
uc = '>';
|
||||
break;
|
||||
case '>':
|
||||
uc = '<';
|
||||
break;
|
||||
}
|
||||
if (uc != c && GetFontSettings(bparams, pos).isRightToLeft())
|
||||
return uc;
|
||||
else
|
||||
return c;
|
||||
}
|
||||
|
||||
// return an string of the current word, and the end of the word in lastpos.
|
||||
string const LyXParagraph::GetWord(LyXParagraph::size_type & lastpos) const
|
||||
{
|
||||
@ -3995,7 +4036,7 @@ string const LyXParagraph::String(Buffer const * buffer,
|
||||
s += labelstring + ' ';
|
||||
|
||||
for (LyXParagraph::size_type i = beg; i < end; ++i) {
|
||||
value_type c = GetChar(i);
|
||||
value_type c = GetUChar(buffer->params, i);
|
||||
if (IsPrintable(c))
|
||||
s += c;
|
||||
else if (c == META_INSET) {
|
||||
|
13
src/text.C
13
src/text.C
@ -2196,21 +2196,18 @@ void LyXText::PrepareToPrint(BufferView * bview,
|
||||
|
||||
bool const is_rtl =
|
||||
row->par()->isRightToLeftPar(bview->buffer()->params);
|
||||
#ifndef NEW_INSETS
|
||||
|
||||
if (is_rtl) {
|
||||
x = RightMargin(bview->buffer(), row);
|
||||
x = (workWidth(bview) > 0)
|
||||
? RightMargin(bview->buffer(), row) : 0;
|
||||
#ifndef NEW_INSETS
|
||||
if (row->par()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) {
|
||||
LyXFont font(LyXFont::ALL_SANE);
|
||||
font.setSize(LyXFont::SIZE_SMALL);
|
||||
x += lyxfont::width("Mwide-figM", font);
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
if (workWidth(bview) > 0)
|
||||
x = LeftMargin(bview, row);
|
||||
else
|
||||
x = 0;
|
||||
} else
|
||||
x = (workWidth(bview) > 0) ? LeftMargin(bview, row) : 0;
|
||||
|
||||
// is there a manual margin with a manual label
|
||||
if (textclasslist.Style(bview->buffer()->params.textclass,
|
||||
|
Loading…
Reference in New Issue
Block a user