diff --git a/Word/Editor/Comments.js b/Word/Editor/Comments.js index 44a6c8d9c18d7fd0e3225ed59b7754e862e9793d..931e0c96012f7cf9305d79f2ac3f8a03480d937f 100644 --- a/Word/Editor/Comments.js +++ b/Word/Editor/Comments.js @@ -1052,6 +1052,11 @@ ParaComment.prototype = { return { X : X }; }, + + Recalculate_MinMaxContentWidth : function() + { + + }, //----------------------------------------------------------------------------------- // Функции отриÑовки //----------------------------------------------------------------------------------- diff --git a/Word/Editor/Hyperlink.js b/Word/Editor/Hyperlink.js index fc62a308577fbe3a3f5ea89dcadf764c043c7381..9343f379de38b3cd3bfdf89b29d44be7281d59d5 100644 --- a/Word/Editor/Hyperlink.js +++ b/Word/Editor/Hyperlink.js @@ -958,6 +958,15 @@ ParaHyperlink.prototype = { this.Paragraph.Refresh_RecalcData2(0); }, + + Recalculate_MinMaxContentWidth : function(MinMax) + { + var Count = this.Content.length; + for ( var Pos = 0; Pos < Count; Pos++ ) + { + this.Content[Pos].Recalculate_MinMaxContentWidth(MinMax); + } + }, //----------------------------------------------------------------------------------- // Функции отриÑовки //----------------------------------------------------------------------------------- diff --git a/Word/Editor/Math.js b/Word/Editor/Math.js index 993f256a478accfbfbd2fcfea9991a55044675a6..d7c60d5b5caa34443f0dd619f810ac1a9fcdb23e 100644 --- a/Word/Editor/Math.js +++ b/Word/Editor/Math.js @@ -584,6 +584,29 @@ ParaMath2.prototype = { this.Paragraph.Refresh_RecalcData2(0); }, + + Recalculate_MinMaxContentWidth : function(MinMax) + { + // TODO: ЕÑли формула не измерена, тогда здеÑÑŒ её надо измерить + + if ( false === MinMax.bWord ) + { + MinMax.bWord = true; + MinMax.nWordLen = this.Width; + } + else + { + MinMax.nWordLen += this.Width; + } + + if ( MinMax.nSpaceLen > 0 ) + { + MinMax.nCurMaxWidth += MinMax.nSpaceLen; + MinMax.nSpaceLen = 0; + } + + MinMax.nCurMaxWidth += this.Width; + }, //----------------------------------------------------------------------------------- // Функции отриÑовки //----------------------------------------------------------------------------------- diff --git a/Word/Editor/Paragraph.js b/Word/Editor/Paragraph.js index dbe5efb68e933cb9319fd8729bde3413b76bea28..a164f6ea3d88bd777b405c2469f2590c5a0fe1f9 100644 --- a/Word/Editor/Paragraph.js +++ b/Word/Editor/Paragraph.js @@ -5638,39 +5638,64 @@ Paragraph.prototype = Recalculate_MinMaxContentWidth : function() { - // ПереÑчитаем ширины вÑех Ñлементов - this.Internal_Recalculate_0(); + if ( true !== Debug_ParaRunMode ) + { + // ПереÑчитаем ширины вÑех Ñлементов + this.Internal_Recalculate_0(); - var bWord = false; - var nWordLen = 0; - var nSpaceLen = 0; - var nMinWidth = 0; - var nMaxWidth = 0; + var bWord = false; + var nWordLen = 0; + var nSpaceLen = 0; + var nMinWidth = 0; + var nMaxWidth = 0; - var nCurMaxWidth = 0; + var nCurMaxWidth = 0; - var Count = this.Content.length; - for ( var Pos = 0; Pos < Count; Pos++ ) - { - var Item = this.Content[Pos]; + var Count = this.Content.length; + for ( var Pos = 0; Pos < Count; Pos++ ) + { + var Item = this.Content[Pos]; - // TODO: Продумать здеÑÑŒ учет нумерации + // TODO: Продумать здеÑÑŒ учет нумерации - switch( Item.Type ) - { - case para_Math: - case para_Text: + switch( Item.Type ) { - if ( false === bWord ) + case para_Math: + case para_Text: { - bWord = true; - nWordLen = Item.Width; + if ( false === bWord ) + { + bWord = true; + nWordLen = Item.Width; + } + else + { + nWordLen += Item.Width; + + if ( true === Item.SpaceAfter ) + { + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; + + bWord = false; + nWordLen = 0; + } + } + + if ( nSpaceLen > 0 ) + { + nCurMaxWidth += nSpaceLen; + nSpaceLen = 0; + } + + nCurMaxWidth += Item.Width; + + break; } - else - { - nWordLen += Item.Width; - if ( true === Item.SpaceAfter ) + case para_Space: + { + if ( true === bWord ) { if ( nMinWidth < nWordLen ) nMinWidth = nWordLen; @@ -5678,142 +5703,136 @@ Paragraph.prototype = bWord = false; nWordLen = 0; } + + // Мы Ñразу не добавлÑем ширину пробелов к макÑимальной ширине, потому что + // пробелы, идущие в конце параграфа или перед переноÑом Ñтроки(Ñвным), не + // должны учитыватьÑÑ. + nSpaceLen += Item.Width; + + break; } - if ( nSpaceLen > 0 ) + case para_Drawing: { - nCurMaxWidth += nSpaceLen; - nSpaceLen = 0; - } + if ( true === bWord ) + { + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; - nCurMaxWidth += Item.Width; + bWord = false; + nWordLen = 0; + } - break; - } + if ( ( true === Item.Is_Inline() || true === this.Parent.Is_DrawingShape() ) && Item.Width > nMinWidth ) + nMinWidth = Item.Width; - case para_Space: - { - if ( true === bWord ) - { - if ( nMinWidth < nWordLen ) - nMinWidth = nWordLen; + if ( nSpaceLen > 0 ) + { + nCurMaxWidth += nSpaceLen; + nSpaceLen = 0; + } - bWord = false; - nWordLen = 0; + nCurMaxWidth += Item.Width; + + break; } - // Мы Ñразу не добавлÑем ширину пробелов к макÑимальной ширине, потому что - // пробелы, идущие в конце параграфа или перед переноÑом Ñтроки(Ñвным), не - // должны учитыватьÑÑ. - nSpaceLen += Item.Width; + case para_PageNum: + { + if ( true === bWord ) + { + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; - break; - } + bWord = false; + nWordLen = 0; + } - case para_Drawing: - { - if ( true === bWord ) + if ( Item.Width > nMinWidth ) + nMinWidth = Item.Width; + + if ( nSpaceLen > 0 ) + { + nCurMaxWidth += nSpaceLen; + nSpaceLen = 0; + } + + nCurMaxWidth += Item.Width; + + break; + } + + case para_Tab: { + nWordLen += Item.Width; + if ( nMinWidth < nWordLen ) nMinWidth = nWordLen; bWord = false; nWordLen = 0; - } - if ( ( true === Item.Is_Inline() || true === this.Parent.Is_DrawingShape() ) && Item.Width > nMinWidth ) - nMinWidth = Item.Width; - - if ( nSpaceLen > 0 ) - { - nCurMaxWidth += nSpaceLen; - nSpaceLen = 0; - } + if ( nSpaceLen > 0 ) + { + nCurMaxWidth += nSpaceLen; + nSpaceLen = 0; + } - nCurMaxWidth += Item.Width; + nCurMaxWidth += Item.Width; - break; - } + break; + } - case para_PageNum: - { - if ( true === bWord ) + case para_NewLine: { if ( nMinWidth < nWordLen ) nMinWidth = nWordLen; bWord = false; nWordLen = 0; - } - - if ( Item.Width > nMinWidth ) - nMinWidth = Item.Width; - if ( nSpaceLen > 0 ) - { - nCurMaxWidth += nSpaceLen; - nSpaceLen = 0; - } - - nCurMaxWidth += Item.Width; - - break; - } + nSpaceLen = 0; - case para_Tab: - { - nWordLen += Item.Width; + if ( nCurMaxWidth > nMaxWidth ) + nMaxWidth = nCurMaxWidth; - if ( nMinWidth < nWordLen ) - nMinWidth = nWordLen; + nCurMaxWidth = 0; - bWord = false; - nWordLen = 0; + break; + } - if ( nSpaceLen > 0 ) + case para_End: { - nCurMaxWidth += nSpaceLen; - nSpaceLen = 0; - } + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; - nCurMaxWidth += Item.Width; + if ( nCurMaxWidth > nMaxWidth ) + nMaxWidth = nCurMaxWidth; - break; + break; + } } + } - case para_NewLine: - { - if ( nMinWidth < nWordLen ) - nMinWidth = nWordLen; - - bWord = false; - nWordLen = 0; - - nSpaceLen = 0; - - if ( nCurMaxWidth > nMaxWidth ) - nMaxWidth = nCurMaxWidth; - - nCurMaxWidth = 0; + // добавлÑем 0.001, чтобы избавитьÑÑ Ð¾Ñ‚ погрешноÑтей + return { Min : ( nMinWidth > 0 ? nMinWidth + 0.001 : 0 ), Max : ( nMaxWidth > 0 ? nMaxWidth + 0.001 : 0 ) }; + } + else + { + var MinMax = new CParagraphMinMaxContentWidth(); - break; - } + var Count = this.Content.length; + for ( var Pos = 0; Pos < Count; Pos++ ) + { + var Item = this.Content[Pos]; - case para_End: - { - if ( nMinWidth < nWordLen ) - nMinWidth = nWordLen; + Item.Recalculate_MinMaxContentWidth( MinMax ); + } - if ( nCurMaxWidth > nMaxWidth ) - nMaxWidth = nCurMaxWidth; + // добавлÑем 0.001, чтобы избавитьÑÑ Ð¾Ñ‚ погрешноÑтей + return { Min : ( MinMax.nMinWidth > 0 ? MinMax.nMinWidth + 0.001 : 0 ), Max : ( MinMax.nMaxWidth > 0 ? MinMax.nMaxWidth + 0.001 : 0 ) }; - break; - } - } } - - // добавлÑем 0.001, чтобы избавитьÑÑ Ð¾Ñ‚ погрешноÑтей - return { Min : ( nMinWidth > 0 ? nMinWidth + 0.001 : 0 ), Max : ( nMaxWidth > 0 ? nMaxWidth + 0.001 : 0 ) }; }, Draw : function(PageNum, pGraphics) @@ -22214,4 +22233,14 @@ function CParagraphStatistics(Stats) this.Symbol = false; this.Space = false; this.NewWord = false; +} + +function CParagraphMinMaxContentWidth() +{ + this.bWord = false; + this.nWordLen = 0; + this.nSpaceLen = 0; + this.nMinWidth = 0; + this.nMaxWidth = 0; + this.nCurMaxWidth = 0; } \ No newline at end of file diff --git a/Word/Editor/Run.js b/Word/Editor/Run.js index f61d7c029d035945884987f62f77ec830e30c798..c42b1ca5c3699467ff0439b08cbf5ccd51928ed2 100644 --- a/Word/Editor/Run.js +++ b/Word/Editor/Run.js @@ -2346,6 +2346,185 @@ ParaRun.prototype = return true; }, + + Recalculate_MinMaxContentWidth : function(MinMax) + { + this.Recalculate_MeasureContent(); + + var bWord = MinMax.bWord; + var nWordLen = MinMax.nWordLen; + var nSpaceLen = MinMax.nSpaceLen; + var nMinWidth = MinMax.nMinWidth; + var nMaxWidth = MinMax.nMaxWidth; + var nCurMaxWidth = MinMax.nCurMaxWidth; + + var Count = this.Content.length; + for ( var Pos = 0; Pos < Count; Pos++ ) + { + var Item = this.Content[Pos]; + + switch( Item.Type ) + { + case para_Text: + { + if ( false === bWord ) + { + bWord = true; + nWordLen = Item.Width; + } + else + { + nWordLen += Item.Width; + + if ( true === Item.SpaceAfter ) + { + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; + + bWord = false; + nWordLen = 0; + } + } + + if ( nSpaceLen > 0 ) + { + nCurMaxWidth += nSpaceLen; + nSpaceLen = 0; + } + + nCurMaxWidth += Item.Width; + + break; + } + + case para_Space: + { + if ( true === bWord ) + { + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; + + bWord = false; + nWordLen = 0; + } + + // Мы Ñразу не добавлÑем ширину пробелов к макÑимальной ширине, потому что + // пробелы, идущие в конце параграфа или перед переноÑом Ñтроки(Ñвным), не + // должны учитыватьÑÑ. + nSpaceLen += Item.Width; + + break; + } + + case para_Drawing: + { + if ( true === bWord ) + { + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; + + bWord = false; + nWordLen = 0; + } + + if ( ( true === Item.Is_Inline() || true === this.Parent.Is_DrawingShape() ) && Item.Width > nMinWidth ) + nMinWidth = Item.Width; + + if ( nSpaceLen > 0 ) + { + nCurMaxWidth += nSpaceLen; + nSpaceLen = 0; + } + + nCurMaxWidth += Item.Width; + + break; + } + + case para_PageNum: + { + if ( true === bWord ) + { + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; + + bWord = false; + nWordLen = 0; + } + + if ( Item.Width > nMinWidth ) + nMinWidth = Item.Width; + + if ( nSpaceLen > 0 ) + { + nCurMaxWidth += nSpaceLen; + nSpaceLen = 0; + } + + nCurMaxWidth += Item.Width; + + break; + } + + case para_Tab: + { + nWordLen += Item.Width; + + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; + + bWord = false; + nWordLen = 0; + + if ( nSpaceLen > 0 ) + { + nCurMaxWidth += nSpaceLen; + nSpaceLen = 0; + } + + nCurMaxWidth += Item.Width; + + break; + } + + case para_NewLine: + { + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; + + bWord = false; + nWordLen = 0; + + nSpaceLen = 0; + + if ( nCurMaxWidth > nMaxWidth ) + nMaxWidth = nCurMaxWidth; + + nCurMaxWidth = 0; + + break; + } + + case para_End: + { + if ( nMinWidth < nWordLen ) + nMinWidth = nWordLen; + + if ( nCurMaxWidth > nMaxWidth ) + nMaxWidth = nCurMaxWidth; + + break; + } + } + } + + MinMax.bWord = bWord; + MinMax.nWordLen = nWordLen; + MinMax.nSpaceLen = nSpaceLen; + MinMax.nMinWidth = nMinWidth; + MinMax.nMaxWidth = nMaxWidth; + MinMax.nCurMaxWidth = nCurMaxWidth; + }, //----------------------------------------------------------------------------------- // Функции отриÑовки //-----------------------------------------------------------------------------------