X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fmarkup-processor.cpp;h=a8a6ecccba0b95718600e7df5206d7540ee87ee5;hb=3feac03362a8bb2d90a8b3e5defe9d2d704d2d3c;hp=20a58256baf19f517e3d01c10af9de30d7ed84b5;hpb=c052b6678e2c6d8a65545dbbe4531ea7057c1999;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/markup-processor.cpp b/dali-toolkit/internal/text/markup-processor.cpp index 20a5825..a8a6ecc 100644 --- a/dali-toolkit/internal/text/markup-processor.cpp +++ b/dali-toolkit/internal/text/markup-processor.cpp @@ -25,6 +25,7 @@ // INTERNAL INCLUDES #include +#include #include #include #include @@ -51,6 +52,7 @@ const std::string XHTML_SHADOW_TAG("shadow"); const std::string XHTML_GLOW_TAG("glow"); const std::string XHTML_OUTLINE_TAG("outline"); const std::string XHTML_ITEM_TAG("item"); +const std::string XHTML_ANCHOR_TAG("a"); const char LESS_THAN = '<'; const char GREATER_THAN = '>'; @@ -580,6 +582,38 @@ void ProcessItemTag( } /** + * @brief Processes the anchor tag + * + * @param[in/out] markupProcessData The markup process data + * @param[in] tag The current tag + * @param[in/out] characterIndex The current character index + */ +void ProcessAnchorTag( + MarkupProcessData& markupProcessData, + const Tag tag, + CharacterIndex& characterIndex) +{ + if(!tag.isEndTag) + { + // Create an anchor instance. + Anchor anchor; + anchor.startIndex = characterIndex; + anchor.endIndex = 0u; + ProcessAnchor(tag, anchor); + markupProcessData.anchors.PushBack(anchor); + } + else + { + // Update end index. + unsigned int count = markupProcessData.anchors.Count(); + if(count > 0) + { + markupProcessData.anchors[count - 1].endIndex = characterIndex; + } + } +} + +/** * @brief Resizes the model's vectors * * @param[in/out] markupProcessData The markup process data @@ -763,6 +797,18 @@ void ProcessMarkupString(const std::string& markupString, MarkupProcessData& mar ProcessTagForRun( markupProcessData.fontRuns, styleStack, tag, characterIndex, fontRunIndex, fontTagReference, [](const Tag& tag, FontDescriptionRun& fontRun) { ProcessFontTag(tag, fontRun); }); } // + else if(TokenComparison(XHTML_ANCHOR_TAG, tag.buffer, tag.length)) + { + /* Anchor */ + ProcessAnchorTag(markupProcessData, tag, characterIndex); + /* Color */ + ProcessTagForRun( + markupProcessData.colorRuns, styleStack, tag, characterIndex, colorRunIndex, colorTagReference, [](const Tag& tag, ColorRun& run) { + run.color = Color::BLUE; + ProcessColorTag(tag, run); + }); + /* TODO - underline */ + } // tizen else if(TokenComparison(XHTML_SHADOW_TAG, tag.buffer, tag.length)) { // TODO: If !tag.isEndTag, then create a new shadow run.