diff options
author | Khaled Hosny <khaled@aliftype.com> | 2022-12-03 16:29:46 +0200 |
---|---|---|
committer | خالد حسني <khaled@aliftype.com> | 2022-12-04 08:21:38 +0000 |
commit | fcba85d2ebb54692e0730610026b9b51feb67716 (patch) | |
tree | ba12c032b2d1cdad8ad836ad475be4d44b3e5daf /vcl | |
parent | b6e338fe746028f82c973987eaf04280715110e4 (diff) |
Check for trailing numeric part in isCharacterVariant/isStylisticSet
We want to mach features like “ss01” but not, say, “ssty”.
Change-Id: Idc4fdf78c577afe66cf76d7f722dc2009863654e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143614
Tested-by: خالد حسني <khaled@aliftype.com>
Reviewed-by: خالد حسني <khaled@aliftype.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/font/OpenTypeFeatureDefinitionList.hxx | 3 | ||||
-rw-r--r-- | vcl/source/font/OpenTypeFeatureDefinitionList.cxx | 43 |
2 files changed, 6 insertions, 40 deletions
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; |