Applied SetTextBidiHint()
authorYunji Park <yunji19.park@samsung.com>
Tue, 21 May 2013 06:28:48 +0000 (15:28 +0900)
committerYunji Park <yunji19.park@samsung.com>
Tue, 21 May 2013 06:28:48 +0000 (15:28 +0900)
Change-Id: Ia4647443cfdc6804ee411f3eb317c237799bb329

src/graphics/inc/FGrp_TextTextObject.h
src/graphics/text/FGrp_TextTextObject.cpp
src/graphics/text/FGrp_TextTextWidthManager.cpp [deleted file]
src/graphics/text/FGrp_TextTextWidthManager.h [deleted file]
src/ui/controls/FUiCtrl_EditPresenter.cpp

index d9f43f1..b5ac97d 100644 (file)
@@ -27,6 +27,7 @@
 
 // Includes
 #include "FGrp_TextCommon.h"
+#include "FGrp_FontImpl.h"
 
 // Forward Declarations
 namespace Tizen { namespace Graphics {
@@ -147,6 +148,10 @@ public:
 
        FloatDimension GetTextExtentF(int startTextIndex, int textLength) const;
 
+       Dimension GetTextExtent(void) const;
+
+       FloatDimension GetTextExtentF(void) const;
+
        result SetAction(TextObjectActionType action);
 
        TextObjectActionType GetAction(void) const;
@@ -348,6 +353,10 @@ public:
 
        bool WordExceedsWidthAt(int lineIndex) const;
 
+       void SetTextBidiHint(TextBidiHint bidiHint);
+
+       TextBidiHint GetTextBidiHint(void) const;
+
 private:
        result DrawByLine(_CanvasImpl& canvasImpl, const Rectangle& displayRect);
 
@@ -427,6 +436,7 @@ private:
        bool __isEmailLinkColorDefined;
        bool __isPhoneNumberLinkColorDefined;
        Color __linkColor[TEXT_OBJECT_LINK_COLOR_TYPE_MAX];
+       TextBidiHint __bidiHint;
 
        TextObjectSweepInfo __sweepInfo;
 
index 39ecbc0..8683981 100644 (file)
@@ -97,6 +97,7 @@ TextObject::TextObject(void)
        __linkColor[TEXT_OBJECT_LINK_COLOR_TYPE_EMAIL_SELECT] = Color::GetColor(COLOR_ID_BLUE);
        __linkColor[TEXT_OBJECT_LINK_COLOR_TYPE_PHONE_NUMBER_NORMAL] = Color::GetColor(COLOR_ID_BLUE);
        __linkColor[TEXT_OBJECT_LINK_COLOR_TYPE_PHONE_NUMBER_SELECT] = Color::GetColor(COLOR_ID_BLUE);
+       __bidiHint = TEXT_BIDI_HINT_NONE;
 
        __sweepInfo.isValid = false;
        __sweepInfo.sweepType = TEXT_OBJECT_SWEEP_TYPE_NONE;
@@ -133,6 +134,7 @@ TextObject::Construct(void)
        __defaultOutlineColor = Color::GetColor(COLOR_ID_WHITE);
        __isAlternateLookEnabled = false;
        __linkViewModeEnabled = false;
+       __bidiHint = TEXT_BIDI_HINT_NONE;
 
        __pCompositeText = new (std::nothrow)TextComposite();
        SysTryCatch(NID_GRP, __pCompositeText, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
@@ -174,6 +176,7 @@ TextObject::Construct(const Rectangle& rect)
        __defaultOutlineColor = Color::GetColor(COLOR_ID_WHITE);
        __isAlternateLookEnabled = false;
        __linkViewModeEnabled = false;
+       __bidiHint = TEXT_BIDI_HINT_NONE;
        __rect = _CoordinateSystemUtils::ConvertToFloat(rect);
 
        __pCompositeText = new (std::nothrow)TextComposite();
@@ -216,6 +219,7 @@ TextObject::Construct(const FloatRectangle& rect)
        __defaultOutlineColor = Color::GetColor(COLOR_ID_WHITE);
        __isAlternateLookEnabled = false;
        __linkViewModeEnabled = false;
+       __bidiHint = TEXT_BIDI_HINT_NONE;
        __rect = rect;
 
        __pCompositeText = new (std::nothrow)TextComposite();
@@ -300,6 +304,9 @@ TextObject::Draw(_CanvasImpl& canvasImpl)
        SysTryReturn(NID_GRP, __rect.width > 0.0f && __rect.height > 0.0f, E_INVALID_STATE, E_INVALID_STATE
                        , "[E_INVALID_STATE] This instance is not constructed yet. (width = %d, height = %d)", __rect.width, __rect.height);
 
+       TextBidiHint bidiHint = _GetTextBidiHint();
+       _SetTextBidiHint(__bidiHint);
+
        r = Compose();
        SysTryReturn(NID_GRP, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
@@ -515,6 +522,7 @@ CONTINUE_PROC:
        }
 
        canvasImpl.SetClipBounds(clipRect);
+       _SetTextBidiHint(bidiHint);
 
        return E_SUCCESS;
 }
@@ -547,6 +555,9 @@ TextObject::DrawLine(_CanvasImpl& canvasImpl, int lineIndex)
        FloatRectangle lineBounds;
        float firstDisplayY = __pTextColumn->GetFirstDisplayPositionYF();
 
+       TextBidiHint bidiHint = _GetTextBidiHint();
+       _SetTextBidiHint(__bidiHint);
+
        r = Compose();
        SysTryReturn(NID_GRP, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
 
@@ -565,6 +576,8 @@ TextObject::DrawLine(_CanvasImpl& canvasImpl, int lineIndex)
        int length = pTextLine->GetTextLength();
        pTextLine->Draw(canvasImpl, lineBounds, 0, length, __align, TEXT_OBJECT_ACTION_TYPE_NONE);
 
+       _SetTextBidiHint(bidiHint);
+
        return E_SUCCESS;
 }
 
@@ -685,6 +698,9 @@ TextObject::Compose(void)
 
        SysTryReturn(NID_GRP, __rect.width >= 0.0f && __rect.height >= 0.0f, E_INVALID_STATE, E_INVALID_STATE, "[E_INVALID_STATE] This instance is not constructed yet.");
 
+       TextBidiHint bidiHint = _GetTextBidiHint();
+       _SetTextBidiHint(__bidiHint);
+
        int lineCount = 0;
        FloatRectangle rect = __rect;
        FloatRectangle lineBounds;
@@ -781,6 +797,8 @@ TextObject::Compose(void)
 
        __isChanged = false;
 
+       _SetTextBidiHint(bidiHint);
+
        return E_SUCCESS;
 }
 
@@ -1115,10 +1133,56 @@ TextObject::GetTextExtentF(int startTextIndex, int textLength) const
 {
        IF_NOT_CONSTRUCTED(return FloatDimension(-1, -1));
 
+       TextBidiHint bidiHint = _GetTextBidiHint();
+       _SetTextBidiHint(__bidiHint);
+
        FloatDimension textSize;
        result r = __pCompositeText->GetRegion(startTextIndex, textLength, textSize.width, textSize.height);
        SysTryReturn(NID_GRP, r == E_SUCCESS, FloatDimension(-1, -1), r, "[%s] Propagating.", GetErrorMessage(r));
 
+       _SetTextBidiHint(bidiHint);
+
+       SetLastResult(E_SUCCESS);
+
+       return textSize;
+}
+
+Dimension
+TextObject::GetTextExtent(void) const
+{
+       return _CoordinateSystemUtils::ConvertToInteger(GetTextExtentF());
+}
+
+FloatDimension
+TextObject::GetTextExtentF(void) const
+{
+       IF_NOT_CONSTRUCTED(return FloatDimension(-1, -1));
+
+       TextBidiHint bidiHint = _GetTextBidiHint();
+       _SetTextBidiHint(__bidiHint);
+
+       TextLine* pTextLine = null;
+       FloatDimension textSize(0.0f, 0.0f);
+       FloatDimension lineSize(0.0f, 0.0f);
+       int lineCount = GetTotalLineCount();
+
+       for (int i = 0; i < lineCount; i++)
+       {
+               pTextLine = __pTextColumn->GetTextLine(i);
+               SysTryReturn(NID_GRP, pTextLine, FloatDimension(-1, -1), E_SYSTEM, "[E_SYSTEM] Fail to get text line.");
+
+               pTextLine->GetRegion(0, pTextLine->GetTextLength(), lineSize.width, lineSize.height);
+
+               if (textSize.width < lineSize.width)
+               {
+                       textSize.width = lineSize.width;
+               }
+       }
+
+       textSize.height = GetTotalHeightF();
+
+       _SetTextBidiHint(bidiHint);
+
        SetLastResult(E_SUCCESS);
 
        return textSize;
@@ -1986,6 +2050,10 @@ TextObject::GetCutLinkIndexFromPositionData(float x, float y) const
        IF_NOT_CONSTRUCTED(return -1);
 
        result r = E_SUCCESS;
+
+       TextBidiHint bidiHint = _GetTextBidiHint();
+       _SetTextBidiHint(__bidiHint);
+
        int lineCount = __pTextColumn->GetTotalLineCount();
        if (lineCount <= 0)
        {
@@ -2024,7 +2092,11 @@ TextObject::GetCutLinkIndexFromPositionData(float x, float y) const
        SysTryReturn(NID_GRP, r == E_SUCCESS, -1, r, "[%s] Propagating.", GetErrorMessage(r));
        SysTryReturn(NID_GRP, y + __rect.y >= relPoint.y, -1, E_SYSTEM, "[E_SYSTEM] Fail to get text position information");
 
-       return __pCompositeText->GetCutLinkElementIndexAt(textIndex);
+       int elementIndex =  __pCompositeText->GetCutLinkElementIndexAt(textIndex);
+
+       _SetTextBidiHint(bidiHint);
+
+       return elementIndex;
 }
 
 TextElement*
@@ -2214,6 +2286,9 @@ TextObject::GetTextPositionInfoAt(int textIndex, float& width, float& height, fl
        IF_NOT_CONSTRUCTED(return E_INVALID_STATE);
 
        result r = E_SUCCESS;
+       TextBidiHint bidiHint = _GetTextBidiHint();
+       _SetTextBidiHint(__bidiHint);
+
        int lineCount = __pTextColumn->GetTotalLineCount();
 
        if (lineCount < 1)
@@ -2309,6 +2384,8 @@ TextObject::GetTextPositionInfoAt(int textIndex, float& width, float& height, fl
                SysTryReturn(NID_GRP, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
        }
 
+       _SetTextBidiHint(bidiHint);
+
        return E_SUCCESS;
 }
 
@@ -2341,6 +2418,9 @@ TextObject::GetBlockTextPositionInfoAt(int textIndex, float& width, float& heigh
        IF_NOT_CONSTRUCTED(return E_INVALID_STATE);
 
        result r = E_SUCCESS;
+       TextBidiHint bidiHint = _GetTextBidiHint();
+       _SetTextBidiHint(__bidiHint);
+
        int lineCount = __pTextColumn->GetTotalLineCount();
 
        if (lineCount < 1)
@@ -2422,6 +2502,8 @@ TextObject::GetBlockTextPositionInfoAt(int textIndex, float& width, float& heigh
                SysTryReturn(NID_GRP, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
        }
 
+       _SetTextBidiHint(bidiHint);
+
        return E_SUCCESS;
 }
 
@@ -2496,6 +2578,9 @@ TextObject::GetTextIndexFromPositionInWrap(float x, float y, bool cursorMode) co
        int lineIndex = 0;
        float totalHeight = __pTextColumn->GetTotalHeightF();
 
+       TextBidiHint bidiHint = _GetTextBidiHint();
+       _SetTextBidiHint(__bidiHint);
+
        switch (__align & TEXT_ALIGNMASK_VERT)
        {
        case TEXT_OBJECT_ALIGNMENT_TOP:
@@ -2570,6 +2655,8 @@ TextObject::GetTextIndexFromPositionInWrap(float x, float y, bool cursorMode) co
 
        int index = pTextLine->GetTextIndexFromPosition(x, cursorMode);
 
+       _SetTextBidiHint(bidiHint);
+
        SetLastResult(E_SUCCESS);
 
        return index;
@@ -2593,6 +2680,9 @@ TextObject::GetTextIndexFromPositionInNoneWrap(float x, float y, bool cursorMode
        pTextLine = __pTextColumn->GetTextLine(0);
        SysTryReturn(NID_GRP, pTextLine, -1, E_SYSTEM, "[E_SYSTEM] Fail to get text line.");
 
+       TextBidiHint bidiHint = _GetTextBidiHint();
+       _SetTextBidiHint(__bidiHint);
+
        lineOffset = pTextLine->GetTextOffset();
        lineLength = pTextLine->GetTextLength();
        lineBounds = pTextLine->GetBoundsF();
@@ -2633,6 +2723,8 @@ TextObject::GetTextIndexFromPositionInNoneWrap(float x, float y, bool cursorMode
 
        int index = pTextLine->GetTextIndexFromPosition(x, cursorMode);
 
+       _SetTextBidiHint(bidiHint);
+
        SetLastResult(E_SUCCESS);
        return index;
 }
@@ -4066,4 +4158,23 @@ TextObject::WordExceedsWidthAt(int lineIndex) const
        return hasOneWord;
 }
 
+void
+TextObject::SetTextBidiHint(TextBidiHint bidiHint)
+{
+       switch (bidiHint)
+       {
+       case TEXT_BIDI_HINT_NONE:
+       case TEXT_BIDI_HINT_LTR:
+       case TEXT_BIDI_HINT_RTL:
+               __bidiHint = bidiHint;
+               break;
+       }
+}
+
+TextBidiHint
+TextObject::GetTextBidiHint(void) const
+{
+       return __bidiHint;
+}
+
 }}} // Tizen::Graphics::_Text
diff --git a/src/graphics/text/FGrp_TextTextWidthManager.cpp b/src/graphics/text/FGrp_TextTextWidthManager.cpp
deleted file mode 100644 (file)
index 47eda7d..0000000
+++ /dev/null
@@ -1,2359 +0,0 @@
-//
-// Open Service Platform
-// Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Apache License, Version 2.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0/
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-/*
- * @file       FGrp_TextTextWidthManager.cpp
- * @brief      This is the implementation file for TextWidthManager class.
- */
-
-#include <FBaseSysLog.h>
-#include "FGrp_TextCommon.h"
-#include "FGrp_TextTextElement.h"
-#include "FGrp_TextTextSimple.h"
-#include "FGrp_TextTextCutLink.h"
-#include "FGrp_TextTextComposite.h"
-#include "FGrp_TextTextSimpleList.h"
-#include "FGrp_TextTextWidthManager.h"
-#include "FGrp_CoordinateSystemUtils.h"
-
-using namespace Tizen::Base::Utility;
-
-namespace
-{
-       const int MAX_TEXT_WIDTH_INFO_MERGE_LENGTH = 10;
-}
-
-namespace Tizen { namespace Graphics
-{
-
-namespace _Text
-{
-
-enum TextWidthInfoType
-{
-       TEXT_WIDTH_INFO_UNKNOWN = 0,
-       TEXT_WIDTH_INFO_WORD,
-       TEXT_WIDTH_INFO_SPACE,
-       TEXT_WIDTH_INFO_ENTER,
-       TEXT_WIDTH_INFO_SYMBOL
-};
-
-struct TextWidthCommonInfo
-{
-       TextWidthInfoType type;
-};
-
-struct UnknownTextWidthInfo : public TextWidthCommonInfo
-{
-       int length;
-};
-
-struct WordTextWidthInfo : public TextWidthCommonInfo
-{
-       int length;
-       int width;
-       int maxHeight;
-};
-
-struct SpaceTextWidthInfo : public TextWidthCommonInfo
-{
-       int width;
-       int maxHeight;
-};
-
-struct EnterTextWidthInfo : public TextWidthCommonInfo
-{
-       int length;
-       int maxHeight;
-};
-
-struct SymbolTextWidthInfo : public TextWidthCommonInfo
-{
-       int width;
-       int maxHeight;
-};
-
-TextWidthManager::TextWidthManager(TextComposite* pCompositeText)
-{
-       __isComposing = false;
-       __isInitialized = false;
-       __pCompositeText = pCompositeText;
-       __pTextWidthInfoList = null;
-       __pCurrentComposeTextElement = null;
-       __pCurrentWordWidthInfoNode = null;
-       __pCachedWordWidthInfoNode = null;
-       __currentTextElementLength = 0;
-       __currentTextElementType = TEXT_ELEMENT_TYPE_NONE;
-       __textOffsetOfCachedWidthInfo = 0;
-       __currentTextIndex = 0;
-       __strCurrentRelIndex = 0;
-       __textOffsetOfCurrentWidthInfo = 0;
-       __length = 0;
-       __currentComposeTextElementIndex = 0;
-}
-
-TextWidthManager::~TextWidthManager(void)
-{
-       if (__isInitialized)
-       {
-               Finalize();
-       }
-}
-
-bool
-TextWidthManager::Initialize(int textLength)
-{
-       if (__isInitialized)
-       {
-               Finalize();
-       }
-
-       __pTextWidthInfoList = TextSimpleList::Create();
-       SysTryReturn(NID_GRP
-                               , __pTextWidthInfoList
-                               , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-       TextSimpleList::Init(__pTextWidthInfoList);
-
-       __length = 0;
-       __isComposing = false;
-       __isInitialized = true;
-       __pCurrentComposeTextElement = null;
-       __pCachedWordWidthInfoNode = null;
-       __currentComposeTextElementIndex = 0;
-
-       if (textLength > 0)
-       {
-               InformTextInsert(0, textLength);
-       }
-
-       return true;
-}
-
-bool
-TextWidthManager::Finalize(void)
-{
-       if (!__isInitialized)
-       {
-               return false;
-       }
-
-       if (__pTextWidthInfoList)
-       {
-               TextWidthCommonInfo* pTextWidthCommonInfo = null;
-
-               pTextWidthCommonInfo = static_cast < TextWidthCommonInfo* >(TextSimpleList::DeleteNthObject(__pTextWidthInfoList, 0));
-               while (pTextWidthCommonInfo)
-               {
-                       delete pTextWidthCommonInfo;
-                       pTextWidthCommonInfo = static_cast < TextWidthCommonInfo* >(TextSimpleList::DeleteNthObject(__pTextWidthInfoList, 0));
-               }
-
-               if (__pTextWidthInfoList->nodeCount != 0)
-               {
-                       TextSimpleList::Init(__pTextWidthInfoList);
-               }
-
-               TextSimpleList::Destory(__pTextWidthInfoList);
-               __pTextWidthInfoList = null;
-       }
-
-       __isInitialized = false;
-       __isComposing = false;
-       __length = 0;
-       __pCurrentComposeTextElement = null;
-       __pCachedWordWidthInfoNode = null;
-
-       return true;
-}
-
-bool
-TextWidthManager::StartCompose(int textIndex)
-{
-       if (!__isInitialized)
-       {
-               return false;
-       }
-
-       if (__length <= textIndex)
-       {
-               return false;
-       }
-
-       SimpleNode* pCurrentTextWidthInfoNode = null;
-       int currentWidthInfoTextOffset = 0;
-       TextWidthCommonInfo* pCurrentTextWidthInfo = null;
-
-       pCurrentTextWidthInfoNode = SearchTextWidthInfo(textIndex, currentWidthInfoTextOffset);
-       SysTryReturn(NID_GRP
-                       , pCurrentTextWidthInfoNode
-                       , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width node.");
-
-       pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                       , pCurrentTextWidthInfo
-                       , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       __pCurrentWordWidthInfoNode = pCurrentTextWidthInfoNode;
-       __textOffsetOfCurrentWidthInfo = textIndex - currentWidthInfoTextOffset;
-
-       int elementIndex = 0;
-       int elementTextOffset = 0;
-       __currentTextIndex = textIndex;
-       __pCurrentComposeTextElement = __pCompositeText->GetElementAtTextIndex(textIndex, elementTextOffset,
-                                                                                                                                                                       elementIndex, __currentTextElementLength, __strCurrentRelIndex);
-       SysTryReturn(NID_GRP
-                       , __pCurrentComposeTextElement
-                       , false, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-       __currentComposeTextElementIndex = elementIndex;
-       __currentTextElementType = __pCurrentComposeTextElement->GetType();
-       __isComposing = true;
-
-       return true;
-}
-
-bool
-TextWidthManager::GetCurrentLineInfo(int lineWidth, TextLineComposeInfo& textLineComposeInfo)
-{
-       if (!__isComposing)
-       {
-               return false;
-       }
-
-       if (__length <= __currentTextIndex)
-       {
-               return false;
-       }
-
-       TextWidthCommonInfo* pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(__pCurrentWordWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                               , pCurrentTextWidthInfo
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       if (__textOffsetOfCurrentWidthInfo != 0)
-       {
-               UnknownTextWidthInfo* pUnknownTextWidthInfo = new (std::nothrow) UnknownTextWidthInfo;
-               SysTryReturn(NID_GRP
-                                       , pUnknownTextWidthInfo
-                                       , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-               pUnknownTextWidthInfo->type = TEXT_WIDTH_INFO_UNKNOWN;
-               pUnknownTextWidthInfo->length = GetTextWidthInfoLength(pCurrentTextWidthInfo) - __textOffsetOfCurrentWidthInfo;
-
-               __pCurrentWordWidthInfoNode = SplitWidthInfo(__pCurrentWordWidthInfoNode, __textOffsetOfCurrentWidthInfo,
-                                                                                                                                                                                               pUnknownTextWidthInfo);
-
-               SysTryReturn(NID_GRP
-                                       , __pCurrentWordWidthInfoNode
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width node.");
-
-               __textOffsetOfCurrentWidthInfo = 0;
-
-               pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(__pCurrentWordWidthInfoNode->pObject);
-               SysTryReturn(NID_GRP
-                                       , pCurrentTextWidthInfo
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-       }
-
-       int maxHeight = 0;
-       int remainingWidth = lineWidth;
-       int type = 0;
-       int textCount = 0;
-       int endType = TEXT_RETBY_NORMAL;
-       bool composeDone = false;
-       bool wordMeet = false;
-       bool enterMeet = false;
-       bool spaceMeetAfterWord = false;
-       bool cutLinkMeetAfterWord = false;
-
-       while (!composeDone)
-       {
-               type = pCurrentTextWidthInfo->type;
-
-               switch (type)
-               {
-               case TEXT_WIDTH_INFO_UNKNOWN:
-               {
-                       AnalyzeCurrentUnKnownTextWidthInfo(remainingWidth);
-               }
-               break;
-
-               case TEXT_WIDTH_INFO_WORD:
-               {
-                       if (remainingWidth <= 0)
-                       {
-                               break;
-                       }
-
-                       WordTextWidthInfo* pWordTtextWidthInfo = static_cast < WordTextWidthInfo* >(pCurrentTextWidthInfo);
-                       SysTryReturn(NID_GRP
-                                               , pWordTtextWidthInfo
-                                               , false, E_SYSTEM, "[E_SYSTEM] Fail to cast text width information.");
-
-                       if (pWordTtextWidthInfo->width <= remainingWidth)
-                       {
-                               bool iswordoverWidth = false;
-                               int widthAnalyzed = 0;
-                               int strLengthAnalyzed = 0;
-                               int heightAnalzyed = 0;
-                               bool nextKorean = false;
-                               bool includeCutLink = false;
-
-                               AnalyzeNextTextWidthInfo(remainingWidth - pWordTtextWidthInfo->width, iswordoverWidth,
-                                                                                          widthAnalyzed, strLengthAnalyzed, heightAnalzyed, nextKorean, includeCutLink);
-
-                               if (iswordoverWidth)
-                               {
-                                       if ((nextKorean || !spaceMeetAfterWord) && !cutLinkMeetAfterWord)
-                                       {
-                                               remainingWidth -= (widthAnalyzed + pWordTtextWidthInfo->width);
-                                               if (maxHeight < pWordTtextWidthInfo->maxHeight)
-                                               {
-                                                       maxHeight = pWordTtextWidthInfo->maxHeight;
-                                               }
-
-                                               if (maxHeight < heightAnalzyed)
-                                               {
-                                                       maxHeight = heightAnalzyed;
-                                               }
-
-                                               textCount += (pWordTtextWidthInfo->length + strLengthAnalyzed);
-                                               Seek(pWordTtextWidthInfo->length + strLengthAnalyzed);
-
-                                       }
-                                       endType = TEXT_RETBY_LIMITWIDTH;
-                                       composeDone = true;
-                               }
-                               else
-                               {
-                                       remainingWidth -= (pWordTtextWidthInfo->width + widthAnalyzed);
-                                       if (maxHeight < pWordTtextWidthInfo->maxHeight)
-                                       {
-                                               maxHeight = pWordTtextWidthInfo->maxHeight;
-                                       }
-                                       if (maxHeight < heightAnalzyed)
-                                       {
-                                               maxHeight = heightAnalzyed;
-                                       }
-
-                                       textCount += (pWordTtextWidthInfo->length + strLengthAnalyzed);
-                                       Seek(pWordTtextWidthInfo->length + strLengthAnalyzed);
-
-                                       wordMeet = true;
-                                       cutLinkMeetAfterWord = includeCutLink;
-                               }
-                       }
-                       else
-                       {
-                               SysTryReturn(NID_GRP
-                                                       , __pCurrentWordWidthInfoNode
-                                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width node.");
-
-                               bool nextKorean = false;
-                               int textLengthBeforeSplit = GetTextWidthInfoLength(static_cast < TextWidthCommonInfo* >(__pCurrentWordWidthInfoNode->pObject));
-                               pWordTtextWidthInfo = SplitCurrentWordWidthInfo(remainingWidth, nextKorean);
-                               SysTryReturn(NID_GRP
-                                                       , pWordTtextWidthInfo
-                                                       , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-                               if (textLengthBeforeSplit != pWordTtextWidthInfo->length)
-                               {
-                                       if ((nextKorean || !spaceMeetAfterWord) && !cutLinkMeetAfterWord)
-                                       {
-                                               remainingWidth -= pWordTtextWidthInfo->width;
-                                               if (pWordTtextWidthInfo->maxHeight > maxHeight)
-                                               {
-                                                       maxHeight = pWordTtextWidthInfo->maxHeight;
-                                               }
-                                               textCount += pWordTtextWidthInfo->length;
-                                               Seek(pWordTtextWidthInfo->length);
-                                       }
-                               }
-
-                               endType = TEXT_RETBY_LIMITWIDTH;
-                               composeDone = true;
-                       }
-               }
-               break;
-
-               case TEXT_WIDTH_INFO_SPACE:
-               {
-                       SpaceTextWidthInfo* pSpaceTextWidthInfo = static_cast < SpaceTextWidthInfo* >(pCurrentTextWidthInfo);
-                       SysTryReturn(NID_GRP
-                                               , pSpaceTextWidthInfo
-                                               , false, E_SYSTEM, "[E_SYSTEM] Fail to cast text width information.");
-
-                       if (remainingWidth >= pSpaceTextWidthInfo->width)
-                       {
-                               remainingWidth -= pSpaceTextWidthInfo->width;
-                               if (maxHeight < pSpaceTextWidthInfo->maxHeight)
-                               {
-                                       maxHeight = pSpaceTextWidthInfo->maxHeight;
-                               }
-
-                               textCount++;
-
-                               Seek(1);
-
-                               if (wordMeet)
-                               {
-                                       spaceMeetAfterWord = true;
-                               }
-
-                               cutLinkMeetAfterWord = false;
-                       }
-                       else
-                       {
-                               endType = TEXT_RETBY_LIMITWIDTH;
-                               composeDone = true;
-                       }
-               }
-               break;
-
-               case TEXT_WIDTH_INFO_ENTER:
-               {
-                       endType = TEXT_RETBY_LINEFEED;
-                       composeDone = true;
-                       EnterTextWidthInfo* pEnterTextWidthInfo = static_cast < EnterTextWidthInfo* >(pCurrentTextWidthInfo);
-                       SysTryReturn(NID_GRP
-                                               , pEnterTextWidthInfo
-                                               , false, E_SYSTEM, "[E_SYSTEM] Fail to cast text width information.");
-
-                       maxHeight = pEnterTextWidthInfo->maxHeight;
-                       textCount += pEnterTextWidthInfo->length;
-                       Seek(pEnterTextWidthInfo->length);
-
-                       enterMeet = true;
-               }
-               break;
-
-               case TEXT_WIDTH_INFO_SYMBOL:
-               {
-                       if (textCount == 0)
-                       {
-                               SymbolTextWidthInfo* pSymbolTextWidthInfo = static_cast < SymbolTextWidthInfo* >(pCurrentTextWidthInfo);
-                               SysTryReturn(NID_GRP
-                                                       , pSymbolTextWidthInfo
-                                                       , false, E_SYSTEM, "[E_SYSTEM] Fail to cast text width information.");
-
-                               remainingWidth -= pSymbolTextWidthInfo->width;
-                               maxHeight = pSymbolTextWidthInfo->maxHeight;
-                               textCount++;
-                               Seek(1);
-                       }
-                       else
-                       {
-                               endType = TEXT_RETBY_NORMAL;
-                               composeDone = true;
-                       }
-               }
-               break;
-               }
-
-               if (remainingWidth <= 0)
-               {
-                       break;
-               }
-
-               if (!enterMeet && (__length <= __currentTextIndex))
-               {
-                       endType = TEXT_RETBY_NORMAL;
-                       composeDone = true;
-               }
-
-               if (!composeDone)
-               {
-                       SysTryReturn(NID_GRP
-                                               , __pCurrentWordWidthInfoNode
-                                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width node.");
-
-                       pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(__pCurrentWordWidthInfoNode->pObject);
-                       SysTryReturn(NID_GRP
-                                               , pCurrentTextWidthInfo
-                                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-               }
-       }
-
-       textLineComposeInfo.length = textCount;
-       textLineComposeInfo.width = lineWidth - remainingWidth;
-       textLineComposeInfo.height = maxHeight;
-       textLineComposeInfo.endType = endType;
-
-       return true;
-}
-
-bool
-TextWidthManager::GetCurrentLineInfo(float lineWidth, TextLineComposeInfo& textLineComposeInfo)
-{
-       return GetCurrentLineInfo(_CoordinateSystemUtils::ConvertToInteger(lineWidth), textLineComposeInfo);
-}
-
-bool
-TextWidthManager::EndCompose(void)
-{
-       __isComposing = false;
-       __pCurrentComposeTextElement = null;
-       __pCurrentWordWidthInfoNode = null;
-
-       return true;
-}
-
-bool
-TextWidthManager::InformTextInsert(int textIndex, int textLength)
-{
-       SimpleNode* pCurrentTextWidthInfoNode = null;
-       if (!__isInitialized)
-       {
-               return false;
-       }
-
-       if (__isComposing)
-       {
-               return false;
-       }
-
-       if (__length < textIndex)
-       {
-               return false;
-       }
-
-       if (textIndex == __length)
-       {
-               SimpleNode* pLastNode = TextSimpleList::GetLastNode(__pTextWidthInfoList);
-               int strLastTextWidthInfo = 0;
-               TextWidthCommonInfo* pLastTextWidthInfo = null;
-
-               if (pLastNode != null)
-               {
-                       pLastTextWidthInfo = static_cast < TextWidthCommonInfo* >(pLastNode->pObject);
-                       strLastTextWidthInfo = GetTextWidthInfoLength(pLastTextWidthInfo);
-                       SysTryReturn(NID_GRP
-                                               , strLastTextWidthInfo
-                                               , false, E_SYSTEM, "[E_SYSTEM] Fail to get text element node.");
-               }
-
-               if ((pLastNode == null) || (strLastTextWidthInfo + textLength > MAX_TEXT_WIDTH_INFO_MERGE_LENGTH))
-               {
-                       UnknownTextWidthInfo* pUnknownTextWidthInfo = new (std::nothrow) UnknownTextWidthInfo;
-                       SysTryReturn(NID_GRP
-                                               , pUnknownTextWidthInfo
-                                               , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                       pUnknownTextWidthInfo->type = TEXT_WIDTH_INFO_UNKNOWN;
-                       pUnknownTextWidthInfo->length = 0;
-
-                       pCurrentTextWidthInfoNode = TextSimpleList::AppendObject(__pTextWidthInfoList, pUnknownTextWidthInfo);
-                       SysTryReturn(NID_GRP
-                                               , pCurrentTextWidthInfoNode
-                                               , false, E_SYSTEM, "[E_SYSTEM] Fail to get text element node.");
-
-                       UpdateCachedTextWidhtInfo(__length, pCurrentTextWidthInfoNode);
-                       pUnknownTextWidthInfo->length = textLength;
-               }
-               else
-               {
-                       UnknownTextWidthInfo* pUnknownTextWidthInfo = new (std::nothrow) UnknownTextWidthInfo;
-                       SysTryReturn(NID_GRP
-                                               , pUnknownTextWidthInfo
-                                               , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                       pUnknownTextWidthInfo->type = TEXT_WIDTH_INFO_UNKNOWN;
-                       pUnknownTextWidthInfo->length = strLastTextWidthInfo;
-
-                       delete static_cast < TextWidthCommonInfo* >(pLastNode->pObject);
-                       pLastNode->pObject = pUnknownTextWidthInfo;
-
-                       UpdateCachedTextWidhtInfo(__length - strLastTextWidthInfo, pLastNode);
-                       pUnknownTextWidthInfo->length += textLength;
-               }
-
-               __length += textLength;
-
-               return true;
-       }
-
-       int currentWidthInfoTextOffset = 0;
-       TextWidthCommonInfo* pCurrentTextWidthInfo = null;
-
-       pCurrentTextWidthInfoNode = SearchTextWidthInfo(textIndex, currentWidthInfoTextOffset);
-       if (pCurrentTextWidthInfoNode == null)
-       {
-               return false;
-       }
-       pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                               , pCurrentTextWidthInfo
-                               , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       int textIndexFromCurrentWidthInfoTextOffset = textIndex - currentWidthInfoTextOffset;
-       int widthinfoType = pCurrentTextWidthInfo->type;
-
-       switch (widthinfoType)
-       {
-       case TEXT_WIDTH_INFO_UNKNOWN:
-       {
-               UpdateCachedTextWidhtInfo(currentWidthInfoTextOffset, pCurrentTextWidthInfoNode);
-
-               UnknownTextWidthInfo* pUnknownTextWidthInfo = static_cast < UnknownTextWidthInfo* >(pCurrentTextWidthInfo);
-               SysTryReturn(NID_GRP
-                                       , pUnknownTextWidthInfo
-                                       , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-               pUnknownTextWidthInfo->length += textLength;
-               __length += textLength;
-       }
-       break;
-
-       case TEXT_WIDTH_INFO_WORD:
-       {
-               WordTextWidthInfo* pCurrentWordTextWidthInfo = static_cast < WordTextWidthInfo* >(pCurrentTextWidthInfo);
-               SysTryReturn(NID_GRP
-                                       , pCurrentWordTextWidthInfo
-                                       , false, E_SYSTEM, "[E_SYSTEM] Fail to cast text width information.");
-
-               if ((textIndexFromCurrentWidthInfoTextOffset == 0) &&
-                       (pCurrentWordTextWidthInfo->length + textLength > MAX_TEXT_WIDTH_INFO_MERGE_LENGTH))
-               {
-                       UnknownTextWidthInfo* pUnknownTextWidthInfo = new (std::nothrow) UnknownTextWidthInfo;
-                       SysTryReturn(NID_GRP
-                                               , pUnknownTextWidthInfo
-                                               , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                       pUnknownTextWidthInfo->type = TEXT_WIDTH_INFO_UNKNOWN;
-                       pUnknownTextWidthInfo->length = 0;
-
-                       pCurrentTextWidthInfoNode = TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentTextWidthInfoNode,
-                                                                                                                                                               pUnknownTextWidthInfo);
-                       UpdateCachedTextWidhtInfo(textIndex, pCurrentTextWidthInfoNode);
-                       pUnknownTextWidthInfo->length = textLength;
-               }
-               else
-               {
-                       UnknownTextWidthInfo* pUnknownTextWidthInfo = new (std::nothrow) UnknownTextWidthInfo;
-                       SysTryReturn(NID_GRP
-                                               , pUnknownTextWidthInfo
-                                               , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                       pUnknownTextWidthInfo->type = TEXT_WIDTH_INFO_UNKNOWN;
-                       pUnknownTextWidthInfo->length = pCurrentWordTextWidthInfo->length;
-                       delete static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-                       pCurrentTextWidthInfoNode->pObject = pUnknownTextWidthInfo;
-
-                       UpdateCachedTextWidhtInfo(currentWidthInfoTextOffset, pCurrentTextWidthInfoNode);
-                       pUnknownTextWidthInfo->length += textLength;
-               }
-
-               __length += textLength;
-       }
-       break;
-
-       case TEXT_WIDTH_INFO_SPACE:
-               // fall through
-       case TEXT_WIDTH_INFO_ENTER:
-               // fall through
-       case TEXT_WIDTH_INFO_SYMBOL:
-       {
-               UnknownTextWidthInfo* pUnknownTextWidthInfo = new (std::nothrow) UnknownTextWidthInfo;
-               SysTryReturn(NID_GRP
-                                       , pUnknownTextWidthInfo
-                                       , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-               pUnknownTextWidthInfo->type = TEXT_WIDTH_INFO_UNKNOWN;
-               pUnknownTextWidthInfo->length = GetTextWidthInfoLength(pCurrentTextWidthInfo);
-               delete static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-               pCurrentTextWidthInfoNode->pObject = pUnknownTextWidthInfo;
-
-               UpdateCachedTextWidhtInfo(currentWidthInfoTextOffset, pCurrentTextWidthInfoNode);
-               pUnknownTextWidthInfo->length += textLength;
-               __length += textLength;
-       }
-       break;
-       }
-
-       return true;
-}
-
-bool
-TextWidthManager::InformTextRemove(int textIndex, int textLength)
-{
-       if (!__isInitialized)
-       {
-               return false;
-       }
-
-       if (__isComposing)
-       {
-               return false;
-       }
-
-       if (__length <= textIndex)
-       {
-               return false;
-       }
-
-       if (__length < textIndex + textLength)
-       {
-               textLength = __length - textIndex;
-       }
-
-       int strLengthRemove = textLength;
-       SimpleNode* pCurrentTextWidthInfoNode = null;
-       int currentWidthInfoTextOffset = 0;
-       TextWidthCommonInfo* pCurrentTextWidthInfo = null;
-
-       pCurrentTextWidthInfoNode = SearchTextWidthInfo(textIndex, currentWidthInfoTextOffset);
-       SysTryReturn(NID_GRP
-                               , pCurrentTextWidthInfoNode
-                               , false, E_SYSTEM, "[E_SYSTEM] Fail to get text text width node.");
-
-       pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                               , pCurrentTextWidthInfo
-                               , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       int textIndexFromCurrentWidthInfoTextOffset = textIndex - currentWidthInfoTextOffset;
-       int currentWidthInfoTextLength = GetTextWidthInfoLength(pCurrentTextWidthInfo);
-       bool cachedUpdated = false;
-
-       if ((textIndexFromCurrentWidthInfoTextOffset != 0) || (currentWidthInfoTextLength > textLength))
-       {
-               int strCurrrentRemoveLength = 0;
-               if (textIndexFromCurrentWidthInfoTextOffset == 0)
-               {
-                       strCurrrentRemoveLength = textLength;
-               }
-               else
-               {
-                       if (textLength + textIndexFromCurrentWidthInfoTextOffset >= currentWidthInfoTextLength)
-                       {
-                               strCurrrentRemoveLength = currentWidthInfoTextLength - textIndexFromCurrentWidthInfoTextOffset;
-                       }
-                       else
-                       {
-                               strCurrrentRemoveLength = textLength;
-                       }
-               }
-
-               UpdateCachedTextWidhtInfo(currentWidthInfoTextOffset, pCurrentTextWidthInfoNode);
-               cachedUpdated = true;
-
-               UnknownTextWidthInfo* pUnknownTextWidthInfo = new (std::nothrow) UnknownTextWidthInfo;
-               SysTryReturn(NID_GRP
-                                       , pUnknownTextWidthInfo
-                                       , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-               pUnknownTextWidthInfo->type = TEXT_WIDTH_INFO_UNKNOWN;
-               pUnknownTextWidthInfo->length = currentWidthInfoTextLength - strCurrrentRemoveLength;
-               delete static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-               pCurrentTextWidthInfoNode->pObject = pUnknownTextWidthInfo;
-
-               pCurrentTextWidthInfoNode = pCurrentTextWidthInfoNode->pNext;
-
-               textLength -= strCurrrentRemoveLength;
-       }
-
-       while (textLength)
-       {
-               SimpleNode* pNextTextWidthInfoNode = null;
-
-               SysTryReturn(NID_GRP
-                                       , pCurrentTextWidthInfoNode
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element node.");
-
-               pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-               SysTryReturn(NID_GRP
-                                       , pCurrentTextWidthInfo
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-               currentWidthInfoTextLength = GetTextWidthInfoLength(pCurrentTextWidthInfo);
-
-               if (textLength < currentWidthInfoTextLength)
-               {
-                       break;
-               }
-
-               pNextTextWidthInfoNode = pCurrentTextWidthInfoNode->pNext;
-
-               TextSimpleList::DeleteNode(__pTextWidthInfoList, pCurrentTextWidthInfoNode);
-
-               pCurrentTextWidthInfoNode = pNextTextWidthInfoNode;
-
-               textLength -= currentWidthInfoTextLength;
-       }
-
-       if (textLength > 0)
-       {
-               UnknownTextWidthInfo* pUnknownTextWidthInfo = new (std::nothrow) UnknownTextWidthInfo;
-               SysTryReturn(NID_GRP
-                                       , pUnknownTextWidthInfo
-                                       , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-               pUnknownTextWidthInfo->type = TEXT_WIDTH_INFO_UNKNOWN;
-               pUnknownTextWidthInfo->length = currentWidthInfoTextLength - textLength;
-               delete static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-               pCurrentTextWidthInfoNode->pObject = pUnknownTextWidthInfo;
-       }
-
-       if (!cachedUpdated)
-       {
-               UpdateCachedTextWidhtInfo(textIndex, pCurrentTextWidthInfoNode);
-       }
-
-       __length -= strLengthRemove;
-
-       return true;
-}
-
-int
-TextWidthManager::GetTextWidthInfoLength(TextWidthCommonInfo* pTextWidthCommonInfo)
-{
-       int type = pTextWidthCommonInfo->type;
-
-       switch (type)
-       {
-       case TEXT_WIDTH_INFO_UNKNOWN:
-       {
-               UnknownTextWidthInfo* pUnknownTextWidthInfo = static_cast < UnknownTextWidthInfo* >(pTextWidthCommonInfo);
-               SysTryReturn(NID_GRP
-                                       , pUnknownTextWidthInfo
-                                       , -1, E_SYSTEM, "[E_SYSTEM] Fail to cast text width information.");
-
-               return pUnknownTextWidthInfo->length;
-       }
-
-       case TEXT_WIDTH_INFO_WORD:
-       {
-               WordTextWidthInfo* pWordWidthInfo = static_cast < WordTextWidthInfo* >(pTextWidthCommonInfo);
-               SysTryReturn(NID_GRP
-                                       , pWordWidthInfo
-                                       , -1, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-               return pWordWidthInfo->length;
-       }
-
-       case TEXT_WIDTH_INFO_SPACE:
-               return 1;
-
-       case TEXT_WIDTH_INFO_ENTER:
-       {
-               EnterTextWidthInfo* pEnterWidthInfo = static_cast < EnterTextWidthInfo* >(pTextWidthCommonInfo);
-               SysTryReturn(NID_GRP
-                                       , pEnterWidthInfo
-                                       , -1, E_SYSTEM, "[E_SYSTEM] Fail to cast text width information.");
-
-               return pEnterWidthInfo->length;
-       }
-
-       case TEXT_WIDTH_INFO_SYMBOL:
-               return 1;
-       }
-
-       return -1;
-}
-
-SimpleNode*
-TextWidthManager::SplitWidthInfo(SimpleNode* pOrginalTextWidthInfoNode, int splitStartIndex,
-                                                                               TextWidthCommonInfo* pTextWidthInfo)
-{
-       TextWidthCommonInfo* pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(pOrginalTextWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                       , pCurrentTextWidthInfo
-                       , null, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
-
-       int type = pCurrentTextWidthInfo->type;
-
-       if (type == TEXT_WIDTH_INFO_UNKNOWN)
-       {
-               UnknownTextWidthInfo* pUnknownTextWidthInfo = static_cast < UnknownTextWidthInfo* >(pCurrentTextWidthInfo);
-               SysTryReturn(NID_GRP
-                                       , pUnknownTextWidthInfo
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to cast text width information.");
-
-               pUnknownTextWidthInfo->length = splitStartIndex;
-       }
-       else if (type == TEXT_WIDTH_INFO_WORD)
-       {
-               UnknownTextWidthInfo* pUnknownTextWidthInfo = new (std::nothrow) UnknownTextWidthInfo;
-               SysTryReturn(NID_GRP
-                                       , pUnknownTextWidthInfo
-                                       , null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-               pUnknownTextWidthInfo->type = TEXT_WIDTH_INFO_UNKNOWN;
-               pUnknownTextWidthInfo->length = splitStartIndex;
-               delete static_cast < TextWidthCommonInfo* >(pOrginalTextWidthInfoNode->pObject);
-               pOrginalTextWidthInfoNode->pObject = pUnknownTextWidthInfo;
-       }
-
-       SimpleNode* pNode = TextSimpleList::InsertObjectAfterNode(__pTextWidthInfoList, pOrginalTextWidthInfoNode, pTextWidthInfo);
-       return pNode;
-}
-
-WordTextWidthInfo*
-TextWidthManager::SplitCurrentWordWidthInfo(int limitWidth, bool& isNextKoreanStart)
-{
-       TextWidthCommonInfo* pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(__pCurrentWordWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                       , pCurrentTextWidthInfo
-                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       WordTextWidthInfo* pWordWidthInfo = static_cast < WordTextWidthInfo* >(pCurrentTextWidthInfo);
-       SysTryReturn(NID_GRP
-                       , pWordWidthInfo
-                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       int currentWordWidth = pWordWidthInfo->width;
-       int currentWordLength = pWordWidthInfo->length;
-
-       if ((currentWordWidth - limitWidth) >= (currentWordWidth >> 2))
-       {
-               TextElement* pTextElement = __pCurrentComposeTextElement;
-               int textElementIndex = __currentComposeTextElementIndex;
-               int strSrcRelIndex = __strCurrentRelIndex;
-               int currentLength = Math::Min(__currentTextElementLength, currentWordLength);
-               int stringLength = currentWordLength;
-               int endType = TEXT_RETBY_NORMAL;
-               int remainWidth = limitWidth;
-               int charCount = 0;
-               int width = 0;
-               int height = 0;
-               int maxHeight = 0;
-               int textIndex = 0;
-
-               while (stringLength != 0)
-               {
-                       endType = pTextElement->ForwardAnalyze(strSrcRelIndex, currentLength, remainWidth,
-                                                                                                TEXT_OBJECT_WRAP_TYPE_NONE, charCount, width, height);
-
-                       if (endType == TEXT_RETBY_LIMITWIDTH)
-                       {
-                               textIndex += charCount;
-                               strSrcRelIndex += charCount;
-                               remainWidth -= width;
-                               if (height > maxHeight)
-                               {
-                                       maxHeight = height;
-                               }
-                               break;
-                       }
-                       else if (endType != TEXT_RETBY_LIMITLENGTH)
-                       {
-                               ; //SysAssert(false);
-                       }
-
-                       textElementIndex++;
-                       pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-                       if (pTextElement == null)
-                       {
-                               break;
-                       }
-
-                       remainWidth -= width;
-                       if (height > maxHeight)
-                       {
-                               height = maxHeight;
-                       }
-
-                       strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-                       stringLength -= currentLength;
-                       textIndex += currentLength;
-                       currentLength = Math::Min(stringLength, pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - strSrcRelIndex);
-               }
-
-               SysTryReturn(NID_GRP
-                               , pTextElement
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-               TextSimple* pSimpleTextElement = dynamic_cast < TextSimple* >(pTextElement);
-               SysTryReturn(NID_GRP
-                               , pSimpleTextElement
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to cast text element.");
-
-               wchar_t* pText = (wchar_t*)pSimpleTextElement->GetText();
-               isNextKoreanStart = IsKorean(pText[0]);
-
-               if (textIndex > 0)
-               {
-                       WordTextWidthInfo* pNewWordWidthInfo = new (std::nothrow) WordTextWidthInfo;
-                       SysTryReturn(NID_GRP
-                               , pNewWordWidthInfo
-                               , null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                       pNewWordWidthInfo->type = TEXT_WIDTH_INFO_WORD;
-                       pNewWordWidthInfo->length = textIndex;
-                       pNewWordWidthInfo->maxHeight = height;
-                       pNewWordWidthInfo->width = limitWidth - remainWidth;
-
-                       bool isCacheChanged = false;
-
-                       if (__pCurrentWordWidthInfoNode == __pCachedWordWidthInfoNode)
-                       {
-                               isCacheChanged = true;
-                       }
-
-                       __pCurrentWordWidthInfoNode = TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, __pCurrentWordWidthInfoNode,
-                                                                                                               pNewWordWidthInfo);
-
-                       if (isCacheChanged)
-                       {
-                               __pCachedWordWidthInfoNode = __pCurrentWordWidthInfoNode;
-                       }
-
-                       pWordWidthInfo->length -= textIndex;
-                       pWordWidthInfo->width -= pNewWordWidthInfo->width;
-                       return pNewWordWidthInfo;
-               }
-               else
-               {
-                       return pWordWidthInfo;
-               }
-       }
-       else
-       {
-               int remainingWidth = currentWordWidth - limitWidth;
-
-               TextElement* pTextElement = __pCurrentComposeTextElement;
-               int textElementIndex = __currentComposeTextElementIndex;
-               int strSrcRelIndex = __strCurrentRelIndex;
-               int textLength = currentWordLength;
-               int currentLength = __currentTextElementLength;
-               TextElement* pTextElementStack[10];
-               int textElementStackIndex = 0;
-
-               pTextElementStack[0] = pTextElement;
-
-               while (textLength > 0)
-               {
-                       if (textLength <= currentLength)
-                       {
-                               strSrcRelIndex += (textLength - 1);
-                               break;
-                       }
-
-                       textLength -= currentLength;
-
-                       textElementIndex++;
-                       pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-                       if (pTextElement == null)
-                       {
-                               break;
-                       }
-
-                       strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-                       currentLength = pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - strSrcRelIndex;
-
-                       textElementStackIndex++;
-                       pTextElementStack[textElementStackIndex] = pTextElement;
-               }
-
-               SysTryReturn(NID_GRP
-                                       , pTextElement
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-               int width = 0;
-               int height = 0;
-               int strSrcStartRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-               int widthBackward = 0;
-               int stringLengthBackward = 0;
-               int maxHeight = 0;
-
-               while (0 < remainingWidth)
-               {
-                       pTextElement->GetRegion(strSrcRelIndex, 1, width, height);
-                       if (remainingWidth <= width)
-                       {
-                               widthBackward += width;
-                               stringLengthBackward++;
-                               if (height > maxHeight)
-                               {
-                                       maxHeight = height;
-                               }
-                               break;
-                       }
-
-                       widthBackward += width;
-                       stringLengthBackward++;
-                       remainingWidth -= width;
-
-                       if (height > maxHeight)
-                       {
-                               maxHeight = height;
-                       }
-
-                       if (strSrcStartRelIndex < strSrcRelIndex)
-                       {
-                               strSrcRelIndex--;
-                       }
-                       else
-                       {
-                               textElementStackIndex--;
-                               SysTryReturn(NID_GRP
-                                                       , textElementStackIndex >= 0
-                                                       , null, E_SYSTEM, "[E_SYSTEM] Index must be greater than or equal to 0.");
-
-                               pTextElement = pTextElementStack[textElementStackIndex];
-                               SysTryReturn(NID_GRP
-                                                       , pTextElement
-                                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-                               strSrcStartRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-                               strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - 1;
-                       }
-               }
-
-               TextSimple* pSimpleTextElement = dynamic_cast < TextSimple* >(pTextElement);
-               SysTryReturn(NID_GRP
-                               , pSimpleTextElement
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to cast text element.");
-
-               wchar_t* pText = (wchar_t*)pSimpleTextElement->GetText();
-               isNextKoreanStart = IsKorean(pText[0]);
-
-               if ((stringLengthBackward > 0) && (stringLengthBackward < pWordWidthInfo->length))
-               {
-                       WordTextWidthInfo* pNewWordWidthInfo = new (std::nothrow) WordTextWidthInfo;
-                       SysTryReturn(NID_GRP
-                                       , pNewWordWidthInfo
-                                       , null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                       pNewWordWidthInfo->type = TEXT_WIDTH_INFO_WORD;
-                       pNewWordWidthInfo->length = stringLengthBackward;
-                       pNewWordWidthInfo->maxHeight = height;
-                       pNewWordWidthInfo->width = widthBackward;
-
-                       TextSimpleList::InsertObjectAfterNode(__pTextWidthInfoList, __pCurrentWordWidthInfoNode, pNewWordWidthInfo);
-
-                       pWordWidthInfo->length -= stringLengthBackward;
-                       pWordWidthInfo->width -= widthBackward;
-               }
-               else
-               {
-                       return pWordWidthInfo;
-               }
-
-               return pWordWidthInfo;
-       }
-
-       return null;
-}
-
-WordTextWidthInfo*
-TextWidthManager::SplitWordWidthInfo(SimpleNode* pCurrentWordWidthInfoNode, TextElement* pCurrentTextElement,
-                                                                                  int strCurrentRelIndex, int strCurrentLength, int limitWidth, bool& isNextKoreanStart)
-{
-       WordTextWidthInfo* pWordWidthInfo = static_cast < WordTextWidthInfo* >(pCurrentWordWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                       , pWordWidthInfo
-                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       int currentWordWidth = pWordWidthInfo->width;
-       int currentWordLength = pWordWidthInfo->length;
-
-       if ((currentWordWidth - limitWidth) >= (currentWordWidth >> 2))
-       {
-               TextElement* pTextElement = pCurrentTextElement;
-               int strSrcRelIndex = strCurrentRelIndex;
-               int currentLength = Math::Min(__currentTextElementLength, currentWordLength);
-               int stringLength = currentWordLength;
-               int endType = TEXT_RETBY_NORMAL;
-               int remainWidth = limitWidth;
-               int charCount = 0;
-               int width = 0;
-               int height = 0;
-               int maxHeight = 0;
-               int stringIndex = 0;
-               int textElementIndex = __pCompositeText->GetElementIndexOf(*pCurrentTextElement);
-               SysTryReturn(NID_GRP
-                                       , textElementIndex >= 0
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-               while (stringLength != 0)
-               {
-                       endType = pTextElement->ForwardAnalyze(strSrcRelIndex, currentLength, remainWidth,
-                                                                                                TEXT_OBJECT_WRAP_TYPE_NONE, charCount, width, height);
-
-                       if (endType == TEXT_RETBY_LIMITWIDTH)
-                       {
-                               stringIndex += charCount;
-                               strSrcRelIndex += charCount;
-                               remainWidth -= width;
-                               if (height > maxHeight)
-                               {
-                                       maxHeight = height;
-                               }
-                               break;
-                       }
-                       else if (endType != TEXT_RETBY_LIMITLENGTH)
-                       {
-                               ; //SysAssert(false);
-                       }
-
-                       textElementIndex++;
-                       pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-                       if (pTextElement == null)
-                       {
-                               break;
-                       }
-
-                       remainWidth -= width;
-
-                       if (height > maxHeight)
-                       {
-                               height = maxHeight;
-                       }
-
-                       strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-                       stringLength -= currentLength;
-                       stringIndex += currentLength;
-                       currentLength = Math::Min(stringLength, pTextElement->GetValue(
-                                                                                  SET_TEXT_OFFSET) + pTextElement->GetTextLength() - strSrcRelIndex);
-               }
-
-               SysTryReturn(NID_GRP
-                               , pTextElement
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-               TextSimple* pSimpleTextElement = dynamic_cast < TextSimple* >(pTextElement);
-               SysTryReturn(NID_GRP
-                               , pSimpleTextElement
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to cast text element.");
-
-               wchar_t* pText = (wchar_t*)pSimpleTextElement->GetText();
-               isNextKoreanStart = IsKorean(pText[0]);
-
-               if (stringIndex > 0)
-               {
-                       WordTextWidthInfo* pNewWordWidthInfo = new (std::nothrow) WordTextWidthInfo;
-                       SysTryReturn(NID_GRP
-                               , pNewWordWidthInfo
-                               , null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                       pNewWordWidthInfo->type = TEXT_WIDTH_INFO_WORD;
-                       pNewWordWidthInfo->length = stringIndex;
-                       pNewWordWidthInfo->maxHeight = height;
-                       pNewWordWidthInfo->width = limitWidth - remainWidth;
-
-                       if (pCurrentWordWidthInfoNode == __pCachedWordWidthInfoNode)
-                       {
-                               __pCachedWordWidthInfoNode = TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList,
-                                                                                                                                                       pCurrentWordWidthInfoNode, pNewWordWidthInfo);
-                       }
-                       else
-                       {
-                               TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode, pNewWordWidthInfo);
-                       }
-
-                       pWordWidthInfo->length -= stringIndex;
-                       pWordWidthInfo->width -= pNewWordWidthInfo->width;
-                       return pNewWordWidthInfo;
-               }
-               else
-               {
-                       return pWordWidthInfo;
-               }
-       }
-       else
-       {
-               int remainingWidth = currentWordWidth - limitWidth;
-
-               TextElement* pTextElement = __pCurrentComposeTextElement;
-               int textElementIndex = __currentComposeTextElementIndex;
-               int strSrcRelIndex = strCurrentRelIndex;
-               int textLength = currentWordLength;
-               int currentLength = __currentTextElementLength;
-               TextElement* pTextElementStack[10];
-               int textElementStackIndex = 0;
-
-               pTextElementStack[0] = pTextElement;
-
-               while (textLength > 0)
-               {
-                       if (currentLength >= textLength)
-                       {
-                               strSrcRelIndex += (textLength - 1);
-                               break;
-                       }
-
-                       textLength -= currentLength;
-                       textElementIndex++;
-
-                       pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-                       if (pTextElement == null)
-                       {
-                               break;
-                       }
-
-                       strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-                       currentLength = pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - strSrcRelIndex;
-
-                       textElementStackIndex++;
-                       pTextElementStack[textElementStackIndex] = pTextElement;
-               }
-
-               SysTryReturn(NID_GRP
-                               , pTextElement
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-               int width = 0;
-               int height = 0;
-               int strSrcStartRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-               int widthBackward = 0;
-               int stringLengthBackward = 0;
-               int maxHeight = 0;
-               while (remainingWidth > 0)
-               {
-                       pTextElement->GetRegion(strSrcRelIndex, 1, width, height);
-                       if (remainingWidth <= width)
-                       {
-                               widthBackward += width;
-                               stringLengthBackward++;
-                               if (height > maxHeight)
-                               {
-                                       maxHeight = height;
-                               }
-                               break;
-                       }
-
-                       widthBackward += width;
-                       stringLengthBackward++;
-                       remainingWidth -= width;
-
-                       if (height > maxHeight)
-                       {
-                               maxHeight = height;
-                       }
-
-                       if (strSrcStartRelIndex < strSrcRelIndex)
-                       {
-                               strSrcRelIndex--;
-                       }
-                       else
-                       {
-                               textElementStackIndex--;
-                               SysTryReturn(NID_GRP
-                                                       , textElementStackIndex >= 0
-                                                       , null, E_SYSTEM, "[E_SYSTEM] Index must be greater than or equal to 0.");
-
-                               pTextElement = pTextElementStack[textElementStackIndex];
-                               SysTryReturn(NID_GRP
-                                                       , pTextElement
-                                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-                               strSrcStartRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-                               strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - 1;
-                       }
-               }
-
-               TextSimple* pSimpleTextElement = dynamic_cast < TextSimple* >(pTextElement);
-               SysTryReturn(NID_GRP
-                               , pSimpleTextElement
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to cast text element.");
-
-               wchar_t* pText = (wchar_t*)pSimpleTextElement->GetText();
-               isNextKoreanStart = IsKorean(pText[0]);
-
-               if ((stringLengthBackward > 0) && (stringLengthBackward < pWordWidthInfo->length))
-               {
-                       WordTextWidthInfo* pNewWordWidthInfo = new (std::nothrow) WordTextWidthInfo;
-                       SysTryReturn(NID_GRP
-                               , pNewWordWidthInfo
-                               , null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                       pNewWordWidthInfo->type = TEXT_WIDTH_INFO_WORD;
-                       pNewWordWidthInfo->length = stringLengthBackward;
-                       pNewWordWidthInfo->maxHeight = height;
-                       pNewWordWidthInfo->width = widthBackward;
-
-                       TextSimpleList::InsertObjectAfterNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode, pNewWordWidthInfo);
-
-                       pWordWidthInfo->length -= stringLengthBackward;
-                       pWordWidthInfo->width -= widthBackward;
-               }
-               else
-               {
-                       return pWordWidthInfo;
-               }
-
-               return pWordWidthInfo;
-       }
-
-       return null;
-}
-
-bool
-TextWidthManager::Seek(int textLength)
-{
-       if (__currentTextIndex + textLength > __length)
-       {
-               return false;
-       }
-
-       if (__currentTextIndex + textLength == __length)
-       {
-               __pCurrentWordWidthInfoNode = null;
-               __pCurrentComposeTextElement = null;
-               __currentTextIndex += textLength;
-               return true;
-       }
-
-       if (textLength == 0)
-       {
-               return false;
-       }
-
-       TextWidthCommonInfo* pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(__pCurrentWordWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                               , pCurrentTextWidthInfo
-                               , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       int strCurrentTextWidthInfoLength = GetTextWidthInfoLength(pCurrentTextWidthInfo);
-
-       if (__textOffsetOfCurrentWidthInfo != 0)
-       {
-               return false;
-       }
-
-       int length = textLength;
-
-       while (length > 0)
-       {
-               length -= strCurrentTextWidthInfoLength;
-
-               __pCurrentWordWidthInfoNode = __pCurrentWordWidthInfoNode->pNext;
-               pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(__pCurrentWordWidthInfoNode->pObject);
-               SysTryReturn(NID_GRP
-                                       , pCurrentTextWidthInfo
-                                       , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-               strCurrentTextWidthInfoLength = GetTextWidthInfoLength(pCurrentTextWidthInfo);
-       }
-
-       length = textLength;
-       TextElement* pTextElement = __pCurrentComposeTextElement;
-       int textElementIndex = __currentComposeTextElementIndex;
-       int strSrcRelIndex = __strCurrentRelIndex;
-       int currentLength = __currentTextElementLength;
-
-       while (length > 0)
-       {
-               if (currentLength > length)
-               {
-                       strSrcRelIndex += length;
-                       break;
-               }
-
-               length -= currentLength;
-
-               textElementIndex++;
-               pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-               if (pTextElement == null)
-               {
-                       break;
-               }
-
-               strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-               currentLength = pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - strSrcRelIndex;
-       }
-
-       SysTryReturn(NID_GRP
-                               , pTextElement
-                               , false, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-       __pCurrentComposeTextElement = pTextElement;
-       __strCurrentRelIndex = strSrcRelIndex;
-       __currentTextElementLength = pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - strSrcRelIndex;
-       __currentTextIndex += textLength;
-
-       return true;
-}
-
-bool
-TextWidthManager::AnalyzeCurrentUnKnownTextWidthInfo(int limitWidth)
-{
-       SimpleNode* pCurrentWordWidthInfoNode = __pCurrentWordWidthInfoNode;
-       UnknownTextWidthInfo* pCurrentUnknowTextWidthInfo = static_cast < UnknownTextWidthInfo* >(__pCurrentWordWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                       , pCurrentUnknowTextWidthInfo
-                       , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       int strCurrentTextWidthInfoLength = pCurrentUnknowTextWidthInfo->length;
-
-       TextElement* pTextElement = __pCurrentComposeTextElement;
-       int textElementIndex = __currentComposeTextElementIndex;
-       int strSrcRelIndex = __strCurrentRelIndex;
-       int currentLength = __currentTextElementLength;
-       int textLength = strCurrentTextWidthInfoLength;
-       int width = 0;
-       int height = 0;
-
-       TextElementType objectType;
-
-       bool getDone = false;
-
-       while (textLength > 0)
-       {
-               objectType = pTextElement->GetType();
-
-               switch (objectType)
-               {
-               case TEXT_ELEMENT_TYPE_TEXT:
-                       // fall through
-               case TEXT_ELEMENT_TYPE_CUTLINK:
-               {
-                       TextSimple* pSimpleTextElement = dynamic_cast < TextSimple* >(pTextElement);
-                       SysTryReturn(NID_GRP
-                                       , pSimpleTextElement
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to cast text element.");
-
-                       int wordType = 0;
-                       int currentTextLength = 0;
-
-                       wordType = pSimpleTextElement->GetWordLength(strSrcRelIndex, currentTextLength);
-                       if (wordType == WORD_ENTER)
-                       {
-                               pCurrentUnknowTextWidthInfo->length -= currentTextLength;
-
-                               pTextElement->GetRegion(strSrcRelIndex, 1, width, height);
-
-                               EnterTextWidthInfo* pNewEnterTextWidthInfo = new (std::nothrow) EnterTextWidthInfo;
-                               SysTryReturn(NID_GRP
-                                               , pNewEnterTextWidthInfo
-                                               , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                               pNewEnterTextWidthInfo->type = TEXT_WIDTH_INFO_ENTER;
-                               pNewEnterTextWidthInfo->length = currentTextLength;
-                               pNewEnterTextWidthInfo->maxHeight = height;
-
-                               if (pCurrentWordWidthInfoNode == __pCurrentWordWidthInfoNode)
-                               {
-                                       bool changecachedInfo = false;
-
-                                       if (__pCurrentWordWidthInfoNode == __pCachedWordWidthInfoNode)
-                                       {
-                                               changecachedInfo = true;
-                                       }
-
-                                       __pCurrentWordWidthInfoNode =
-                                               TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                               pNewEnterTextWidthInfo);
-
-                                       if (changecachedInfo)
-                                       {
-                                               __pCachedWordWidthInfoNode = __pCurrentWordWidthInfoNode;
-                                       }
-                               }
-                               else
-                               {
-                                       TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                       pNewEnterTextWidthInfo);
-                               }
-
-                               getDone = true;
-                       }
-                       else if (wordType == WORD_SPACE)
-                       {
-                               pCurrentUnknowTextWidthInfo->length--;
-
-                               pTextElement->GetRegion(strSrcRelIndex, 1, width, height);
-
-                               SpaceTextWidthInfo* pNewSpaceTextWidthInfo = new (std::nothrow) SpaceTextWidthInfo;
-                               SysTryReturn(NID_GRP
-                                               , pNewSpaceTextWidthInfo
-                                               , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                               pNewSpaceTextWidthInfo->type = TEXT_WIDTH_INFO_SPACE;
-                               pNewSpaceTextWidthInfo->width = width;
-                               pNewSpaceTextWidthInfo->maxHeight = height;
-
-                               if (pCurrentWordWidthInfoNode == __pCurrentWordWidthInfoNode)
-                               {
-                                       bool changecachedInfo = false;
-
-                                       if (__pCurrentWordWidthInfoNode == __pCachedWordWidthInfoNode)
-                                       {
-                                               changecachedInfo = true;
-                                       }
-
-                                       __pCurrentWordWidthInfoNode =
-                                               TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                               pNewSpaceTextWidthInfo);
-
-                                       if (changecachedInfo)
-                                       {
-                                               __pCachedWordWidthInfoNode = __pCurrentWordWidthInfoNode;
-                                       }
-                               }
-                               else
-                               {
-                                       TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                       pNewSpaceTextWidthInfo);
-                               }
-
-                               currentLength--;
-                               strSrcRelIndex++;
-                               limitWidth -= width;
-                               textLength--;
-                       }
-                       else
-                       {
-                               if (currentTextLength > textLength)
-                               {
-                                       currentTextLength = textLength;
-                               }
-                               pCurrentUnknowTextWidthInfo->length -= currentTextLength;
-
-                               pTextElement->GetRegion(strSrcRelIndex, currentTextLength, width, height);
-
-                               WordTextWidthInfo* pNewWordTextWidthInfo = new (std::nothrow) WordTextWidthInfo;
-                               SysTryReturn(NID_GRP
-                                               , pNewWordTextWidthInfo
-                                               , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                               pNewWordTextWidthInfo->type = TEXT_WIDTH_INFO_WORD;
-                               pNewWordTextWidthInfo->length = currentTextLength;
-                               pNewWordTextWidthInfo->width = width;
-                               pNewWordTextWidthInfo->maxHeight = height;
-
-                               if (pCurrentWordWidthInfoNode == __pCurrentWordWidthInfoNode)
-                               {
-                                       bool changecachedInfo = false;
-
-                                       if (__pCurrentWordWidthInfoNode == __pCachedWordWidthInfoNode)
-                                       {
-                                               changecachedInfo = true;
-                                       }
-
-                                       __pCurrentWordWidthInfoNode =
-                                               TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                               pNewWordTextWidthInfo);
-
-                                       if (changecachedInfo)
-                                       {
-                                               __pCachedWordWidthInfoNode = __pCurrentWordWidthInfoNode;
-                                       }
-                               }
-                               else
-                               {
-                                       TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                       pNewWordTextWidthInfo);
-                               }
-
-                               currentLength -= currentTextLength;
-                               strSrcRelIndex += currentTextLength;
-                               limitWidth -= width;
-                               textLength -= currentTextLength;
-                       }
-               }
-               break;
-
-               case TEXT_ELEMENT_TYPE_IMAGE:
-               {
-                       pTextElement->GetRegion(0, 1, width, height);
-
-                       pCurrentUnknowTextWidthInfo->length--;
-
-                       SymbolTextWidthInfo* pNewSymbolTextWidthInfo = new (std::nothrow) SymbolTextWidthInfo;
-                       SysTryReturn(NID_GRP
-                                       , pNewSymbolTextWidthInfo
-                                       , false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                       pNewSymbolTextWidthInfo->type = TEXT_WIDTH_INFO_SYMBOL;
-                       pNewSymbolTextWidthInfo->width = width;
-                       pNewSymbolTextWidthInfo->maxHeight = height;
-
-                       if (pCurrentWordWidthInfoNode == __pCurrentWordWidthInfoNode)
-                       {
-                               bool changecachedInfo = false;
-
-                               if (__pCurrentWordWidthInfoNode == __pCachedWordWidthInfoNode)
-                               {
-                                       changecachedInfo = true;
-                               }
-
-                               __pCurrentWordWidthInfoNode =
-                                       TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                       pNewSymbolTextWidthInfo);
-
-                               if (changecachedInfo)
-                               {
-                                       __pCachedWordWidthInfoNode = __pCurrentWordWidthInfoNode;
-                               }
-                       }
-                       else
-                       {
-                               TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                               pNewSymbolTextWidthInfo);
-                       }
-
-                       getDone = true;
-               }
-               break;
-
-               default:
-                       return false;
-               }
-
-               if (limitWidth <= 0)
-               {
-                       break;
-               }
-
-               if (getDone)
-               {
-                       break;
-               }
-
-               if (currentLength <= 0)
-               {
-                       textElementIndex++;
-                       pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-                       if (pTextElement == null)
-                       {
-                               break;
-                       }
-
-                       strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-                       currentLength = pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - strSrcRelIndex;
-               }
-       }
-
-       if (pCurrentUnknowTextWidthInfo->length == 0)
-       {
-               TextSimpleList::DeleteNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode);
-       }
-
-       return true;
-}
-
-SimpleNode*
-TextWidthManager::AnalyzeUnKnownTextWidthInfo(SimpleNode* pCurrentWordWidthInfoNode, TextElement* pCurrentTextElement,
-                                                                                                int strCurrentRelIndex, int strCurrentLength, int limitWidth)
-{
-       SimpleNode* pReturnWordWidthInfoNode = null;
-       SimpleNode* p_current_word_width_info_node = pCurrentWordWidthInfoNode;
-       int strCurrentTextWidthInfoLength = 0;
-
-       UnknownTextWidthInfo* pCurrentUnknowTextWidthInfo = static_cast < UnknownTextWidthInfo* >(pCurrentWordWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                               , pCurrentUnknowTextWidthInfo
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-       strCurrentTextWidthInfoLength = pCurrentUnknowTextWidthInfo->length;
-
-       TextElement* pTextElement = pCurrentTextElement;
-       SysTryReturn(NID_GRP
-                               , pTextElement
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-       int textElementIndex = __pCompositeText->GetElementIndexOf(*pCurrentTextElement);
-       SysTryReturn(NID_GRP
-                               , textElementIndex >= 0
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-       int strSrcRelIndex = strCurrentRelIndex;
-       int currentLength = strCurrentLength;
-       int textLength = strCurrentTextWidthInfoLength;
-       TextElementType objectType;
-       bool getDone = false;
-       int width = 0;
-       int height = 0;
-
-       while (textLength > 0)
-       {
-               objectType = pTextElement->GetType();
-
-               switch (objectType)
-               {
-               case TEXT_ELEMENT_TYPE_TEXT:
-                       // fall through
-               case TEXT_ELEMENT_TYPE_CUTLINK:
-               {
-                       TextSimple* pSimpleTextElement = dynamic_cast < TextSimple* >(pTextElement);
-                       SysTryReturn(NID_GRP
-                                       , pSimpleTextElement
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to cast text element.");
-
-                       int wordType = 0;
-                       int currentTextLength = 0;
-
-                       wordType = pSimpleTextElement->GetWordLength(strSrcRelIndex, currentTextLength);
-                       if (wordType == WORD_ENTER)
-                       {
-                               pCurrentUnknowTextWidthInfo->length -= currentTextLength;
-
-                               pTextElement->GetRegion(strSrcRelIndex, 1, width, height);
-
-                               EnterTextWidthInfo* pNewEnterTextWidthInfo = new (std::nothrow) EnterTextWidthInfo;
-                               SysTryReturn(NID_GRP
-                                               , pNewEnterTextWidthInfo
-                                               , null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                               pNewEnterTextWidthInfo->type = TEXT_WIDTH_INFO_ENTER;
-                               pNewEnterTextWidthInfo->length = currentTextLength;
-                               pNewEnterTextWidthInfo->maxHeight = height;
-
-                               if (pReturnWordWidthInfoNode == null)
-                               {
-                                       bool changecachedInfo = false;
-
-                                       if (p_current_word_width_info_node == __pCachedWordWidthInfoNode)
-                                       {
-                                               changecachedInfo = true;
-                                       }
-
-                                       pReturnWordWidthInfoNode =
-                                               TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                               pNewEnterTextWidthInfo);
-
-                                       if (changecachedInfo)
-                                       {
-                                               __pCachedWordWidthInfoNode = pReturnWordWidthInfoNode;
-                                       }
-                               }
-                               else
-                               {
-                                       TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                       pNewEnterTextWidthInfo);
-                               }
-
-                               getDone = true;
-                       }
-                       else if (wordType == WORD_SPACE)
-                       {
-                               pCurrentUnknowTextWidthInfo->length--;
-
-                               pTextElement->GetRegion(strSrcRelIndex, 1, width, height);
-
-                               SpaceTextWidthInfo* pNewSpaceTextWidthInfo = new (std::nothrow) SpaceTextWidthInfo;
-                               SysTryReturn(NID_GRP
-                                               , pNewSpaceTextWidthInfo
-                                               , null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                               pNewSpaceTextWidthInfo->type = TEXT_WIDTH_INFO_SPACE;
-                               pNewSpaceTextWidthInfo->width = width;
-                               pNewSpaceTextWidthInfo->maxHeight = height;
-
-                               if (pReturnWordWidthInfoNode == null)
-                               {
-                                       bool changecachedInfo = false;
-
-                                       if (p_current_word_width_info_node == __pCachedWordWidthInfoNode)
-                                       {
-                                               changecachedInfo = true;
-                                       }
-
-                                       pReturnWordWidthInfoNode = TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                               pNewSpaceTextWidthInfo);
-
-                                       if (changecachedInfo)
-                                       {
-                                               __pCachedWordWidthInfoNode = pReturnWordWidthInfoNode;
-                                       }
-                               }
-                               else
-                               {
-                                       TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                       pNewSpaceTextWidthInfo);
-                               }
-
-                               currentLength--;
-                               strSrcRelIndex++;
-                               limitWidth -= width;
-                               textLength--;
-                       }
-                       else
-                       {
-                               if (textLength < currentTextLength)
-                               {
-                                       currentTextLength = textLength;
-                               }
-                               pCurrentUnknowTextWidthInfo->length -= currentTextLength;
-
-                               pTextElement->GetRegion(strSrcRelIndex, currentTextLength, width, height);
-
-                               WordTextWidthInfo* pNewWordTextWidthInfo = new (std::nothrow) WordTextWidthInfo;
-                               SysTryReturn(NID_GRP
-                                               , pNewWordTextWidthInfo
-                                               , null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                               pNewWordTextWidthInfo->type = TEXT_WIDTH_INFO_WORD;
-                               pNewWordTextWidthInfo->length = currentTextLength;
-                               pNewWordTextWidthInfo->width = width;
-                               pNewWordTextWidthInfo->maxHeight = height;
-
-                               if (pReturnWordWidthInfoNode == null)
-                               {
-                                       bool changecachedInfo = false;
-
-                                       if (p_current_word_width_info_node == __pCachedWordWidthInfoNode)
-                                       {
-                                               changecachedInfo = true;
-                                       }
-
-                                       pReturnWordWidthInfoNode =
-                                               TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                               pNewWordTextWidthInfo);
-
-                                       if (changecachedInfo)
-                                       {
-                                               __pCachedWordWidthInfoNode = pReturnWordWidthInfoNode;
-                                       }
-                               }
-                               else
-                               {
-                                       TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                       pNewWordTextWidthInfo);
-                               }
-
-                               currentLength -= currentTextLength;
-                               strSrcRelIndex += currentTextLength;
-                               limitWidth -= width;
-                               textLength -= currentTextLength;
-                       }
-               }
-               break;
-
-               case TEXT_ELEMENT_TYPE_IMAGE:
-               {
-                       pTextElement->GetRegion(0, 1, width, height);
-
-                       pCurrentUnknowTextWidthInfo->length--;
-
-                       SymbolTextWidthInfo* pNewSymbolTextWidthInfo = new (std::nothrow) SymbolTextWidthInfo;
-                       SysTryReturn(NID_GRP
-                                       , pNewSymbolTextWidthInfo
-                                       , null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
-
-                       pNewSymbolTextWidthInfo->type = TEXT_WIDTH_INFO_SYMBOL;
-                       pNewSymbolTextWidthInfo->width = width;
-                       pNewSymbolTextWidthInfo->maxHeight = height;
-
-                       if (pReturnWordWidthInfoNode == null)
-                       {
-                               bool changecachedInfo = false;
-
-                               if (p_current_word_width_info_node == __pCachedWordWidthInfoNode)
-                               {
-                                       changecachedInfo = true;
-                               }
-
-                               pReturnWordWidthInfoNode = TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                                       pNewSymbolTextWidthInfo);
-
-                               if (changecachedInfo)
-                               {
-                                       __pCachedWordWidthInfoNode = pReturnWordWidthInfoNode;
-                               }
-                       }
-                       else
-                       {
-                               TextSimpleList::InsertObjectBeforeNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode,
-                                                                                                               pNewSymbolTextWidthInfo);
-                       }
-
-                       getDone = true;
-               }
-               break;
-
-               default:
-                       return false;
-               }
-
-               if (limitWidth <= 0)
-               {
-                       break;
-               }
-
-               if (getDone)
-               {
-                       break;
-               }
-
-               if (currentLength <= 0)
-               {
-                       textElementIndex++;
-                       pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-                       if (pTextElement == null)
-                       {
-                               break;
-                       }
-
-                       strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-                       currentLength = pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - strSrcRelIndex;
-               }
-       }
-
-       if (pCurrentUnknowTextWidthInfo->length == 0)
-       {
-               TextSimpleList::DeleteNode(__pTextWidthInfoList, pCurrentWordWidthInfoNode);
-       }
-
-       return pReturnWordWidthInfoNode;
-}
-
-bool
-TextWidthManager::AnalyzeNextTextWidthInfo(int limitWidth, bool& wordoverWidth, int& widthAnlyzed, int& strLengthAalyzed,
-                                                                                                 int& heightAnalzyed, bool& isnextKorean, bool& meetCutlink)
-{
-       widthAnlyzed = 0;
-       strLengthAalyzed = 0;
-       heightAnalzyed = 0;
-       wordoverWidth = false;
-       isnextKorean = false;
-
-       TextWidthCommonInfo* pCurrentCommonTextWidthInfo = static_cast < TextWidthCommonInfo* >(__pCurrentWordWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                               , pCurrentCommonTextWidthInfo
-                               , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       int strCurrentTextWidthInfoLength = GetTextWidthInfoLength(pCurrentCommonTextWidthInfo);
-
-       SimpleNode* pCurrentWordWidthInfoNode = __pCurrentWordWidthInfoNode->pNext;
-       if (pCurrentWordWidthInfoNode == null)
-       {
-               return false;
-       }
-
-       pCurrentCommonTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentWordWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                       , pCurrentCommonTextWidthInfo
-                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       TextElement* pTextElement = __pCurrentComposeTextElement;
-       int textElementIndex = __currentComposeTextElementIndex;
-       int strSrcRelIndex = __strCurrentRelIndex;
-       int strTextElementLength = __currentTextElementLength;
-
-       int seekLength = strCurrentTextWidthInfoLength;
-
-       while (seekLength > 0)
-       {
-               if (seekLength < strTextElementLength)
-               {
-                       strSrcRelIndex += seekLength;
-                       strTextElementLength -= seekLength;
-                       break;
-               }
-
-               seekLength -= strTextElementLength;
-
-               if (pTextElement->GetType() == TEXT_ELEMENT_TYPE_CUTLINK)
-               {
-                       meetCutlink = true;
-
-                       textElementIndex++;
-                       pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-                       if (pTextElement == null)
-                       {
-                               break;
-                       }
-
-                       break;
-               }
-
-               textElementIndex++;
-               pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-               if (pTextElement == null)
-               {
-                       break;
-               }
-
-               strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-               strTextElementLength = pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - strSrcRelIndex;
-
-               if (pTextElement->GetType() == TEXT_ELEMENT_TYPE_CUTLINK)
-               {
-                       meetCutlink = true;
-                       break;
-               }
-       }
-
-       int widthAnalyzed = 0;
-       int maxHeight = 0;
-       int stringAnalzyed = 0;
-       int widthLeft = limitWidth;
-
-       int type = pCurrentCommonTextWidthInfo->type;
-
-       while (((type == TEXT_WIDTH_INFO_WORD) || (type == TEXT_WIDTH_INFO_UNKNOWN)) && !meetCutlink)
-       {
-                       SysTryReturn(NID_GRP
-                               , pTextElement
-                               , false, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-               int stringtoGo = 0;
-               if (type == TEXT_WIDTH_INFO_WORD)
-               {
-                       WordTextWidthInfo* pWordTtextWidthInfo = static_cast < WordTextWidthInfo* >(pCurrentCommonTextWidthInfo);
-                       SysTryReturn(NID_GRP
-                                       , pWordTtextWidthInfo
-                                       , false, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-                       if (widthLeft < pWordTtextWidthInfo->width)
-                       {
-                               if ((widthLeft <= 0) || (pTextElement->GetType() == TEXT_ELEMENT_TYPE_CUTLINK))
-                               {
-                                       wordoverWidth = true;
-                                       break;
-                               }
-
-                               int textLengthBeforeSplit = GetTextWidthInfoLength(static_cast < TextWidthCommonInfo* >(pCurrentWordWidthInfoNode->pObject));
-                               pWordTtextWidthInfo = SplitWordWidthInfo(pCurrentWordWidthInfoNode, pTextElement, strSrcRelIndex,
-                                               strTextElementLength, widthLeft, isnextKorean);
-
-                               if (textLengthBeforeSplit != pWordTtextWidthInfo->length)
-                               {
-                                       widthAnalyzed += pWordTtextWidthInfo->width;
-                                       stringAnalzyed += pWordTtextWidthInfo->length;
-                                       if (pWordTtextWidthInfo->maxHeight > maxHeight)
-                                       {
-                                               maxHeight = pWordTtextWidthInfo->maxHeight;
-                                       }
-                               }
-
-                               wordoverWidth = true;
-                               break;
-                       }
-                       else
-                       {
-                               widthAnalyzed += pWordTtextWidthInfo->width;
-                               widthLeft -= pWordTtextWidthInfo->width;
-                               stringAnalzyed += pWordTtextWidthInfo->length;
-                               if (pWordTtextWidthInfo->maxHeight > maxHeight)
-                               {
-                                       maxHeight = pWordTtextWidthInfo->maxHeight;
-                               }
-
-                               stringtoGo = pWordTtextWidthInfo->length;
-                       }
-               }
-               else
-               {
-                       SimpleNode* pNewSimpleNode = AnalyzeUnKnownTextWidthInfo(pCurrentWordWidthInfoNode, pTextElement,
-                                                                                                                                                                                                                               strSrcRelIndex, strTextElementLength, widthLeft);
-
-                       SysTryReturn(NID_GRP
-                                       , pNewSimpleNode
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element node.");
-
-                       pCurrentWordWidthInfoNode = pNewSimpleNode;
-                       pCurrentCommonTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentWordWidthInfoNode->pObject);
-                       SysTryReturn(NID_GRP
-                                       , pCurrentCommonTextWidthInfo
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-                       type = pCurrentCommonTextWidthInfo->type;
-               }
-
-               if (stringtoGo > 0)
-               {
-                       pCurrentWordWidthInfoNode = pCurrentWordWidthInfoNode->pNext;
-                       if (pCurrentWordWidthInfoNode == null)
-                       {
-                               break;
-                       }
-
-                       pCurrentCommonTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentWordWidthInfoNode->pObject);
-                       SysTryReturn(NID_GRP
-                                       , pCurrentCommonTextWidthInfo
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element node.");
-
-                       type = pCurrentCommonTextWidthInfo->type;
-
-                       seekLength = stringtoGo;
-
-                       while (seekLength > 0)
-                       {
-                               if (seekLength < strTextElementLength)
-                               {
-                                       strSrcRelIndex += seekLength;
-                                       strTextElementLength -= seekLength;
-                                       break;
-                               }
-
-                               seekLength -= strTextElementLength;
-
-                               if (pTextElement->GetType() == TEXT_ELEMENT_TYPE_CUTLINK)
-                               {
-                                       textElementIndex++;
-                                       pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-                                       if (pTextElement == null)
-                                       {
-                                               break;
-                                       }
-
-                                       meetCutlink = true;
-                                       break;
-                               }
-
-                               textElementIndex++;
-                               pTextElement = __pCompositeText->GetElementAtElementIndex(textElementIndex);
-                               SysTryReturn(NID_GRP
-                                               , pTextElement
-                                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text element.");
-
-                               strSrcRelIndex = pTextElement->GetValue(SET_TEXT_OFFSET);
-                               strTextElementLength = pTextElement->GetValue(SET_TEXT_OFFSET) + pTextElement->GetTextLength() - strSrcRelIndex;
-
-                               if (pTextElement->GetType() == TEXT_ELEMENT_TYPE_CUTLINK)
-                               {
-                                       meetCutlink = true;
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       widthAnlyzed = widthAnalyzed;
-       strLengthAalyzed = stringAnalzyed;
-       heightAnalzyed = maxHeight;
-
-       return true;
-}
-
-bool
-TextWidthManager::UpdateCachedTextWidhtInfo(int textOffset, SimpleNode* pTextWidthInfoNode)
-{
-       __pCachedWordWidthInfoNode = pTextWidthInfoNode;
-       __textOffsetOfCachedWidthInfo = textOffset;
-
-       return true;
-}
-
-SimpleNode*
-TextWidthManager::SearchTextWidthInfo(int textIndex, int& widthInfoTextOffset)
-{
-       SimpleNode* pCurrentTextWidthInfoNode = __pCachedWordWidthInfoNode;
-       int currentWidthInfoTextOffset = __textOffsetOfCachedWidthInfo;
-
-       if (pCurrentTextWidthInfoNode == null)
-       {
-               pCurrentTextWidthInfoNode = TextSimpleList::GetNthNode(__pTextWidthInfoList, 0);
-               currentWidthInfoTextOffset = 0;
-       }
-
-       if (pCurrentTextWidthInfoNode == null)
-       {
-               widthInfoTextOffset = 0;
-               return null;
-       }
-
-       TextWidthCommonInfo* pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-       SysTryReturn(NID_GRP
-                       , pCurrentTextWidthInfo
-                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-       if (currentWidthInfoTextOffset < textIndex)
-       {
-               int currentWidthInfoTextLength = GetTextWidthInfoLength(pCurrentTextWidthInfo);
-
-               while (currentWidthInfoTextOffset + currentWidthInfoTextLength <= textIndex)
-               {
-                       pCurrentTextWidthInfoNode = pCurrentTextWidthInfoNode->pNext;
-                       SysTryReturn(NID_GRP
-                                       , pCurrentTextWidthInfoNode
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width.");
-
-                       currentWidthInfoTextOffset += currentWidthInfoTextLength;
-                       pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-                       SysTryReturn(NID_GRP
-                                       , pCurrentTextWidthInfo
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width information.");
-
-                       currentWidthInfoTextLength = GetTextWidthInfoLength(pCurrentTextWidthInfo);
-               }
-       }
-       else if (textIndex < currentWidthInfoTextOffset)
-       {
-               pCurrentTextWidthInfoNode = pCurrentTextWidthInfoNode->pPrev;
-
-               SysTryReturn(NID_GRP
-                               , pCurrentTextWidthInfoNode
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width.");
-
-               pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-               SysTryReturn(NID_GRP
-                               , pCurrentTextWidthInfo
-                               , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width.");
-
-               currentWidthInfoTextOffset -= GetTextWidthInfoLength(pCurrentTextWidthInfo);
-
-               while (textIndex < currentWidthInfoTextOffset)
-               {
-                       pCurrentTextWidthInfoNode = pCurrentTextWidthInfoNode->pPrev;
-
-                       SysTryReturn(NID_GRP
-                                       , pCurrentTextWidthInfoNode
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width.");
-
-                       pCurrentTextWidthInfo = static_cast < TextWidthCommonInfo* >(pCurrentTextWidthInfoNode->pObject);
-                       SysTryReturn(NID_GRP
-                                       , pCurrentTextWidthInfo
-                                       , null, E_SYSTEM, "[E_SYSTEM] Fail to get text width.");
-
-                       currentWidthInfoTextOffset -= GetTextWidthInfoLength(pCurrentTextWidthInfo);
-               }
-       }
-
-       widthInfoTextOffset = currentWidthInfoTextOffset;
-
-       return pCurrentTextWidthInfoNode;
-}
-
-bool
-TextWidthManager::IsKorean(wchar_t ch)
-{
-       bool r = false;
-
-       if (0xAC00 <= ch && ch <= 0xD7A3)
-       {
-               r = true;
-       }
-       else if (0x3130 <= ch && ch <= 0x318F)
-       {
-               r = true;
-       }
-       else if (0x1100 <= ch && ch <= 0x11FF)
-       {
-               r = true;
-       }
-       else if (0X2E80 <= ch && ch <= 0x2FFF)
-       {
-               r = true;
-       }
-       else if (0x3220 <= ch && ch <= 0x3243)
-       {
-               r = true;
-       }
-       else if (0x3280 <= ch && ch <= 0x32CB)
-       {
-               r = true;
-       }
-       else if (0x3400 <= ch && ch <= 0x4DBF)
-       {
-               r = true;
-       }
-       else if (0x4E00 <= ch && ch <= 0x9FFF)
-       {
-               r = true;
-       }
-       else if (0xF900 <= ch && ch <= 0xFAFF)
-       {
-               r = true;
-       }
-
-       return r;
-}
-
-}}} // Tizen::Graphics::_Text
diff --git a/src/graphics/text/FGrp_TextTextWidthManager.h b/src/graphics/text/FGrp_TextTextWidthManager.h
deleted file mode 100644 (file)
index e182a77..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// Open Service Platform
-// Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Apache License, Version 2.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0/
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-/*
- * @file       FGrp_TextTextWidthManager.h
- * @brief      This is the header file for the TextWidthManager class.
- *
- * This header file contains the declarations of the %TextWidthManager class.
- */
-
-#ifndef _FGRP_INTERNAL_TEXT_WIDTH_MANAGER_H_
-#define _FGRP_INTERNAL_TEXT_WIDTH_MANAGER_H_
-
-#include "FGrp_TextCommon.h"
-#include "FGrp_TextTextElement.h"
-#include "FGrp_TextTextSimpleList.h"
-
-namespace Tizen { namespace Graphics
-{
-
-namespace _Text
-{
-
-struct TextWidthCommonInfo;
-struct WordTextWidthInfo;
-
-struct TextLineComposeInfo
-{
-       int length;
-       float width;
-       float height;
-       int endType;
-};
-
-class TextWidthManager
-{
-public:
-       TextWidthManager(TextComposite* pCompositeText);
-
-       virtual ~TextWidthManager(void);
-
-public:
-       bool Initialize(int textLength);
-
-       bool Finalize(void);
-
-       bool StartCompose(int textIndex);
-
-       bool GetCurrentLineInfo(int lineWidth, TextLineComposeInfo& textLineComposeInfo);
-
-       bool GetCurrentLineInfo(float lineWidth, TextLineComposeInfo& textLineComposeInfo);
-
-       bool EndCompose(void);
-
-       bool InformTextInsert(int textIndex, int textLength);
-
-       bool InformTextRemove(int textIndex, int textLength);
-
-private:
-       SimpleNode* SplitWidthInfo(SimpleNode* pOrginalTextWidhtInfoNode, int splitStartIndex, TextWidthCommonInfo* pTextWidthInfo);
-
-       WordTextWidthInfo* SplitCurrentWordWidthInfo(int limitWidth, bool& isNextKoreanStart);
-
-       WordTextWidthInfo* SplitWordWidthInfo(SimpleNode* pCurrentWordWidthInfoNode, TextElement* pCurrentTextElement, int strCurrentRelIndex, int strCurrentLength, int limitWidth, bool& isNextKoreanStart);
-
-       bool Seek(int textLength);
-
-       bool AnalyzeCurrentUnKnownTextWidthInfo(int limitWidth);
-
-       SimpleNode* AnalyzeUnKnownTextWidthInfo(SimpleNode* pCurrentWordWidthInfoNode, TextElement* pCurrentTextElement, int strCurrentRelIndex, int strCurrentLength, int limitWidth);
-
-       bool AnalyzeNextTextWidthInfo(int limitWidth, bool& wordoverWidth, int& widthAnlyzed, int& strLengthAalyzed, int& heightAnalzyed, bool& isnextKorean, bool& meetCutlink);
-
-       bool UpdateCachedTextWidhtInfo(int widthInfoTextOffset, SimpleNode* pTextWidthInfoNode);
-
-       SimpleNode* SearchTextWidthInfo(int textIndex, int& widthInfoTextOffset);
-
-       bool IsKorean(wchar_t strChar);
-
-       int GetTextWidthInfoLength(TextWidthCommonInfo* pTextWidthCommonInfo);
-
-private:
-       TextComposite* __pCompositeText;
-       TextElement* __pCurrentComposeTextElement;
-       TextElementType __currentTextElementType;
-       int __currentComposeTextElementIndex;
-       SimpleNode* __pCurrentWordWidthInfoNode;
-       SimpleNode* __pCachedWordWidthInfoNode;
-       SimpleList* __pTextWidthInfoList;
-       bool __isInitialized;
-       bool __isComposing;
-       int __length;
-       int __currentTextIndex;
-       int __strCurrentRelIndex;
-       int __currentTextElementLength;
-       int __textOffsetOfCurrentWidthInfo;
-       int __textOffsetOfCachedWidthInfo;
-
-private:
-       TextWidthManager(const TextWidthManager& other); // NOT IMPLMENTED
-
-       TextWidthManager& operator =(const TextWidthManager& rhs); // NOT IMPLMENTED
-
-}; // TextWidthManager
-
-}}} // Tizen::Graphics::_Text
-
-#endif // _FGRP_INTERNAL_TEXT_WIDTH_MANAGER_H_
index 433cf82..2528c79 100644 (file)
@@ -10149,6 +10149,14 @@ _EditPresenter::AdjustRTLTextAlignment(const _EditTextType textType)
        case EDIT_TEXT_TYPE_INPUT:
                if (GetTextAlignment() != ALIGNMENT_LEFT)
                {
+                       if (_BidiUtils::IsRTL(GetText()) == true)
+                       {
+                               __pTextObject->SetTextBidiHint(TEXT_BIDI_HINT_RTL);
+                       }
+                       else
+                       {
+                               __pTextObject->SetTextBidiHint(TEXT_BIDI_HINT_LTR);
+                       }
                        return false;
                }
                if (_BidiUtils::IsRTL(GetText()) == true)
@@ -10164,6 +10172,7 @@ _EditPresenter::AdjustRTLTextAlignment(const _EditTextType textType)
                                        r = __pTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_RIGHT | TEXT_OBJECT_ALIGNMENT_TOP);
                                }
                                __horizontalAlignmentForBidi = ALIGNMENT_RIGHT;
+                               __pTextObject->SetTextBidiHint(TEXT_BIDI_HINT_RTL);
                                if (r == E_SUCCESS)
                                {
                                        return true;
@@ -10183,6 +10192,7 @@ _EditPresenter::AdjustRTLTextAlignment(const _EditTextType textType)
                                        r = __pTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_LEFT | TEXT_OBJECT_ALIGNMENT_TOP);
                                }
                                __horizontalAlignmentForBidi = ALIGNMENT_LEFT;
+                               __pTextObject->SetTextBidiHint(TEXT_BIDI_HINT_LTR);
                                if (r == E_SUCCESS)
                                {
                                        return true;
@@ -10205,6 +10215,7 @@ _EditPresenter::AdjustRTLTextAlignment(const _EditTextType textType)
                        {
                                r = __pGuideTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_RIGHT | TEXT_OBJECT_ALIGNMENT_TOP);
                        }
+                       __pGuideTextObject->SetTextBidiHint(TEXT_BIDI_HINT_RTL);
                        if (r == E_SUCCESS)
                        {
                                return true;
@@ -10220,6 +10231,7 @@ _EditPresenter::AdjustRTLTextAlignment(const _EditTextType textType)
                        {
                                r = __pGuideTextObject->SetAlignment(TEXT_OBJECT_ALIGNMENT_LEFT | TEXT_OBJECT_ALIGNMENT_TOP);
                        }
+                       __pGuideTextObject->SetTextBidiHint(TEXT_BIDI_HINT_LTR);
                        if (r == E_SUCCESS)
                        {
                                return true;