Commit fce66b59 authored by Anna.Pavlova's avatar Anna.Pavlova Committed by Alexander.Trofimov

1. Поправила многочисленные баги, связанные с амперсандами (в связи с тем что...

1. Поправила многочисленные баги, связанные с амперсандами (в связи с тем что не хватало некоторых функций, которые есть в CMathText)
2. Вынесла общий функционал классов CMathText и CMathAmp в общий класс CMathBaseText

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@62824 954022d7-b5bf-4e40-9824-e11837661b57
parent 46bb66b3
...@@ -604,15 +604,12 @@ ParaMath.prototype.Add = function(Item) ...@@ -604,15 +604,12 @@ ParaMath.prototype.Add = function(Item)
var NewElement = null; var NewElement = null;
if (para_Text === Type) if (para_Text === Type)
{ {
// заглушка для текстовых настроек плейсхолдера // заглушка для текстовых настроек плейсхолдера
if(oContent.bRoot == false && Run.IsPlaceholder()) if(oContent.bRoot == false && Run.IsPlaceholder())
{ {
var ctrPrp = oContent.Parent.Get_CtrPrp(); // копия ctrPrp var ctrPrp = oContent.Parent.Get_CtrPrp(); // копия ctrPrp
Run.Apply_TextPr(ctrPrp, undefined, true); Run.Apply_TextPr(ctrPrp, undefined, true);
//Run.Apply_TextPr();
} }
if(Item.Value == 38) if(Item.Value == 38)
...@@ -3203,7 +3200,6 @@ CMathRecalculateInfo.prototype.ClearRecalculate = function() ...@@ -3203,7 +3200,6 @@ CMathRecalculateInfo.prototype.ClearRecalculate = function()
this.bCorrect_FontSize = false; this.bCorrect_FontSize = false;
}; };
function CMathRecalculateObject() function CMathRecalculateObject()
{ {
this.WrapState = ALIGN_EMPTY; this.WrapState = ALIGN_EMPTY;
......
...@@ -1994,8 +1994,6 @@ CMathBase.prototype.UpdateMetrics = function(PRS, Size) ...@@ -1994,8 +1994,6 @@ CMathBase.prototype.UpdateMetrics = function(PRS, Size)
if(PRS.LineDescent < Size.height - Size.ascent) if(PRS.LineDescent < Size.height - Size.ascent)
PRS.LineDescent = Size.height - Size.ascent; PRS.LineDescent = Size.height - Size.ascent;
//PRS.ContentMetrics.UpdateMetrics(Size);
}; };
CMathBase.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange) CMathBase.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange)
{ {
......
...@@ -37,12 +37,103 @@ CMathSize.prototype.Set = function(size) ...@@ -37,12 +37,103 @@ CMathSize.prototype.Set = function(size)
this.ascent = size.ascent; this.ascent = size.ascent;
}; };
function CMathBaseText()
{
this.Type = null;
this.bJDraw = false;
this.value = null;
this.bEmptyGapLeft = false;
this.bEmptyGapRight = false;
this.ParaMath = null;
this.Parent = null;
this.Flags = 0;
this.size = new CMathSize();
this.Width = 0; // special for Run размер буквы без Gaps
// в действительности это поле не должно использоваться, нужно использовать функциии Get_Width, Get_Width_2 ,Get_WidthVisible
this.pos = new CMathPosition();
this.GapLeft = 0;
this.GapRight = 0;
}
CMathBaseText.prototype.Get_Width = function() // работаем через функцию, т.к. поля GapLeft и GapRight могут измениться из-за изменения переноса, а пересчет (Measure) в этом случае не прийдет
{
var Width = this.size.width;
if(this.bEmptyGapLeft == false)
Width += this.GapLeft;
if(this.bEmptyGapRight == false)
Width += this.GapRight;
return (Width*TEXTWIDTH_DIVIDER) | 0;
};
CMathBaseText.prototype.Get_Width2 = function() // работаем через функцию, т.к. поля GapLeft и GapRight могут измениться из-за изменения переноса, а пересчет (Measure) в этом случае не прийдет
{
return ( (this.size.width + this.GapLeft + this.GapRight)* TEXTWIDTH_DIVIDER ) | 0;
};
CMathBaseText.prototype.Get_WidthVisible = function()
{
var Width = this.size.width;
if(this.bEmptyGapLeft == false)
Width += this.GapLeft;
if(this.bEmptyGapRight == false)
Width += this.GapRight;
return Width;
};
CMathBaseText.prototype.Update_StateGapLeft = function(bState)
{
this.bEmptyGapLeft = bState;
};
CMathBaseText.prototype.Update_StateGapRight = function(bState)
{
this.bEmptyGapRight = bState;
};
CMathBaseText.prototype.GetLocationOfLetter = function()
{
var pos = new CMathPosition();
pos.x = this.pos.x;
pos.y = this.pos.y;
return pos;
};
CMathBaseText.prototype.IsPlaceholder = function()
{
return this.Type == para_Math_Placeholder;
};
CMathBaseText.prototype.IsJustDraw = function()
{
return false;
};
// For ParaRun
CMathBaseText.prototype.Is_Punctuation = function()
{
var bPunc = 1 === g_aPunctuation[this.value],
bMathSign = this.value == 0x2217 || this.value == 0x2212;
return bPunc || bMathSign;
};
CMathBaseText.prototype.Is_NBSP = function()
{
return false;
};
CMathBaseText.prototype.Can_AddNumbering = function()
{
return true;
};
function CMathText(bJDraw) function CMathText(bJDraw)
{ {
// для Para_Run CMathText.superclass.constructor.call(this);
this.Type = para_Math_Text; this.Type = para_Math_Text;
this.bJDraw = (undefined === bJDraw ? false : bJDraw); this.bJDraw = (undefined === bJDraw ? false : bJDraw);
this.value = null;
this.RecalcInfo = this.RecalcInfo =
{ {
...@@ -53,21 +144,8 @@ function CMathText(bJDraw) ...@@ -53,21 +144,8 @@ function CMathText(bJDraw)
bSpecialOperator: false bSpecialOperator: false
}; };
this.bEmptyGapLeft = false;
this.bEmptyGapRight = false;
this.ParaMath = null;
this.Flags = 0;
this.Parent = null;
this.size = new CMathSize();
this.Width = 0; // для Recalculate_Range
this.pos = new CMathPosition();
this.rasterOffsetX = 0; this.rasterOffsetX = 0;
this.rasterOffsetY = 0; this.rasterOffsetY = 0;
this.GapLeft = 0;
this.GapRight = 0;
this.FontSlot = fontslot_ASCII; this.FontSlot = fontslot_ASCII;
...@@ -83,23 +161,25 @@ function CMathText(bJDraw) ...@@ -83,23 +161,25 @@ function CMathText(bJDraw)
};*/ };*/
} }
CMathText.prototype = Asc.extendClass(CMathText, CMathBaseText);
CMathText.prototype.add = function(code)
{ {
constructor: CMathText,
add: function(code)
{
this.value = code; this.value = code;
if( this.Is_BreakOperator(code) ) if( this.private_Is_BreakOperator(code) )
this.Type = para_Math_BreakOperator; this.Type = para_Math_BreakOperator;
}, };
addTxt: function(txt) CMathText.prototype.addTxt = function(txt)
{ {
var code = txt.charCodeAt(0); var code = txt.charCodeAt(0);
this.add(code); this.add(code);
}, };
getCode: function() CMathText.prototype.getCodeChr = function()
{ {
return this.value;
};
CMathText.prototype.private_getCode = function()
{
var code = this.value; var code = this.value;
var bNormal = this.bJDraw ? null : this.Parent.IsNormalText(); var bNormal = this.bJDraw ? null : this.Parent.IsNormalText();
...@@ -550,18 +630,14 @@ CMathText.prototype = ...@@ -550,18 +630,14 @@ CMathText.prototype =
}*/ }*/
return code; return code;
}, };
getCodeChr: function() CMathText.prototype.fillPlaceholders = function()
{ {
return this.value;
},
fillPlaceholders: function()
{
this.Type = para_Math_Placeholder; this.Type = para_Math_Placeholder;
this.value = StartTextElement; this.value = StartTextElement;
}, };
Measure: function(oMeasure, TextPr, InfoMathText) CMathText.prototype.Measure = function(oMeasure, TextPr, InfoMathText)
{ {
/* /*
var metricsTxt = g_oTextMeasurer.Measure2Code(letter); var metricsTxt = g_oTextMeasurer.Measure2Code(letter);
var _width = metricsTxt.Width; var _width = metricsTxt.Width;
...@@ -584,7 +660,7 @@ CMathText.prototype = ...@@ -584,7 +660,7 @@ CMathText.prototype =
this.FontSlot = InfoMathText.GetFontSlot(this.value); // возвращает fontslot_ASCII || fontslot_EastAsia || fontslot_CS || fontslot_HAnsi this.FontSlot = InfoMathText.GetFontSlot(this.value); // возвращает fontslot_ASCII || fontslot_EastAsia || fontslot_CS || fontslot_HAnsi
var letter = this.getCode(); var letter = this.private_getCode();
// в не математическом тексте i и j не подменяются на i и j без точек // в не математическом тексте i и j не подменяются на i и j без точек
var bAccentIJ = !InfoMathText.bNormalText && this.Parent.IsAccent() && (this.value == 0x69 || this.value == 0x6A); var bAccentIJ = !InfoMathText.bNormalText && this.Parent.IsAccent() && (this.value == 0x69 || this.value == 0x6A);
...@@ -644,60 +720,17 @@ CMathText.prototype = ...@@ -644,60 +720,17 @@ CMathText.prototype =
this.Width = (this.size.width * TEXTWIDTH_DIVIDER) | 0; this.Width = (this.size.width * TEXTWIDTH_DIVIDER) | 0;
}, };
PreRecalc: function(Parent, ParaMath, ArgSize, RPI) CMathText.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI)
{ {
this.ParaMath = ParaMath; this.ParaMath = ParaMath;
if(!this.bJDraw) if(!this.bJDraw)
this.Parent = Parent; this.Parent = Parent;
else else
this.Parent = null; this.Parent = null;
}, };
Get_Width: function() // работаем через функцию, т.к. поля GapLeft и GapRight могут измениться из-за изменения переноса, а пересчет (Measure) в этом случае не прийдет CMathText.prototype.Draw = function(x, y, pGraphics, InfoTextPr)
{ {
var Width = this.size.width;
if(this.bEmptyGapLeft == false)
Width += this.GapLeft;
if(this.bEmptyGapRight == false)
Width += this.GapRight;
return (Width*TEXTWIDTH_DIVIDER) | 0;
},
Get_Width2: function() // работаем через функцию, т.к. поля GapLeft и GapRight могут измениться из-за изменения переноса, а пересчет (Measure) в этом случае не прийдет
{
return ( (this.size.width + this.GapLeft + this.GapRight)* TEXTWIDTH_DIVIDER ) | 0;
},
Get_WidthVisible: function()
{
var Width = this.size.width;
if(this.bEmptyGapLeft == false)
Width += this.GapLeft;
if(this.bEmptyGapRight == false)
Width += this.GapRight;
return Width;
},
Update_StateGapLeft: function(bState)
{
this.bEmptyGapLeft = bState;
},
Update_StateGapRight: function(bState)
{
this.bEmptyGapRight = bState;
},
Draw_Elements: function(PDSE)
{
var PosLine = this.ParaMath.GetLinePosition(PDSE.Line);
this.Draw(PosLine.x, PosLine.y, PDSE.Graphics);
},
Draw: function(x, y, pGraphics, InfoTextPr)
{
var X = this.pos.x + x, var X = this.pos.x + x,
Y = this.pos.y + y; Y = this.pos.y + y;
...@@ -728,7 +761,6 @@ CMathText.prototype = ...@@ -728,7 +761,6 @@ CMathText.prototype =
pGraphics.transform(sx, shy, shx, sy, 0, 0);*/ pGraphics.transform(sx, shy, shx, sy, 0, 0);*/
if(this.bJDraw) if(this.bJDraw)
{ {
pGraphics.FillTextCode(X, Y, this.RecalcInfo.StyleCode); //на отрисовку символа отправляем положение baseLine pGraphics.FillTextCode(X, Y, this.RecalcInfo.StyleCode); //на отрисовку символа отправляем положение baseLine
...@@ -753,10 +785,9 @@ CMathText.prototype = ...@@ -753,10 +785,9 @@ CMathText.prototype =
pGraphics.FillTextCode(X, Y, this.RecalcInfo.StyleCode); //на отрисовку символа отправляем положение baseLine pGraphics.FillTextCode(X, Y, this.RecalcInfo.StyleCode); //на отрисовку символа отправляем положение baseLine
} }
}, };
setPosition: function(pos) CMathText.prototype.setPosition = function(pos)
{ {
if (!this.bJDraw) // for text if (!this.bJDraw) // for text
{ {
this.pos.x = pos.x; this.pos.x = pos.x;
...@@ -767,20 +798,9 @@ CMathText.prototype = ...@@ -767,20 +798,9 @@ CMathText.prototype =
this.pos.x = pos.x - this.rasterOffsetX; this.pos.x = pos.x - this.rasterOffsetX;
this.pos.y = pos.y - this.rasterOffsetY + this.size.ascent; this.pos.y = pos.y - this.rasterOffsetY + this.size.ascent;
} }
};
CMathText.prototype.Is_InclineLetter = function()
}, {
GetLocationOfLetter: function()
{
var pos = new CMathPosition();
pos.x = this.pos.x;
pos.y = this.pos.y;
return pos;
},
Is_InclineLetter: function()
{
var code = this.value; var code = this.value;
var bCapitale = (code > 0x0040 && code < 0x005B), var bCapitale = (code > 0x0040 && code < 0x005B),
...@@ -797,77 +817,38 @@ CMathText.prototype = ...@@ -797,77 +817,38 @@ CMathText.prototype =
bScript = MPrp.scr == TXT_SCRIPT; bScript = MPrp.scr == TXT_SCRIPT;
return bAlphabet && (bRomanSerif || bScript); return bAlphabet && (bRomanSerif || bScript);
}, };
setCoeffTransform: function(sx, shx, shy, sy) CMathText.prototype.IsJustDraw = function()
{ {
this.transform = {sx: sx, shx: shx, shy: shy, sy: sy};
//здесь надо будет по-другому считать размер, после трансформации размер будет выставляться в g_oTextMeasurer
//
//MathControl.pGraph.transform(sx, shy, shx, sy, 0, 0);
this.applyTransformation();
},
applyTransformation: function()
{
var sx = this.transform.sx, shx = this.transform.shx,
shy = this.transform.shy, sy = this.transform.sy;
sy = (sy < 0) ? -sy : sy;
this.size.width = this.size.width*sx + (-1)*this.size.width*shx;
this.size.height = this.size.height*sy + this.size.height*shy;
this.size.ascent = this.size.ascent*(sy + shy);
this.size.descent = this.size.descent*(sy + shy);
this.size.center = this.size.center*(sy + shy);
},
IsJustDraw: function()
{
return this.bJDraw; return this.bJDraw;
}, };
relate: function(parent) // for symbol only drawing CMathText.prototype.relate = function(Parent)
{ {
this.Parent = parent; this.Parent = Parent;
}, };
IsPlaceholder: function() CMathText.prototype.IsAlignPoint = function()
{ {
return this.Type == para_Math_Placeholder;
},
IsAlignPoint: function()
{
return false; return false;
}, };
IsText: function() CMathText.prototype.IsText = function()
{ {
return true; return true;
}, };
Is_BreakOperator: function(val) CMathText.prototype.private_Is_BreakOperator = function(val)
{ {
var bSimpleOper = val == 0x2D || val == 0x2B || val == 0x3D || val == 0x2A || val == 0x2F || val == 0x5C || val == 0x3C || val == 0x3E || val == 0xB1 || val == 0x2213 || val == 0x2219, var bSimpleOper = val == 0x2D || val == 0x2B || val == 0x3D || val == 0x2A || val == 0x2F || val == 0x5C || val == 0x3C || val == 0x3E || val == 0xB1 || val == 0x2213 || val == 0x2219,
bArrows = (val >= 0x2190 && val <= 0x21B3) || val == 0x21B6 || val == 0x21B7 || (val >= 0x21BA && val <= 0x21E9) || (val >= 0x21F4 && val <= 0x21FF), bArrows = (val >= 0x2190 && val <= 0x21B3) || val == 0x21B6 || val == 0x21B7 || (val >= 0x21BA && val <= 0x21E9) || (val >= 0x21F4 && val <= 0x21FF),
bOtherSymbols = (val >= 0x2234 && val <= 0x2237) || val == 0x2239 || (val >= 0x223B && val <= 0x228B) || (val >= 0x228F && val <= 0x2292) || (val >= 0x22A2 && val <= 0x22B9), bOtherSymbols = (val >= 0x2234 && val <= 0x2237) || val == 0x2239 || (val >= 0x223B && val <= 0x228B) || (val >= 0x228F && val <= 0x2292) || (val >= 0x22A2 && val <= 0x22B9),
bFishes = (val >= 0x22C8 && val <= 0x22CD) || val == 0x22D0 ||val == 0x22D1 || (val >= 0x22D5 && val <= 0x22EE) || (val >= 0x22F0 && val <= 0x22FF) || (val >= 0x27F0 && val <= 0x297F ) || ( val >= 0x29CE && val <= 0x29D5); bFishes = (val >= 0x22C8 && val <= 0x22CD) || val == 0x22D0 ||val == 0x22D1 || (val >= 0x22D5 && val <= 0x22EE) || (val >= 0x22F0 && val <= 0x22FF) || (val >= 0x27F0 && val <= 0x297F ) || ( val >= 0x29CE && val <= 0x29D5);
return bSimpleOper || bArrows || bOtherSymbols || bFishes; return bSimpleOper || bArrows || bOtherSymbols || bFishes;
}, };
Is_CompareOperator: function() CMathText.prototype.Is_CompareOperator = function()
{ {
return this.value == 0x3C || this.value == 0x3D || this.value == 0x3E; return this.value == 0x3C || this.value == 0x3D || this.value == 0x3E;
}, };
// For ParaRun CMathText.prototype.Is_SpecilalOperator = function()
Is_Punctuation: function() {
{
var bPunc = 1 === g_aPunctuation[this.value],
bMathSign = this.value == 0x2217 || this.value == 0x2212;
return bPunc || bMathSign;
},
Is_NBSP: function()
{
return false;
},
Is_SpecilalOperator: function()
{
var val = this.value, var val = this.value,
bSpecialOperator = val == 0x21 || val == 0x23 || (val >= 0x28 && val <= 0x2F) || (val >= 0x3A && val <= 0x3F) || (val >=0x5B && val <= 0x5F) || (val >= 0x7B && val <= 0xA1) || val == 0xAC || val == 0xB1 || val == 0xB7 || val == 0xBF || val == 0xD7 || val == 0xF7 || (val >= 0x2010 && val <= 0x2014) || val == 0x2016 || (val >= 0x2020 && val <= 0x2022) || val == 0x2026, bSpecialOperator = val == 0x21 || val == 0x23 || (val >= 0x28 && val <= 0x2F) || (val >= 0x3A && val <= 0x3F) || (val >=0x5B && val <= 0x5F) || (val >= 0x7B && val <= 0xA1) || val == 0xAC || val == 0xB1 || val == 0xB7 || val == 0xBF || val == 0xD7 || val == 0xF7 || (val >= 0x2010 && val <= 0x2014) || val == 0x2016 || (val >= 0x2020 && val <= 0x2022) || val == 0x2026,
bSpecialArrow = val >= 0x2190 && val <= 0x21FF, bSpecialArrow = val >= 0x2190 && val <= 0x21FF,
...@@ -878,21 +859,40 @@ CMathText.prototype = ...@@ -878,21 +859,40 @@ CMathText.prototype =
// отдельно Cambria Math 0x27 // отдельно Cambria Math 0x27
return bSpecialOperator || bSpecialArrow || bSpecialSymbols || bOtherArrows; return bSpecialOperator || bSpecialArrow || bSpecialSymbols || bOtherArrows;
}, };
Can_AddNumbering: function() ////
{ CMathText.prototype.setCoeffTransform = function(sx, shx, shy, sy)
return true; {
}, this.transform = {sx: sx, shx: shx, shy: shy, sy: sy};
////
Copy: function() //здесь надо будет по-другому считать размер, после трансформации размер будет выставляться в g_oTextMeasurer
{ //
//MathControl.pGraph.transform(sx, shy, shx, sy, 0, 0);
this.applyTransformation();
};
CMathText.prototype.applyTransformation = function()
{
var sx = this.transform.sx, shx = this.transform.shx,
shy = this.transform.shy, sy = this.transform.sy;
sy = (sy < 0) ? -sy : sy;
this.size.width = this.size.width*sx + (-1)*this.size.width*shx;
this.size.height = this.size.height*sy + this.size.height*shy;
this.size.ascent = this.size.ascent*(sy + shy);
this.size.descent = this.size.descent*(sy + shy);
this.size.center = this.size.center*(sy + shy);
};
CMathText.prototype.Copy = function()
{
var NewLetter = new CMathText(this.bJDraw); var NewLetter = new CMathText(this.bJDraw);
NewLetter.Type = this.Type; NewLetter.Type = this.Type;
NewLetter.value = this.value; NewLetter.value = this.value;
return NewLetter; return NewLetter;
}, };
Write_ToBinary : function(Writer) CMathText.prototype.Write_ToBinary = function(Writer)
{ {
// Пишем тип дла раза, 1 раз для общей функции чтения, второй раз // Пишем тип дла раза, 1 раз для общей функции чтения, второй раз
// для разделения обычного MathText от PlaceHolder // для разделения обычного MathText от PlaceHolder
Writer.WriteLong(this.Type); Writer.WriteLong(this.Type);
...@@ -901,119 +901,79 @@ CMathText.prototype = ...@@ -901,119 +901,79 @@ CMathText.prototype =
// Long : value // Long : value
Writer.WriteLong(this.Type); Writer.WriteLong(this.Type);
Writer.WriteLong(this.value) ; Writer.WriteLong(this.value) ;
}, };
Read_FromBinary : function(Reader) CMathText.prototype.Read_FromBinary = function(Reader)
{ {
this.Type = Reader.GetLong(); this.Type = Reader.GetLong();
this.value = Reader.GetLong(); this.value = Reader.GetLong();
}
}; };
function CMathAmp() function CMathAmp()
{ {
CMathAmp.superclass.constructor.call(this);
this.bEqArray = false; this.bEqArray = false;
this.Type = para_Math_Ampersand; this.Type = para_Math_Ampersand;
this.GapLeft = 0; this.value = 0x26;
this.GapRight = 0;
this.pos = new CMathPosition();
this.AmpText = new CMathText(false); this.AmpText = new CMathText(false);
this.AmpText.add(0x26); this.AmpText.add(this.value);
this.size = null;
this.Parent = null;
this.Width = 0;
} }
CMathAmp.prototype = Asc.extendClass(CMathAmp, CMathBaseText);
CMathAmp.prototype.Measure = function(oMeasure, TextPr, InfoMathText)
{ {
Measure: function(oMeasure, TextPr, InfoMathText)
{
this.bEqArray = InfoMathText.bEqArray; this.bEqArray = InfoMathText.bEqArray;
this.AmpText.Measure(oMeasure, TextPr, InfoMathText); this.AmpText.Measure(oMeasure, TextPr, InfoMathText);
if(this.bEqArray) if(this.bEqArray)
{ {
this.size = this.size.width = 0;
{ this.size.ascent = 0;
width: 0, this.size.height = 0;
height: 0,
ascent: 0
};
this.Width = 0;
} }
else else
{ {
this.size = this.size.width = this.AmpText.size.width;
{ this.size.height = this.AmpText.size.height;
width: this.AmpText.size.width/* + this.GapLeft + this.GapRight*/, this.size.ascent = this.AmpText.size.ascent;
height: this.AmpText.size.height,
ascent: this.AmpText.size.ascent
};
this.Width = this.AmpText.Width;
} }
}, this.Width = (this.size.width * TEXTWIDTH_DIVIDER) | 0;
PreRecalc: function(Parent, ParaMath, ArgSize, RPI) };
{ CMathAmp.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI)
{
this.Parent = Parent; this.Parent = Parent;
this.AmpText.PreRecalc(Parent, ParaMath, ArgSize, RPI); this.AmpText.PreRecalc(Parent, ParaMath, ArgSize, RPI);
}, };
getCodeChr: function() CMathAmp.prototype.getCodeChr = function()
{ {
var code = null; var code = null;
if(!this.bEqArray) if(!this.bEqArray)
code = this.AmpText.getCodeChr(); code = this.AmpText.getCodeChr();
return code; return code;
}, };
IsText: function() CMathAmp.prototype.IsText = function()
{ {
return !this.bEqArray; return !this.bEqArray;
}, };
// special for Run CMathAmp.prototype.setPosition = function(pos)
Get_WidthVisible: function() {
{
return this.size.width + this.GapLeft + this.GapRight;
},
// работаем через функцию, т.к. поля GapLeft и GapRight могут измениться из-за изменения переноса, а пересчет (Measure) в этом случае не прийдет
Get_Width: function()
{
return this.size.width + this.GapLeft + this.GapRight;
},
Get_Width2: function()
{
return ( (this.size.width + this.GapLeft + this.GapRight)* TEXTWIDTH_DIVIDER ) | 0;
},
Update_GapLeft: function(Gap)
{
this.GapLeft = Gap;
},
Update_GapRight: function(Gap)
{
this.GapRight = Gap;
},
relate: function(parent)
{
this.Parent = parent;
},
setPosition: function(pos)
{
this.pos.x = pos.x; this.pos.x = pos.x;
this.pos.y = pos.y; this.pos.y = pos.y;
if(this.bEqArray==false) if(this.bEqArray == false)
this.AmpText.setPosition(pos); this.AmpText.setPosition(pos);
}, };
Draw: function(x, y, pGraphics, InfoTextPr) CMathAmp.prototype.relate = function(Parent)
{ {
this.Parent = Parent;
this.AmpText.relate(Parent);
};
CMathAmp.prototype.Draw = function(x, y, pGraphics, InfoTextPr)
{
if(this.bEqArray==false) if(this.bEqArray==false)
this.AmpText.Draw(x + this.GapLeft, y, pGraphics, InfoTextPr); this.AmpText.Draw(x + this.GapLeft, y, pGraphics, InfoTextPr);
else if(editor.ShowParaMarks) // показать метки выравнивания, если включена отметка о знаках параграфа else if(editor.ShowParaMarks) // показать метки выравнивания, если включена отметка о знаках параграфа
...@@ -1024,205 +984,26 @@ CMathAmp.prototype = ...@@ -1024,205 +984,26 @@ CMathAmp.prototype =
pGraphics.drawVerLine(0, X, Y, Y2, 0.1); pGraphics.drawVerLine(0, X, Y, Y2, 0.1);
} }
},
GetLocationOfLetter: function()
{
var pos = new CMathPosition();
pos.x = this.pos.x;
pos.y = this.pos.y;
return pos;
},
IsPlaceholder: function()
{
return false;
},
GetCompiled_ScrStyles: function()
{
return this.Parent.GetCompiled_ScrStyles();
},
IsAccent: function()
{
return this.Parent.IsAccent();
},
IsAlignPoint: function()
{
return this.bEqArray;
},
Copy : function()
{
return new CMathAmp();
},
Can_AddNumbering: function()
{
return false;
},
Write_ToBinary : function(Writer)
{
// Long : Type
Writer.WriteLong( this.Type );
},
Read_FromBinary : function(Reader)
{
}
}; };
CMathAmp.prototype.Is_InclineLetter = function()
var MathFont_ForMathText = 1;
var MathFont_ForSpecialOperator = 2;
function GetMathModifiedFont(type, TextPr, Class)
{ {
var NewMathTextPr = new CTextPr(); return false;
if(type == MathFont_ForMathText) };
{ CMathAmp.prototype.IsAlignPoint = function()
// RFonts влияют на отрисовку текста в формулах
NewMathTextPr.RFonts = TextPr.RFonts;
NewMathTextPr.FontFamily = TextPr.FontFamily;
NewMathTextPr.Bold = TextPr.Bold;
NewMathTextPr.Italic = TextPr.Italic;
NewMathTextPr.FontSize = MathApplyArgSize(TextPr.FontSize, Class.Parent.Compiled_ArgSz.value);
// скопируем эти свойства для SetFontSlot
// для SpecialOperator нужны уже скомпилированные для мат текста текстовые настройки, поэтому важно эи свойства скопировать именно здесь, а не передавать в MathText обычные текст. настройки
NewMathTextPr.CS = TextPr.CS;
NewMathTextPr.bRTL = TextPr.RTL;
NewMathTextPr.Lang = TextPr.Lang;
//if(Class.IsMathematicalText())
if(!Class.IsNormalText()) // выставляем false, чтобы не применился наклон к спец символам
{
NewMathTextPr.Italic = false;
NewMathTextPr.Bold = false;
}
}
else if(type == MathFont_ForSpecialOperator)
{
NewMathTextPr.FontFamily = {Name : "Cambria Math", Index : -1};
NewMathTextPr.RFonts.Set_All("Cambria Math",-1);
NewMathTextPr.FontSize = TextPr.FontSize;
NewMathTextPr.Bold = TextPr.Bold;
NewMathTextPr.Italic = TextPr.Italic;
//pGraphics.SetFont(FFont);
}
return NewMathTextPr;
}
function CMathInfoTextPr(TextPr, ArgSize, bNormalText, Theme)
{ {
this.BFirstSetTextPr = true; return this.bEqArray;
this.TextPr = new CTextPr(); };
this.CurrentTextPr = new CTextPr(); CMathAmp.prototype.Copy = function()
this.bNormalText = bNormalText;
this.bSpecialOperator = false;
this.Theme = Theme;
this.RFontsCompare = [];
this.SetTextPr(TextPr, ArgSize);
}
CMathInfoTextPr.prototype.SetTextPr = function(TextPr, ArgSize)
{ {
this.TextPr.RFonts = TextPr.RFonts; return new CMathAmp();
this.TextPr.FontFamily = TextPr.FontFamily;
this.TextPr.Bold = TextPr.Bold;
this.TextPr.Italic = TextPr.Italic;
this.TextPr.FontSize = MathApplyArgSize(TextPr.FontSize, ArgSize);
// скопируем эти свойства для SetFontSlot
// для SpecialOperator нужны уже скомпилированные для мат текста текстовые настройки, поэтому важно эи свойства скопировать именно здесь, а не передавать в MathText обычные текст. настройки
this.TextPr.CS = TextPr.CS;
this.TextPr.RTL = TextPr.RTL;
this.TextPr.Lang = TextPr.Lang;
this.RFontsCompare[fontslot_ASCII] = undefined !== this.TextPr.RFonts.Ascii && this.TextPr.RFonts.Ascii.Name == "Cambria Math";
this.RFontsCompare[fontslot_HAnsi] = undefined !== this.TextPr.RFonts.HAnsi && this.TextPr.RFonts.HAnsi.Name == "Cambria Math";
this.RFontsCompare[fontslot_CS] = undefined !== this.TextPr.RFonts.CS && this.TextPr.RFonts.CS.Name == "Cambria Math";
this.RFontsCompare[fontslot_EastAsia] = undefined !== this.TextPr.RFonts.EastAsia && this.TextPr.RFonts.EastAsia.Name == "Cambria Math";
this.CurrentTextPr.Merge(this.TextPr);
}; };
CMathInfoTextPr.prototype.NeedUpdateTextPrp = function(code, fontSlot, IsPlaceholder) CMathAmp.prototype.Write_ToBinary = function(Writer)
{ {
var NeedUpdate = false; // Long : Type
Writer.WriteLong( this.Type );
if(this.BFirstSetTextPr == true)
{
this.BFirstSetTextPr = false;
NeedUpdate = true;
}
// IsMathematicalText || Placeholder ?
if(this.bNormalText == false || IsPlaceholder)
{
var BoldItalicForMath = this.RFontsCompare[fontSlot] == true && (this.CurrentTextPr.Bold !== false || this.CurrentTextPr.Italic !== false),
BoldItalicForOther = this.RFontsCompare[fontSlot] == false && (this.CurrentTextPr.Bold !== this.TextPr.Bold || this.CurrentTextPr.Italic !== this.TextPr.Italic);
var BoldItalicPlh = IsPlaceholder && (this.CurrentTextPr.Bold !== false || this.CurrentTextPr.Italic !== false);
if(BoldItalicForMath || BoldItalicPlh) // Cambria Math
{
this.CurrentTextPr.Italic = false;
this.CurrentTextPr.Bold = false;
NeedUpdate = true;
}
else if(BoldItalicForOther) // Not Cambria Math
{
this.CurrentTextPr.Bold = this.TextPr.Bold;
this.CurrentTextPr.Italic = this.TextPr.Italic;
NeedUpdate = true;
}
var checkSpOperator = Math_Is_SpecilalOperator(code),
IsPlh = IsPlaceholder && this.RFontsCompare[fontSlot] == false;
if( checkSpOperator !== this.bSpecialOperator || IsPlh)
{
if(checkSpOperator == false)
{
this.CurrentTextPr.FontFamily = this.TextPr.FontFamily;
this.CurrentTextPr.RFonts.Set_FromObject(this.TextPr.RFonts);
this.bSpecialOperator = false;
NeedUpdate = true;
}
else if(this.RFontsCompare[fontSlot] == false)
{
this.CurrentTextPr.FontFamily = {Name : "Cambria Math", Index : -1};
this.CurrentTextPr.RFonts.Set_All("Cambria Math",-1);
this.bSpecialOperator = true;
NeedUpdate = true;
}
}
}
return NeedUpdate;
}; };
CMathInfoTextPr.prototype.GetFontSlot = function(code) CMathAmp.prototype.Read_FromBinary = function(Reader)
{ {
var Hint = this.TextPr.RFonts.Hint;
var bCS = this.TextPr.CS;
var bRTL = this.TextPr.RTL;
var lcid = this.TextPr.Lang.EastAsia;
return g_font_detector.Get_FontClass(code, Hint, lcid, bCS, bRTL);
}; };
var MathTextInfo_MathText = 1; var MathTextInfo_MathText = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment