diff options
-rw-r--r-- | include/vcl/font/Feature.hxx | 9 | ||||
-rw-r--r-- | vcl/inc/font/OpenTypeFeatureDefinitionList.hxx | 3 | ||||
-rw-r--r-- | vcl/source/font/OpenTypeFeatureDefinitionList.cxx | 43 |
3 files changed, 13 insertions, 42 deletions
diff --git a/include/vcl/font/Feature.hxx b/include/vcl/font/Feature.hxx index c5bd497532e8..0c3c159dbc11 100644 --- a/include/vcl/font/Feature.hxx +++ b/include/vcl/font/Feature.hxx @@ -11,6 +11,7 @@ #define INCLUDED_VCL_FONT_FEATURE_HXX #include <vcl/dllapi.h> +#include <rtl/character.hxx> #include <rtl/ustring.hxx> #include <unotools/resmgr.hxx> #include <vector> @@ -92,12 +93,16 @@ struct Feature bool isCharacterVariant() const { - return ((m_nCode >> 24) & 0xFF) == 'c' && ((m_nCode >> 16) & 0xFF) == 'v'; + return ((m_nCode >> 24) & 0xFF) == 'c' && ((m_nCode >> 16) & 0xFF) == 'v' + && rtl::isAsciiDigit((m_nCode >> 8) & 0xFF) + && rtl::isAsciiDigit((m_nCode >> 0) & 0xFF); } bool isStylisticSet() const { - return ((m_nCode >> 24) & 0xFF) == 's' && ((m_nCode >> 16) & 0xFF) == 's'; + return ((m_nCode >> 24) & 0xFF) == 's' && ((m_nCode >> 16) & 0xFF) == 's' + && rtl::isAsciiDigit((m_nCode >> 8) & 0xFF) + && rtl::isAsciiDigit((m_nCode >> 0) & 0xFF); } uint32_t m_nCode; diff --git a/vcl/inc/font/OpenTypeFeatureDefinitionList.hxx b/vcl/inc/font/OpenTypeFeatureDefinitionList.hxx index c8fb6f7a449d..1ae634deabe8 100644 --- a/vcl/inc/font/OpenTypeFeatureDefinitionList.hxx +++ b/vcl/inc/font/OpenTypeFeatureDefinitionList.hxx @@ -25,9 +25,6 @@ private: void init(); - static bool isSpecialFeature(vcl::font::Feature& rFeature); - static FeatureDefinition handleSpecialFeature(vcl::font::Feature& rFeature); - public: OpenTypeFeatureDefinitionListPrivate(); FeatureDefinition getDefinition(vcl::font::Feature& rFeature); diff --git a/vcl/source/font/OpenTypeFeatureDefinitionList.cxx b/vcl/source/font/OpenTypeFeatureDefinitionList.cxx index 4cc370cec3c7..0400833937af 100644 --- a/vcl/source/font/OpenTypeFeatureDefinitionList.cxx +++ b/vcl/source/font/OpenTypeFeatureDefinitionList.cxx @@ -125,49 +125,18 @@ void OpenTypeFeatureDefinitionListPrivate::init() }); } -namespace -{ -OUString getNumericLowerPart(vcl::font::Feature& rFeature) -{ - auto nFeatureCode = rFeature.m_nCode; - char cChar1((sal_uInt32(nFeatureCode) >> 8) & 0xFF); - char cChar2((sal_uInt32(nFeatureCode) >> 0) & 0xFF); - - if (rtl::isAsciiDigit(static_cast<unsigned char>(cChar1)) - && rtl::isAsciiDigit(static_cast<unsigned char>(cChar2))) - { - return OUStringChar(cChar1) + OUStringChar(cChar2); - } - return OUString(); -} - -} // end anonymous namespace - -bool OpenTypeFeatureDefinitionListPrivate::isSpecialFeature(vcl::font::Feature& rFeature) -{ - return rFeature.isCharacterVariant() || rFeature.isStylisticSet(); -} - -FeatureDefinition -OpenTypeFeatureDefinitionListPrivate::handleSpecialFeature(vcl::font::Feature& rFeature) +FeatureDefinition OpenTypeFeatureDefinitionListPrivate::getDefinition(vcl::font::Feature& rFeature) { - FeatureDefinition aFeatureDefinition; - OUString sNumericPart = getNumericLowerPart(rFeature); - if (!sNumericPart.isEmpty()) + if (rFeature.isCharacterVariant() || rFeature.isStylisticSet()) { + FeatureDefinition aFeatureDefinition; + OUString sNumericPart = OUStringChar(char((rFeature.m_nCode >> 8) & 0xFF)) + + OUStringChar(char((rFeature.m_nCode >> 0) & 0xFF)); if (rFeature.isCharacterVariant()) aFeatureDefinition = { rFeature.m_nCode, STR_FONT_FEATURE_ID_CVXX, sNumericPart }; else if (rFeature.isStylisticSet()) aFeatureDefinition = { rFeature.m_nCode, STR_FONT_FEATURE_ID_SSXX, sNumericPart }; - } - return aFeatureDefinition; -} - -FeatureDefinition OpenTypeFeatureDefinitionListPrivate::getDefinition(vcl::font::Feature& rFeature) -{ - if (isSpecialFeature(rFeature)) - { - return handleSpecialFeature(rFeature); + return aFeatureDefinition; } auto nFeatureCode = rFeature.m_nCode; |