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-font.cpp;h=df8b6ec9cc601b22e14a75d634077210ba9ec9d6;hp=b7453173a847d29b1232693921ed952173b80e71;hb=00758f1301dd0bfbf6dc87659a6db9d0ba2c6816;hpb=4d763eb68b5aa2448dfc81d90fc5ce598c68c99f diff --git a/dali-toolkit/internal/text/markup-processor-font.cpp b/dali-toolkit/internal/text/markup-processor-font.cpp index b745317..df8b6ec 100644 --- a/dali-toolkit/internal/text/markup-processor-font.cpp +++ b/dali-toolkit/internal/text/markup-processor-font.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -29,13 +29,10 @@ namespace Dali { - namespace Toolkit { - namespace Text { - namespace { const std::string XHTML_FAMILY_ATTRIBUTE("family"); @@ -44,63 +41,92 @@ const std::string XHTML_WEIGHT_ATTRIBUTE("weight"); const std::string XHTML_WIDTH_ATTRIBUTE("width"); const std::string XHTML_SLANT_ATTRIBUTE("slant"); -const unsigned int MAX_FONT_ATTRIBUTE_SIZE = 15u; ///< The maximum length of any of the possible 'weight', 'width' or 'slant' values. +const std::string FONT_PREFIX("font-"); +const unsigned int FONT_PREFIX_LENGTH = 5u; +const unsigned int MIN_FONT_ATTRIBUTE_SIZE = 4u; ///< The minimum length of any of the possible 'weight', 'width' , 'slant' or 'size' values. +const unsigned int MAX_FONT_ATTRIBUTE_SIZE = 15u; ///< The maximum length of any of the possible 'weight', 'width' or 'slant' values. +const float PIXEL_FORMAT_64_FACTOR = 64.f; ///< 64.f is used to convert from point size to 26.6 pixel format. +} // namespace + +void processFontAttributeValue(char value[], const Attribute& attribute) +{ + // The StringToWeight() uses the Scripting::GetEnumeration() function which requires the input string to end with a '\0' char. + const Length length = attribute.valueLength > MAX_FONT_ATTRIBUTE_SIZE ? MAX_FONT_ATTRIBUTE_SIZE : attribute.valueLength; + memcpy(value, attribute.valueBuffer, length); + value[length] = 0; +} + +void ProcessFontFamily(const Attribute& attribute, FontDescriptionRun& fontRun) +{ + fontRun.familyDefined = true; + fontRun.familyLength = attribute.valueLength; + fontRun.familyName = new char[fontRun.familyLength]; + memcpy(fontRun.familyName, attribute.valueBuffer, fontRun.familyLength); + // The memory is freed when the font run is removed from the logical model. +} + +void ProcessFontSize(const Attribute& attribute, FontDescriptionRun& fontRun) +{ + // 64.f is used to convert from point size to 26.6 pixel format. + fontRun.size = static_cast(StringToFloat(attribute.valueBuffer) * PIXEL_FORMAT_64_FACTOR); + fontRun.sizeDefined = true; +} + +void ProcessFontWeight(const Attribute& attribute, FontDescriptionRun& fontRun) +{ + char value[MAX_FONT_ATTRIBUTE_SIZE + 1u]; + processFontAttributeValue(value, attribute); + + fontRun.weight = StringToWeight(value); + fontRun.weightDefined = true; +} + +void ProcessFontWidth(const Attribute& attribute, FontDescriptionRun& fontRun) +{ + char value[MAX_FONT_ATTRIBUTE_SIZE + 1u]; + processFontAttributeValue(value, attribute); + + fontRun.width = StringToWidth(value); + fontRun.widthDefined = true; +} + +void ProcessFontSlant(const Attribute& attribute, FontDescriptionRun& fontRun) +{ + char value[MAX_FONT_ATTRIBUTE_SIZE + 1u]; + processFontAttributeValue(value, attribute); + + fontRun.slant = StringToSlant(value); + fontRun.slantDefined = true; } -void ProcessFontTag( const Tag& tag, FontDescriptionRun& fontRun ) +void ProcessFontTag(const Tag& tag, FontDescriptionRun& fontRun) { - for( Vector::ConstIterator it = tag.attributes.Begin(), - endIt = tag.attributes.End(); - it != endIt; - ++it ) + for(Vector::ConstIterator it = tag.attributes.Begin(), + endIt = tag.attributes.End(); + it != endIt; + ++it) { - const Attribute& attribute( *it ); - if( TokenComparison( XHTML_FAMILY_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength ) ) + const Attribute& attribute(*it); + + if(TokenComparison(XHTML_FAMILY_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength)) { - fontRun.familyDefined = true; - fontRun.familyLength = attribute.valueLength; - fontRun.familyName = new char[fontRun.familyLength]; - memcpy( fontRun.familyName, attribute.valueBuffer, fontRun.familyLength ); - // The memory is freed when the font run is removed from the logical model. + ProcessFontFamily(attribute, fontRun); } - else if( TokenComparison( XHTML_SIZE_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength ) ) + else if(TokenComparison(XHTML_SIZE_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength)) { - // 64.f is used to convert from point size to 26.6 pixel format. - fontRun.size = static_cast( StringToFloat( attribute.valueBuffer ) * 64.f ); - fontRun.sizeDefined = true; + ProcessFontSize(attribute, fontRun); } - else if( TokenComparison( XHTML_WEIGHT_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength ) ) + else if(TokenComparison(XHTML_WEIGHT_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength)) { - // The StringToWeight() uses the Scripting::GetEnumeration() function which requires the input string to end with a '\0' char. - char value[MAX_FONT_ATTRIBUTE_SIZE+1u]; - const Length length = attribute.valueLength > MAX_FONT_ATTRIBUTE_SIZE ? MAX_FONT_ATTRIBUTE_SIZE : attribute.valueLength; - memcpy( value, attribute.valueBuffer, length ); - value[length] = 0; - - fontRun.weight = StringToWeight( value ); - fontRun.weightDefined = true; + ProcessFontWeight(attribute, fontRun); } - else if( TokenComparison( XHTML_WIDTH_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength ) ) + else if(TokenComparison(XHTML_WIDTH_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength)) { - // The StringToWidth() uses the Scripting::GetEnumeration() function which requires the input string to end with a '\0' char. - char value[MAX_FONT_ATTRIBUTE_SIZE+1u]; - const Length length = attribute.valueLength > MAX_FONT_ATTRIBUTE_SIZE ? MAX_FONT_ATTRIBUTE_SIZE : attribute.valueLength; - memcpy( value, attribute.valueBuffer, length ); - value[length] = 0; - - fontRun.width = StringToWidth( value ); - fontRun.widthDefined = true; + ProcessFontWidth(attribute, fontRun); } - else if( TokenComparison( XHTML_SLANT_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength ) ) + else if(TokenComparison(XHTML_SLANT_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength)) { - // The StringToSlant() uses the Scripting::GetEnumeration() function which requires the input string to end with a '\0' char. - char value[MAX_FONT_ATTRIBUTE_SIZE+1u]; - const Length length = attribute.valueLength > MAX_FONT_ATTRIBUTE_SIZE ? MAX_FONT_ATTRIBUTE_SIZE : attribute.valueLength; - memcpy( value, attribute.valueBuffer, length ); - value[length] = 0; - - fontRun.slant = StringToSlant( value ); - fontRun.slantDefined = true; + ProcessFontSlant(attribute, fontRun); } } }