X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fmarkup-processor-helper-functions.cpp;h=3c02c275b0860953093b50bd1ef275eb2cff748d;hp=122335e0523cf63e891130e52948110011afeb96;hb=6f990775daf7adf6170db59f0b99e00ae25fceed;hpb=69669144df0027a66725f167fd1b99e12b8860ad diff --git a/dali-toolkit/internal/text/markup-processor-helper-functions.cpp b/dali-toolkit/internal/text/markup-processor-helper-functions.cpp index 122335e..3c02c27 100644 --- a/dali-toolkit/internal/text/markup-processor-helper-functions.cpp +++ b/dali-toolkit/internal/text/markup-processor-helper-functions.cpp @@ -18,6 +18,10 @@ // FILE HEADER #include +// EXTERNAL INCLUDES +#include +#include + namespace Dali { @@ -32,6 +36,20 @@ namespace const char WHITE_SPACE = 0x20; // ASCII value of the white space. const char LAST_UPPER_CASE = 0x5b; // ASCII value of the one after the last upper case character (Z). const char TO_LOWER_CASE = 32; // Value to add to a upper case character to transform it into a lower case. + +const char WEB_COLOR_TOKEN( '#' ); +const char* const HEX_COLOR_TOKEN( "0x" ); +const char* const ALPHA_ONE( "FF" ); + +const std::string BLACK_COLOR( "black" ); +const std::string WHITE_COLOR( "white" ); +const std::string RED_COLOR( "red" ); +const std::string GREEN_COLOR( "green" ); +const std::string BLUE_COLOR( "blue" ); +const std::string YELLOW_COLOR( "yellow" ); +const std::string MAGENTA_COLOR( "magenta" ); +const std::string CYAN_COLOR( "cyan" ); +const std::string TRANSPARENT_COLOR( "transparent" ); } bool TokenComparison( const std::string& string1, const char* const stringBuffer2, Length length ) @@ -63,6 +81,85 @@ void SkipWhiteSpace( const char*& markupStringBuffer, for( ; ( WHITE_SPACE >= *markupStringBuffer ) && ( markupStringBuffer < markupStringEndBuffer ); ++markupStringBuffer ); } +unsigned int StringToHex( const char* const uintStr ) +{ + return static_cast( strtoul( uintStr, NULL, 16 ) ); +} + +float StringToFloat( const char* const floatStr ) +{ + return static_cast( strtod( floatStr, NULL ) ); +} + +void UintColorToVector4( unsigned int color, Vector4& retColor ) +{ + retColor.a = static_cast( ( color & 0xFF000000 ) >> 24u ) / 255.f; + retColor.r = static_cast( ( color & 0x00FF0000 ) >> 16u ) / 255.f; + retColor.g = static_cast( ( color & 0x0000FF00 ) >> 8u ) / 255.f; + retColor.b = static_cast( color & 0x000000FF ) / 255.f; +} + +void ColorStringToVector4( const char* const colorStr, Length length, Vector4& retColor ) +{ + if( WEB_COLOR_TOKEN == *colorStr ) + { + std::string webColor( colorStr + 1u, length - 1u ); + if( 4u == length ) // 3 component web color #F00 (red) + { + webColor.insert( 2u, &( webColor[2] ), 1u ); + webColor.insert( 1u, &( webColor[1] ), 1u ); + webColor.insert( 0u, &( webColor[0] ), 1u ); + webColor.insert( 0u, ALPHA_ONE ); + } + else if( 7u == length ) // 6 component web color #FF0000 (red) + { + webColor.insert( 0u, ALPHA_ONE ); + } + + UintColorToVector4( StringToHex( webColor.c_str() ), retColor ); + } + else if( TokenComparison( HEX_COLOR_TOKEN, colorStr, 2u ) ) + { + UintColorToVector4( StringToHex( colorStr + 2u ), retColor ); + } + else if( TokenComparison( BLACK_COLOR, colorStr, length ) ) + { + retColor = Color::BLACK; + } + else if( TokenComparison( WHITE_COLOR, colorStr, length ) ) + { + retColor = Color::WHITE; + } + else if( TokenComparison( RED_COLOR, colorStr, length ) ) + { + retColor = Color::RED; + } + else if( TokenComparison( GREEN_COLOR, colorStr, length ) ) + { + retColor = Color::GREEN; + } + else if( TokenComparison( BLUE_COLOR, colorStr, length ) ) + { + retColor = Color::BLUE; + } + else if( TokenComparison( YELLOW_COLOR, colorStr, length ) ) + { + retColor = Color::YELLOW; + } + else if( TokenComparison( MAGENTA_COLOR, colorStr, length ) ) + { + retColor = Color::MAGENTA; + } + else if( TokenComparison( CYAN_COLOR, colorStr, length ) ) + { + retColor = Color::CYAN; + } + else if( TokenComparison( TRANSPARENT_COLOR, colorStr, length ) ) + { + retColor = Color::TRANSPARENT; + } +} + } // namespace Text } // namespace Toolkit