Kaydet (Commit) 8b9ec421 authored tarafından Khaled Hosny's avatar Khaled Hosny

Fix debug build and few cleanups

Change-Id: I805962667c3ef2dcaf07a0acebeacca74c74892a
üst 970db619
...@@ -50,9 +50,10 @@ class CommonSalLayout : public GenericSalLayout ...@@ -50,9 +50,10 @@ class CommonSalLayout : public GenericSalLayout
#else #else
ServerFont& mrServerFont; ServerFont& mrServerFont;
#endif #endif
OString mLang;
hb_feature_t * mpFeatures; void ParseFeatures(const OUString& name);
unsigned int mnFeats; OString msLanguage;
std::vector<hb_feature_t> maFeatures;
public: public:
#if defined(_WIN32) #if defined(_WIN32)
...@@ -66,7 +67,6 @@ public: ...@@ -66,7 +67,6 @@ public:
const ServerFont& getFontData() const { return mrServerFont; }; const ServerFont& getFontData() const { return mrServerFont; };
#endif #endif
void ParseFeatures(OUString name);
void SetNeedFallback(ImplLayoutArgs&, sal_Int32, bool); void SetNeedFallback(ImplLayoutArgs&, sal_Int32, bool);
void AdjustLayout(ImplLayoutArgs&) override; void AdjustLayout(ImplLayoutArgs&) override;
bool LayoutText(ImplLayoutArgs&) override; bool LayoutText(ImplLayoutArgs&) override;
......
...@@ -126,18 +126,16 @@ static hb_unicode_funcs_t* getUnicodeFuncs() ...@@ -126,18 +126,16 @@ static hb_unicode_funcs_t* getUnicodeFuncs()
} }
#endif #endif
void CommonSalLayout::ParseFeatures(OUString name) void CommonSalLayout::ParseFeatures(const OUString& name)
{ {
mnFeats = 0; int nFeatures = 0;
mpFeatures = 0;
mLang = OString("");
int nStart = name.indexOf(':'); int nStart = name.indexOf(':');
if (nStart < 0) if (nStart < 0)
return; return;
OString oName = OUStringToOString(name, RTL_TEXTENCODING_ASCII_US); OString oName = OUStringToOString(name, RTL_TEXTENCODING_ASCII_US);
for (int nNext = nStart; nNext > 0; nNext = name.indexOf('&', nNext + 1)) for (int nNext = nStart; nNext > 0; nNext = name.indexOf('&', nNext + 1))
{ {
if (name.match("lang=", nNext+1)) if (name.match("lang=", nNext + 1))
{ {
int endamp = name.indexOf('&', nNext+1); int endamp = name.indexOf('&', nNext+1);
int enddelim = name.indexOf(' ', nNext+1); int enddelim = name.indexOf(' ', nNext+1);
...@@ -151,23 +149,23 @@ void CommonSalLayout::ParseFeatures(OUString name) ...@@ -151,23 +149,23 @@ void CommonSalLayout::ParseFeatures(OUString name)
end = endamp; end = endamp;
else else
end = enddelim; end = enddelim;
mLang = oName.copy(nNext+6, end-nNext-6); msLanguage = oName.copy(nNext + 6, end - nNext - 6);
} }
else else
++mnFeats; ++nFeatures;
} }
if (mnFeats == 0) if (nFeatures == 0)
return; return;
mpFeatures = new hb_feature_t[mnFeats]; maFeatures.reserve(nFeatures);
mnFeats = 0; for (int nThis = nStart, nNext = name.indexOf('&', nStart + 1); nThis > 0; nThis = nNext, nNext = name.indexOf('&', nNext + 1))
for (int nThis = nStart, nNext = name.indexOf('&', nStart+1); nThis > 0; nThis = nNext, nNext = name.indexOf('&', nNext + 1))
{ {
if (!name.match("lang=", nThis+1)) if (!name.match("lang=", nThis + 1))
{ {
int end = nNext > 0 ? nNext : name.getLength(); int end = nNext > 0 ? nNext : name.getLength();
if (hb_feature_from_string(oName.getStr() + nThis + 1, end - nThis - 1, &mpFeatures[mnFeats])) hb_feature_t aFeature;
++mnFeats; if (hb_feature_from_string(oName.getStr() + nThis + 1, end - nThis - 1, &aFeature))
maFeatures.push_back(aFeature);
} }
} }
} }
...@@ -463,9 +461,9 @@ bool CommonSalLayout::LayoutText(ImplLayoutArgs& rArgs) ...@@ -463,9 +461,9 @@ bool CommonSalLayout::LayoutText(ImplLayoutArgs& rArgs)
int nRunLen = nEndRunPos - nMinRunPos; int nRunLen = nEndRunPos - nMinRunPos;
aHbScript = hb_icu_script_to_script(aScriptRun.maScript); aHbScript = hb_icu_script_to_script(aScriptRun.maScript);
// hb_language_from_string() accept ISO639-3 language tag except for Chinese. OString sLanguage = msLanguage;
LanguageTag &rTag = rArgs.maLanguageTag; if (sLanguage.isEmpty())
OString sLanguage = mLang.getLength() ? mLang : OUStringToOString(rTag.getBcp47(), RTL_TEXTENCODING_ASCII_US); sLanguage = OUStringToOString(rArgs.maLanguageTag.getBcp47(), RTL_TEXTENCODING_ASCII_US);
bool bVertical = false; bool bVertical = false;
if ((rArgs.mnFlags & SalLayoutFlags::Vertical) && if ((rArgs.mnFlags & SalLayoutFlags::Vertical) &&
...@@ -498,7 +496,7 @@ bool CommonSalLayout::LayoutText(ImplLayoutArgs& rArgs) ...@@ -498,7 +496,7 @@ bool CommonSalLayout::LayoutText(ImplLayoutArgs& rArgs)
#if HB_VERSION_ATLEAST(0, 9, 42) #if HB_VERSION_ATLEAST(0, 9, 42)
hb_buffer_set_cluster_level(pHbBuffer, HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); hb_buffer_set_cluster_level(pHbBuffer, HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS);
#endif #endif
hb_shape(mpHbFont, pHbBuffer, mpFeatures, mnFeats); hb_shape(mpHbFont, pHbBuffer, maFeatures.data(), maFeatures.size());
int nRunGlyphCount = hb_buffer_get_length(pHbBuffer); int nRunGlyphCount = hb_buffer_get_length(pHbBuffer);
hb_glyph_info_t *pHbGlyphInfos = hb_buffer_get_glyph_infos(pHbBuffer, nullptr); hb_glyph_info_t *pHbGlyphInfos = hb_buffer_get_glyph_infos(pHbBuffer, nullptr);
......
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