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;
+    },
 //-----------------------------------------------------------------------------------
 // Функции отрисовки
 //-----------------------------------------------------------------------------------