[Libreoffice-commits] core.git: 2 commits - cui/source sw/qa vcl/inc vcl/qa vcl/source
Tomaž Vajngerl
tomaz.vajngerl at collabora.co.uk
Wed Jul 11 06:26:56 UTC 2018
cui/source/dialogs/FontFeaturesDialog.cxx | 2
sw/qa/extras/inc/swmodeltestbase.hxx | 1
sw/qa/extras/uiwriter/data/testFontEmbedding.odt |binary
sw/qa/extras/uiwriter/uiwriter.cxx | 139 +++++++++++++++++++++++
vcl/inc/font/FeatureCollector.hxx | 6
vcl/qa/cppunit/FontFeatureTest.cxx | 11 +
vcl/source/font/FeatureCollector.cxx | 38 ++----
vcl/source/outdev/font.cxx | 5
8 files changed, 175 insertions(+), 27 deletions(-)
New commits:
commit 39e5b2c174c6a27b5c3e2a08b00dd4c26677e07f
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date: Mon Jul 9 01:02:22 2018 +0200
tdf#65353 test for font embedding in ODF documents
Change-Id: I97fdb9ffb506a005dac08f7c78a3fa4383098b0b
Reviewed-on: https://gerrit.libreoffice.org/57169
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/sw/qa/extras/inc/swmodeltestbase.hxx b/sw/qa/extras/inc/swmodeltestbase.hxx
index e0d304beabc8..19090189510c 100644
--- a/sw/qa/extras/inc/swmodeltestbase.hxx
+++ b/sw/qa/extras/inc/swmodeltestbase.hxx
@@ -937,6 +937,7 @@ protected:
xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("table"), BAD_CAST("urn:oasis:names:tc:opendocument:xmlns:table:1.0"));
xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("draw"), BAD_CAST("urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"));
xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("fo"), BAD_CAST("urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"));
+ xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("config"), BAD_CAST("urn:oasis:names:tc:opendocument:xmlns:config:1.0"));
xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("xlink"), BAD_CAST("http://www.w3.org/1999/xlink"));
xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("dc"), BAD_CAST("http://purl.org/dc/elements/1.1/"));
xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("meta"), BAD_CAST("urn:oasis:names:tc:opendocument:xmlns:meta:1.0"));
diff --git a/sw/qa/extras/uiwriter/data/testFontEmbedding.odt b/sw/qa/extras/uiwriter/data/testFontEmbedding.odt
new file mode 100644
index 000000000000..17471af39b9f
Binary files /dev/null and b/sw/qa/extras/uiwriter/data/testFontEmbedding.odt differ
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index b51fa7483bd8..b80820a29115 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -323,6 +323,7 @@ public:
void testTdf113287();
void testTdf113445();
void testTdf113686();
+ void testFontEmbedding();
#endif
void testLinesInSectionInTable();
void testParagraphOfTextRange();
@@ -520,6 +521,7 @@ public:
CPPUNIT_TEST(testTdf113287);
CPPUNIT_TEST(testTdf113445);
CPPUNIT_TEST(testTdf113686);
+ CPPUNIT_TEST(testFontEmbedding);
#endif
CPPUNIT_TEST(testLinesInSectionInTable);
CPPUNIT_TEST(testParagraphOfTextRange);
@@ -6333,6 +6335,143 @@ void SwUiWriterTest::testTdf51223()
CPPUNIT_ASSERT_EQUAL(OUString("i"), static_cast<SwTextNode*>(pDoc->GetNodes()[nIndex])->GetText());
}
+
+void SwUiWriterTest::testFontEmbedding()
+{
+#if HAVE_MORE_FONTS && !defined(MACOSX)
+ createDoc("testFontEmbedding.odt");
+
+ OString aContentBaseXpath("/office:document-content/office:font-face-decls");
+ OString aSettingsBaseXpath("/office:document-settings/office:settings/config:config-item-set");
+
+ xmlDocPtr pXmlDoc = nullptr;
+ uno::Sequence<beans::PropertyValue> aDescriptor;
+ utl::TempFile aTempFile;
+ aTempFile.EnableKillingFile();
+
+ // Get document settings
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY_THROW);
+ uno::Reference<beans::XPropertySet> xProps(xFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY_THROW);
+
+ // Check font embedding state
+ CPPUNIT_ASSERT_EQUAL(false, xProps->getPropertyValue("EmbedFonts").get<bool>());
+ CPPUNIT_ASSERT_EQUAL(false, xProps->getPropertyValue("EmbedOnlyUsedFonts").get<bool>());
+ // Font scripts should be enabled by default, however this has no effect unless "EmbedOnlyUsedFonts" is enabled
+ CPPUNIT_ASSERT_EQUAL(true, xProps->getPropertyValue("EmbedLatinScriptFonts").get<bool>());
+ CPPUNIT_ASSERT_EQUAL(true, xProps->getPropertyValue("EmbedAsianScriptFonts").get<bool>());
+ CPPUNIT_ASSERT_EQUAL(true, xProps->getPropertyValue("EmbedComplexScriptFonts").get<bool>());
+
+ // CASE 1 - no font embedding enabled
+
+ // Save the document
+ uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+ xStorable->storeToURL(aTempFile.GetURL(), aDescriptor);
+ CPPUNIT_ASSERT(aTempFile.IsValid());
+
+ // Check setting - No font enbedding should be enabled
+ pXmlDoc = parseExportInternal(aTempFile.GetURL(),"settings.xml");
+ CPPUNIT_ASSERT(pXmlDoc);
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedFonts']", "false");
+
+ // Check content - No font-face-src nodes should be present
+ pXmlDoc = parseExportInternal(aTempFile.GetURL(),"content.xml");
+ CPPUNIT_ASSERT(pXmlDoc);
+
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face", 6);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans']/svg:font-face-src", 0);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans1']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans1']/svg:font-face-src", 0);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif']/svg:font-face-src", 0);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif1']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif1']/svg:font-face-src", 0);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Carlito']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Carlito']/svg:font-face-src", 0);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Caladea']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Caladea']/svg:font-face-src", 0);
+
+ // CASE 2 - font embedding enabled, but embed used fonts disabled
+
+ // Enable font embedding, diable embedding used font only
+ xProps->setPropertyValue("EmbedFonts", uno::makeAny(true));
+ xProps->setPropertyValue("EmbedOnlyUsedFonts", uno::makeAny(false));
+
+ // Save the document again
+ xStorable->storeToURL(aTempFile.GetURL(), aDescriptor);
+ CPPUNIT_ASSERT(aTempFile.IsValid());
+
+ // Check setting - font embedding should be enabled + embed only used fonts and scripts
+ pXmlDoc = parseExportInternal(aTempFile.GetURL(),"settings.xml");
+ CPPUNIT_ASSERT(pXmlDoc);
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedFonts']", "true");
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedOnlyUsedFonts']", "false");
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedLatinScriptFonts']", "true");
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedAsianScriptFonts']", "true");
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedComplexScriptFonts']", "true");
+
+ // Check content - font-face-src should be present only for "Liberation Sans" fonts
+
+ pXmlDoc = parseExportInternal(aTempFile.GetURL(),"content.xml");
+ CPPUNIT_ASSERT(pXmlDoc);
+
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face", 6);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans']/svg:font-face-src", 1);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans1']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans1']/svg:font-face-src", 1);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif']/svg:font-face-src", 1);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif1']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif1']/svg:font-face-src", 1);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Carlito']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Carlito']/svg:font-face-src", 1);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Caladea']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Caladea']/svg:font-face-src", 1);
+
+ // CASE 3 - font embedding enabled, embed only used fonts enabled
+
+ // Enable font embedding and setting to embed used fonts only
+ xProps->setPropertyValue("EmbedFonts", uno::makeAny(true));
+ xProps->setPropertyValue("EmbedOnlyUsedFonts", uno::makeAny(true));
+ xProps->setPropertyValue("EmbedLatinScriptFonts", uno::makeAny(true));
+ xProps->setPropertyValue("EmbedAsianScriptFonts", uno::makeAny(true));
+ xProps->setPropertyValue("EmbedComplexScriptFonts", uno::makeAny(true));
+
+ // Save the document again
+ xStorable->storeToURL(aTempFile.GetURL(), aDescriptor);
+ CPPUNIT_ASSERT(aTempFile.IsValid());
+
+ // Check setting - font embedding should be enabled + embed only used fonts and scripts
+ pXmlDoc = parseExportInternal(aTempFile.GetURL(),"settings.xml");
+ CPPUNIT_ASSERT(pXmlDoc);
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedFonts']", "true");
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedOnlyUsedFonts']", "true");
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedLatinScriptFonts']", "true");
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedAsianScriptFonts']", "true");
+ assertXPathContent(pXmlDoc, aSettingsBaseXpath + "/config:config-item[@config:name='EmbedComplexScriptFonts']", "true");
+
+ // Check content - font-face-src should be present only for "Liberation Sans" fonts
+
+ pXmlDoc = parseExportInternal(aTempFile.GetURL(),"content.xml");
+ CPPUNIT_ASSERT(pXmlDoc);
+
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face", 6);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans']/svg:font-face-src", 0);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans1']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Sans1']/svg:font-face-src", 0);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif']/svg:font-face-src", 1);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif1']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Liberation Serif1']/svg:font-face-src", 1);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Carlito']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Carlito']/svg:font-face-src", 1);
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Caladea']");
+ assertXPath(pXmlDoc, aContentBaseXpath + "/style:font-face[@style:name='Caladea']/svg:font-face-src", 0);
+#endif
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest);
CPPUNIT_PLUGIN_IMPLEMENT();
commit 28493a04f0fa63a76c096c62a3141d86edbac964
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date: Tue Jul 10 23:47:36 2018 +0200
font feat: prioritize Graphite descriptions, use UI lang., fixes
When collecting font feature description do prioritize Graphite
collected descriptions over OT. This is important for descriptions
for ssxx and cvxx only contain general description and not what
exactly they do.
When collecting for Graphite use the UI language for descriptions.
Fix gathering the descriptions with graphite to include all of
the descriptions available.
Change-Id: I6b3b92eb160fc3fd70214edf0d37095865f9c563
Reviewed-on: https://gerrit.libreoffice.org/57250
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/cui/source/dialogs/FontFeaturesDialog.cxx b/cui/source/dialogs/FontFeaturesDialog.cxx
index 6f9543c13109..676f216e25ec 100644
--- a/cui/source/dialogs/FontFeaturesDialog.cxx
+++ b/cui/source/dialogs/FontFeaturesDialog.cxx
@@ -11,7 +11,6 @@
#include <FontFeaturesDialog.hxx>
#include <vcl/font/FeatureParser.hxx>
-#include <svx/strings.hrc>
#include <svx/dialmgr.hxx>
using namespace css;
@@ -34,7 +33,6 @@ VclPtr<ComboBox> makeEnumComboBox(vcl::Window* pParent,
{
VclPtr<ComboBox> aNameBox(
VclPtr<ComboBox>::Create(pParent, WB_TABSTOP | WB_DROPDOWN | WB_AUTOHSCROLL));
- aNameBox->InsertEntry(SvxResId(RID_SVXSTR_NONE));
for (vcl::font::FeatureParameter const& rParameter : rFeatureDefinition.getEnumParameters())
{
aNameBox->InsertEntry(rParameter.getDescription());
diff --git a/vcl/inc/font/FeatureCollector.hxx b/vcl/inc/font/FeatureCollector.hxx
index 4e918c48e334..6c278ca15188 100644
--- a/vcl/inc/font/FeatureCollector.hxx
+++ b/vcl/inc/font/FeatureCollector.hxx
@@ -14,6 +14,7 @@
#include <vcl/font/Feature.hxx>
#include <o3tl/make_unique.hxx>
#include <hb.h>
+#include <i18nlangtag/lang.h>
namespace vcl
{
@@ -24,11 +25,14 @@ class FeatureCollector
private:
hb_face_t* m_pHbFace;
std::vector<vcl::font::Feature>& m_rFontFeatures;
+ LanguageType m_eLanguageType;
public:
- FeatureCollector(hb_face_t* pHbFace, std::vector<vcl::font::Feature>& rFontFeatures)
+ FeatureCollector(hb_face_t* pHbFace, std::vector<vcl::font::Feature>& rFontFeatures,
+ LanguageType eLanguageType)
: m_pHbFace(pHbFace)
, m_rFontFeatures(rFontFeatures)
+ , m_eLanguageType(eLanguageType)
{
}
diff --git a/vcl/qa/cppunit/FontFeatureTest.cxx b/vcl/qa/cppunit/FontFeatureTest.cxx
index 879411ac5d1c..6944c7c5b6b0 100644
--- a/vcl/qa/cppunit/FontFeatureTest.cxx
+++ b/vcl/qa/cppunit/FontFeatureTest.cxx
@@ -102,16 +102,21 @@ void FontFeatureTest::testGetFontFeatures()
CPPUNIT_ASSERT_EQUAL(vcl::font::FeatureParameterType::ENUM,
rFracFeatureDefinition.getType());
- CPPUNIT_ASSERT_EQUAL(size_t(2), rFracFeatureDefinition.getEnumParameters().size());
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rFracFeatureDefinition.getEnumParameters().size());
vcl::font::FeatureParameter const& rParameter1
= rFracFeatureDefinition.getEnumParameters()[0];
- CPPUNIT_ASSERT_EQUAL(sal_uInt32(1), rParameter1.getCode());
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(0), rParameter1.getCode());
CPPUNIT_ASSERT(!rParameter1.getDescription().isEmpty());
vcl::font::FeatureParameter const& rParameter2
= rFracFeatureDefinition.getEnumParameters()[1];
- CPPUNIT_ASSERT_EQUAL(sal_uInt32(2), rParameter2.getCode());
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(1), rParameter2.getCode());
+ CPPUNIT_ASSERT(!rParameter2.getDescription().isEmpty());
+
+ vcl::font::FeatureParameter const& rParameter3
+ = rFracFeatureDefinition.getEnumParameters()[2];
+ CPPUNIT_ASSERT_EQUAL(sal_uInt32(2), rParameter3.getCode());
CPPUNIT_ASSERT(!rParameter2.getDescription().isEmpty());
}
#endif // HAVE_MORE_FONTS
diff --git a/vcl/source/font/FeatureCollector.cxx b/vcl/source/font/FeatureCollector.cxx
index 8f6b8180c3e9..a8c1ff0d2548 100644
--- a/vcl/source/font/FeatureCollector.cxx
+++ b/vcl/source/font/FeatureCollector.cxx
@@ -26,7 +26,7 @@ bool FeatureCollector::collectGraphiteFeatureDefinition(vcl::font::Feature& rFea
bool bFound = false;
- gr_uint16 nUILanguage = 0x0409;
+ gr_uint16 nUILanguage = gr_uint16(m_eLanguageType);
gr_uint16 nNumberOfFeatures = gr_face_n_fref(grFace);
gr_feature_val* pFeatures = gr_face_featureval_for_lang(grFace, rFeature.m_aID.m_aLanguageCode);
@@ -49,22 +49,21 @@ bool FeatureCollector::collectGraphiteFeatureDefinition(vcl::font::Feature& rFea
gr_uint16 nNumberOfValues = gr_fref_n_values(pFeatureRef);
for (gr_uint16 j = 0; j < nNumberOfValues; ++j)
{
- if (gr_fref_value(pFeatureRef, j))
- {
- gr_uint32 nValueLabelLength = 0;
- void* pValueLabel = gr_fref_value_label(pFeatureRef, j, &nUILanguage,
- gr_utf8, &nValueLabelLength);
- OUString sValueLabel(
- OUString::createFromAscii(static_cast<char*>(pValueLabel)));
- aParameters.emplace_back(sal_uInt32(j), sValueLabel);
- gr_label_destroy(pValueLabel);
- }
+ gr_uint32 nValueLabelLength = 0;
+ void* pValueLabel = gr_fref_value_label(pFeatureRef, j, &nUILanguage, gr_utf8,
+ &nValueLabelLength);
+ OUString sValueLabel(
+ OUString::createFromAscii(static_cast<char*>(pValueLabel)));
+ aParameters.emplace_back(sal_uInt32(j), sValueLabel);
+ gr_label_destroy(pValueLabel);
}
auto eFeatureParameterType = vcl::font::FeatureParameterType::ENUM;
// Check if the parameters are boolean
- if (aParameters.size() == 1 && aParameters[0].getDescription() == "True")
+ if (aParameters.size() == 2
+ && (aParameters[0].getDescription() == "True"
+ || aParameters[0].getDescription() == "False"))
{
eFeatureParameterType = vcl::font::FeatureParameterType::BOOL;
aParameters.clear();
@@ -99,15 +98,14 @@ void FeatureCollector::collectForLanguage(hb_tag_t aTableTag, sal_uInt32 nScript
vcl::font::Feature& rFeature = m_rFontFeatures.back();
rFeature.m_aID = { aFeatureTag, aScriptTag, aLanguageTag };
- FeatureDefinition aDefinition
- = OpenTypeFeatureDefinitonList::get().getDefinition(aFeatureTag);
- if (aDefinition)
+ if (!collectGraphiteFeatureDefinition(rFeature))
{
- rFeature.m_aDefinition = vcl::font::FeatureDefinition(aDefinition);
- }
- else
- {
- collectGraphiteFeatureDefinition(rFeature);
+ FeatureDefinition aDefinition
+ = OpenTypeFeatureDefinitonList::get().getDefinition(aFeatureTag);
+ if (aDefinition)
+ {
+ rFeature.m_aDefinition = vcl::font::FeatureDefinition(aDefinition);
+ }
}
}
}
diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx
index 318b9ffe116a..17fd97462947 100644
--- a/vcl/source/outdev/font.cxx
+++ b/vcl/source/outdev/font.cxx
@@ -18,6 +18,7 @@
*/
#include <i18nlangtag/mslangid.hxx>
+#include <i18nlangtag/lang.h>
#include <unotools/configmgr.hxx>
#include <vcl/virdev.hxx>
@@ -189,7 +190,9 @@ bool OutputDevice::GetFontFeatures(std::vector<vcl::font::Feature>& rFontFeature
if (!pHbFace)
return false;
- vcl::font::FeatureCollector aFeatureCollector(pHbFace, rFontFeatures);
+ const LanguageType eOfficeLanguage = Application::GetSettings().GetLanguageTag().getLanguageType();
+
+ vcl::font::FeatureCollector aFeatureCollector(pHbFace, rFontFeatures, eOfficeLanguage);
aFeatureCollector.collectForTable(HB_OT_TAG_GSUB); // substitution
aFeatureCollector.collectForTable(HB_OT_TAG_GPOS); // positioning
More information about the Libreoffice-commits
mailing list