X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fmarkup-processor-font.cpp;h=802f9e9f26f7790ba44f9dc070d0b8f06d2c662f;hb=d783bae0658096314bd94361be75d5999797735e;hp=4ddcd6106eab610ac1e98fb6b828de0922819b93;hpb=2ca1c3856ce848a94f54444f1014a820e91ee207;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/markup-processor-font.cpp b/dali-toolkit/internal/text/markup-processor-font.cpp index 4ddcd61..802f9e9 100644 --- a/dali-toolkit/internal/text/markup-processor-font.cpp +++ b/dali-toolkit/internal/text/markup-processor-font.cpp @@ -24,7 +24,9 @@ // INTERNAL INCLUDES #include +#include #include +#include #include namespace Dali @@ -35,15 +37,52 @@ namespace Text { namespace { -const std::string XHTML_FAMILY_ATTRIBUTE("family"); -const std::string XHTML_SIZE_ATTRIBUTE("size"); -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(ProcessFloatAttribute(attribute) * PIXEL_FORMAT_64_FACTOR); + fontRun.sizeDefined = true; +} + +void ProcessFontWeight(const Attribute& attribute, FontDescriptionRun& fontRun) +{ + fontRun.weightDefined = ProcessEnumerationAttribute(attribute, MAX_FONT_ATTRIBUTE_SIZE, &StringToWeight, fontRun.weight); +} + +void ProcessFontWidth(const Attribute& attribute, FontDescriptionRun& fontRun) +{ + fontRun.widthDefined = ProcessEnumerationAttribute(attribute, MAX_FONT_ATTRIBUTE_SIZE, &StringToWidth, fontRun.width); +} + +void ProcessFontSlant(const Attribute& attribute, FontDescriptionRun& fontRun) +{ + fontRun.slantDefined = ProcessEnumerationAttribute(attribute, MAX_FONT_ATTRIBUTE_SIZE, &StringToSlant, fontRun.slant); +} + void ProcessFontTag(const Tag& tag, FontDescriptionRun& fontRun) { for(Vector::ConstIterator it = tag.attributes.Begin(), @@ -52,52 +91,26 @@ void ProcessFontTag(const Tag& tag, FontDescriptionRun& fontRun) ++it) { const Attribute& attribute(*it); - if(TokenComparison(XHTML_FAMILY_ATTRIBUTE, attribute.nameBuffer, attribute.nameLength)) + + if(TokenComparison(MARKUP::FONT_ATTRIBUTES::FAMILY, 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(MARKUP::FONT_ATTRIBUTES::SIZE, 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(MARKUP::FONT_ATTRIBUTES::WEIGHT, 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(MARKUP::FONT_ATTRIBUTES::WIDTH, 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(MARKUP::FONT_ATTRIBUTES::SLANT, 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); } } }