Kaydet (Commit) 80e9f9f8 authored tarafından Khaled Hosny's avatar Khaled Hosny Kaydeden (comit) Tomaž Vajngerl

Skip required features from the features dialog

Many OpenType features are required features that are applied to certain
context determined by the layout engine, or should always be on. There
is no value in presenting these features to the user and they just
clutter the dialog for fonts that usually have many of such features
(e.g. Arabic or Indic fonts).

Change-Id: Idc3d7d3a9eb1c4f693ea6fdf9f26f0264b910f91
Reviewed-on: https://gerrit.libreoffice.org/55951
Tested-by: Jenkins
Reviewed-by: 's avatarTomaž Vajngerl <quikee@gmail.com>
üst ba161dd0
......@@ -26,12 +26,14 @@ class VCL_DLLPUBLIC OpenTypeFeatureDefinitonListPrivate
private:
std::vector<FeatureDefinition> m_aFeatureDefinition;
std::unordered_map<sal_uInt32, size_t> m_aCodeToIndex;
std::vector<sal_uInt32> m_aRequiredFeatures;
void init();
public:
OpenTypeFeatureDefinitonListPrivate();
FeatureDefinition getDefinition(sal_uInt32 nFeatureCode);
bool isRequired(sal_uInt32 nFeatureCode);
};
class VCL_DLLPUBLIC OpenTypeFeatureDefinitonList
......
......@@ -59,12 +59,12 @@ void FontFeatureTest::testGetFontFeatures()
}
}
CPPUNIT_ASSERT_EQUAL(size_t(31), rDefaultFontFeatures.size());
CPPUNIT_ASSERT_EQUAL(size_t(27), rDefaultFontFeatures.size());
OUString aExpectedFeaturesString = "aalt c2sc case ccmp dlig fina frac hlig "
"liga lnum nalt onum pnum salt sinf smcp "
"ss01 ss02 ss03 ss04 ss05 ss06 sups tnum "
"zero cpsp kern lfbd mark mkmk rtbd ";
OUString aExpectedFeaturesString = "aalt c2sc case dlig frac hlig liga lnum "
"nalt onum pnum salt sinf smcp ss01 ss02 "
"ss03 ss04 ss05 ss06 sups tnum zero cpsp "
"kern lfbd rtbd ";
CPPUNIT_ASSERT_EQUAL(aExpectedFeaturesString, aFeaturesString);
// Check C2SC feature
......@@ -83,7 +83,7 @@ void FontFeatureTest::testGetFontFeatures()
// Check FRAC feature
{
vcl::font::Feature& rFeature = rDefaultFontFeatures[6];
vcl::font::Feature& rFeature = rDefaultFontFeatures[4];
CPPUNIT_ASSERT_EQUAL(vcl::font::featureCode("frac"), rFeature.m_aID.m_aFeatureCode);
vcl::font::FeatureDefinition& rFracFeatureDefinition = rFeature.m_aDefinition;
......
......@@ -92,6 +92,9 @@ void FeatureCollector::collectForLanguage(hb_tag_t aTableTag, sal_uInt32 nScript
for (hb_tag_t aFeatureTag : aFeatureTags)
{
if (OpenTypeFeatureDefinitonList::get().isRequired(aFeatureTag))
continue;
m_rFontFeatures.emplace_back();
vcl::font::Feature& rFeature = m_rFontFeatures.back();
rFeature.m_aID = { aFeatureTag, aScriptTag, aLanguageTag };
......
......@@ -22,27 +22,16 @@ void OpenTypeFeatureDefinitonListPrivate::init()
{
m_aFeatureDefinition.assign({
{ featureCode("aalt"), STR_FONT_FEATURE_ID_AALT },
{ featureCode("abvf"), STR_FONT_FEATURE_ID_ABVF },
{ featureCode("abvm"), STR_FONT_FEATURE_ID_ABVM },
{ featureCode("abvs"), STR_FONT_FEATURE_ID_ABVS },
{ featureCode("afrc"), STR_FONT_FEATURE_ID_AFRC },
{ featureCode("akhn"), STR_FONT_FEATURE_ID_AKHN },
{ featureCode("alig"), STR_FONT_FEATURE_ID_ALIG },
{ featureCode("blwf"), STR_FONT_FEATURE_ID_BLWF },
{ featureCode("blwm"), STR_FONT_FEATURE_ID_BLWM },
{ featureCode("blws"), STR_FONT_FEATURE_ID_BLWS },
{ featureCode("c2pc"), STR_FONT_FEATURE_ID_C2PC },
{ featureCode("c2sc"), STR_FONT_FEATURE_ID_C2SC },
{ featureCode("calt"), STR_FONT_FEATURE_ID_CALT },
{ featureCode("case"), STR_FONT_FEATURE_ID_CASE },
{ featureCode("ccmp"), STR_FONT_FEATURE_ID_CCMP },
{ featureCode("cfar"), STR_FONT_FEATURE_ID_CFAR },
{ featureCode("cjct"), STR_FONT_FEATURE_ID_CJCT },
{ featureCode("clig"), STR_FONT_FEATURE_ID_CLIG },
{ featureCode("cpct"), STR_FONT_FEATURE_ID_CPCT },
{ featureCode("cpsp"), STR_FONT_FEATURE_ID_CPSP },
{ featureCode("cswh"), STR_FONT_FEATURE_ID_CSWH },
{ featureCode("curs"), STR_FONT_FEATURE_ID_CURS },
{ featureCode("cv01"), STR_FONT_FEATURE_ID_CV01 },
{ featureCode("cv02"), STR_FONT_FEATURE_ID_CV02 },
{ featureCode("cv03"), STR_FONT_FEATURE_ID_CV03 },
......@@ -53,23 +42,15 @@ void OpenTypeFeatureDefinitonListPrivate::init()
{ featureCode("cv08"), STR_FONT_FEATURE_ID_CV08 },
{ featureCode("cv09"), STR_FONT_FEATURE_ID_CV09 },
{ featureCode("dcap"), STR_FONT_FEATURE_ID_DCAP },
{ featureCode("dist"), STR_FONT_FEATURE_ID_DIST },
{ featureCode("dlig"), STR_FONT_FEATURE_ID_DLIG },
{ featureCode("dnom"), STR_FONT_FEATURE_ID_DNOM },
{ featureCode("dpng"), STR_FONT_FEATURE_ID_DPNG },
{ featureCode("dtls"), STR_FONT_FEATURE_ID_DTLS },
{ featureCode("expt"), STR_FONT_FEATURE_ID_EXPT },
{ featureCode("falt"), STR_FONT_FEATURE_ID_FALT },
{ featureCode("fin2"), STR_FONT_FEATURE_ID_FIN2 },
{ featureCode("fin3"), STR_FONT_FEATURE_ID_FIN3 },
{ featureCode("fina"), STR_FONT_FEATURE_ID_FINA },
{ featureCode("flac"), STR_FONT_FEATURE_ID_FLAC },
{ featureCode("frac"), STR_FONT_FEATURE_ID_FRAC,
std::vector<FeatureParameter>{ { 1, STR_FONT_FEATURE_ID_FRAC_PARAM_1 },
{ 2, STR_FONT_FEATURE_ID_FRAC_PARAM_2 } } },
{ featureCode("fwid"), STR_FONT_FEATURE_ID_FWID },
{ featureCode("half"), STR_FONT_FEATURE_ID_HALF },
{ featureCode("haln"), STR_FONT_FEATURE_ID_HALN },
{ featureCode("halt"), STR_FONT_FEATURE_ID_HALT },
{ featureCode("hist"), STR_FONT_FEATURE_ID_HIST },
{ featureCode("hkna"), STR_FONT_FEATURE_ID_HKNA },
......@@ -77,8 +58,6 @@ void OpenTypeFeatureDefinitonListPrivate::init()
{ featureCode("hngl"), STR_FONT_FEATURE_ID_HNGL },
{ featureCode("hojo"), STR_FONT_FEATURE_ID_HOJO },
{ featureCode("hwid"), STR_FONT_FEATURE_ID_HWID },
{ featureCode("init"), STR_FONT_FEATURE_ID_INIT },
{ featureCode("isol"), STR_FONT_FEATURE_ID_ISOL },
{ featureCode("ital"), STR_FONT_FEATURE_ID_ITAL },
{ featureCode("jalt"), STR_FONT_FEATURE_ID_JALT },
{ featureCode("jp78"), STR_FONT_FEATURE_ID_JP78 },
......@@ -88,20 +67,10 @@ void OpenTypeFeatureDefinitonListPrivate::init()
{ featureCode("kern"), STR_FONT_FEATURE_ID_KERN },
{ featureCode("lfbd"), STR_FONT_FEATURE_ID_LFBD },
{ featureCode("liga"), STR_FONT_FEATURE_ID_LIGA },
{ featureCode("ljmo"), STR_FONT_FEATURE_ID_LJMO },
{ featureCode("lnum"), STR_FONT_FEATURE_ID_LNUM },
{ featureCode("locl"), STR_FONT_FEATURE_ID_LOCL },
{ featureCode("ltra"), STR_FONT_FEATURE_ID_LTRA },
{ featureCode("ltrm"), STR_FONT_FEATURE_ID_LTRM },
{ featureCode("mark"), STR_FONT_FEATURE_ID_MARK },
{ featureCode("med2"), STR_FONT_FEATURE_ID_MED2 },
{ featureCode("medi"), STR_FONT_FEATURE_ID_MEDI },
{ featureCode("mgrk"), STR_FONT_FEATURE_ID_MGRK },
{ featureCode("mkmk"), STR_FONT_FEATURE_ID_MKMK },
{ featureCode("mset"), STR_FONT_FEATURE_ID_MSET },
{ featureCode("nalt"), STR_FONT_FEATURE_ID_NALT },
{ featureCode("nlck"), STR_FONT_FEATURE_ID_NLCK },
{ featureCode("nukt"), STR_FONT_FEATURE_ID_NUKT },
{ featureCode("numr"), STR_FONT_FEATURE_ID_NUMR },
{ featureCode("onum"), STR_FONT_FEATURE_ID_ONUM },
{ featureCode("opbd"), STR_FONT_FEATURE_ID_OPBD },
......@@ -111,25 +80,12 @@ void OpenTypeFeatureDefinitonListPrivate::init()
{ featureCode("pcap"), STR_FONT_FEATURE_ID_PCAP },
{ featureCode("pkna"), STR_FONT_FEATURE_ID_PKNA },
{ featureCode("pnum"), STR_FONT_FEATURE_ID_PNUM },
{ featureCode("pref"), STR_FONT_FEATURE_ID_PREF },
{ featureCode("pres"), STR_FONT_FEATURE_ID_PRES },
{ featureCode("pstf"), STR_FONT_FEATURE_ID_PSTF },
{ featureCode("psts"), STR_FONT_FEATURE_ID_PSTS },
{ featureCode("pwid"), STR_FONT_FEATURE_ID_PWID },
{ featureCode("qwid"), STR_FONT_FEATURE_ID_QWID },
{ featureCode("rand"), STR_FONT_FEATURE_ID_RAND },
{ featureCode("rclt"), STR_FONT_FEATURE_ID_RCLT },
{ featureCode("rkrf"), STR_FONT_FEATURE_ID_RKRF },
{ featureCode("rlig"), STR_FONT_FEATURE_ID_RLIG },
{ featureCode("rphf"), STR_FONT_FEATURE_ID_RPHF },
{ featureCode("rtbd"), STR_FONT_FEATURE_ID_RTBD },
{ featureCode("rtla"), STR_FONT_FEATURE_ID_RTLA },
{ featureCode("rtlm"), STR_FONT_FEATURE_ID_RTLM },
{ featureCode("ruby"), STR_FONT_FEATURE_ID_RUBY },
{ featureCode("rvrn"), STR_FONT_FEATURE_ID_RVRN },
{ featureCode("salt"), STR_FONT_FEATURE_ID_SALT },
{ featureCode("sinf"), STR_FONT_FEATURE_ID_SINF },
{ featureCode("size"), STR_FONT_FEATURE_ID_SIZE },
{ featureCode("smcp"), STR_FONT_FEATURE_ID_SMCP },
{ featureCode("smpl"), STR_FONT_FEATURE_ID_SMPL },
{ featureCode("ss01"), STR_FONT_FEATURE_ID_SS01 },
......@@ -152,23 +108,17 @@ void OpenTypeFeatureDefinitonListPrivate::init()
{ featureCode("ss18"), STR_FONT_FEATURE_ID_SS18 },
{ featureCode("ss19"), STR_FONT_FEATURE_ID_SS19 },
{ featureCode("ss20"), STR_FONT_FEATURE_ID_SS20 },
{ featureCode("ssty"), STR_FONT_FEATURE_ID_SSTY },
{ featureCode("stch"), STR_FONT_FEATURE_ID_STCH },
{ featureCode("subs"), STR_FONT_FEATURE_ID_SUBS },
{ featureCode("sups"), STR_FONT_FEATURE_ID_SUPS },
{ featureCode("swsh"), STR_FONT_FEATURE_ID_SWSH },
{ featureCode("titl"), STR_FONT_FEATURE_ID_TITL },
{ featureCode("tjmo"), STR_FONT_FEATURE_ID_TJMO },
{ featureCode("tnam"), STR_FONT_FEATURE_ID_TNAM },
{ featureCode("tnum"), STR_FONT_FEATURE_ID_TNUM },
{ featureCode("trad"), STR_FONT_FEATURE_ID_TRAD },
{ featureCode("twid"), STR_FONT_FEATURE_ID_TWID },
{ featureCode("unic"), STR_FONT_FEATURE_ID_UNIC },
{ featureCode("valt"), STR_FONT_FEATURE_ID_VALT },
{ featureCode("vatu"), STR_FONT_FEATURE_ID_VATU },
{ featureCode("vert"), STR_FONT_FEATURE_ID_VERT },
{ featureCode("vhal"), STR_FONT_FEATURE_ID_VHAL },
{ featureCode("vjmo"), STR_FONT_FEATURE_ID_VJMO },
{ featureCode("vkna"), STR_FONT_FEATURE_ID_VKNA },
{ featureCode("vkrn"), STR_FONT_FEATURE_ID_VKRN },
{ featureCode("vpal"), STR_FONT_FEATURE_ID_VPAL },
......@@ -181,6 +131,22 @@ void OpenTypeFeatureDefinitonListPrivate::init()
{
m_aCodeToIndex.emplace(m_aFeatureDefinition[i].getCode(), i);
}
m_aRequiredFeatures.assign({
featureCode("abvf"), featureCode("abvm"), featureCode("abvs"), featureCode("akhn"),
featureCode("blwf"), featureCode("blwm"), featureCode("blws"), featureCode("ccmp"),
featureCode("cfar"), featureCode("cjct"), featureCode("curs"), featureCode("dist"),
featureCode("dtls"), featureCode("fin2"), featureCode("fin3"), featureCode("fina"),
featureCode("flac"), featureCode("half"), featureCode("haln"), featureCode("init"),
featureCode("isol"), featureCode("ljmo"), featureCode("locl"), featureCode("ltra"),
featureCode("ltrm"), featureCode("mark"), featureCode("med2"), featureCode("medi"),
featureCode("mkmk"), featureCode("mset"), featureCode("nukt"), featureCode("pref"),
featureCode("pres"), featureCode("pstf"), featureCode("psts"), featureCode("rand"),
featureCode("rclt"), featureCode("rkrf"), featureCode("rlig"), featureCode("rphf"),
featureCode("rtla"), featureCode("rtlm"), featureCode("rvrn"), featureCode("size"),
featureCode("ssty"), featureCode("stch"), featureCode("tjmo"), featureCode("vatu"),
featureCode("vert"), featureCode("vjmo"),
});
}
FeatureDefinition OpenTypeFeatureDefinitonListPrivate::getDefinition(sal_uInt32 nFeatureCode)
......@@ -193,6 +159,12 @@ FeatureDefinition OpenTypeFeatureDefinitonListPrivate::getDefinition(sal_uInt32
return FeatureDefinition();
}
bool OpenTypeFeatureDefinitonListPrivate::isRequired(sal_uInt32 nFeatureCode)
{
return std::find(m_aRequiredFeatures.begin(), m_aRequiredFeatures.end(), nFeatureCode)
!= m_aRequiredFeatures.end();
}
} // end font namespace
} // end vcl namespace
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment