Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


Enclosed is a patch which doesn't involve an update to the graphite2 tarball. This patch fixes bug 
#36703 for the extreme pressure LinLibertineG puts on graphite. For more details, see the bug 
itself.

Yours,
Martin
diff --git a/graphite/graphite2-0.9.2.patch b/graphite/graphite2-0.9.2.patch
index 35f0bd2..a775c1f 100644
--- a/graphite/graphite2-0.9.2.patch
+++ b/graphite/graphite2-0.9.2.patch
@@ -402,3 +402,52 @@ diff current src/List.h
    #ifdef GR2_EXPORTING
      #ifdef __GNUC__
        #define GR2_API    __attribute__((dllexport))
+diff -r b3a86877ec68 src/Pass.cpp
+--- misc/build/graphite2-0.9.2/src/Pass.cpp    Wed May 11 09:34:52 2011 +0700
++++ misc/build/graphite2-0.9.2/src/Pass.cpp    Mon May 16 13:54:00 2011 +0700
+@@ -513,6 +513,7 @@
+ bool Pass::testConstraint(const Rule &r, Machine & m) const
+ {
+     if (r.sort - r.preContext > (int)m.slotMap().size() - m.slotMap().context())    return false;
++    if (m.slotMap().context() - r.preContext < 0) return false;
+     if (!*r.constraint)                 return true;
+     assert(r.constraint->constraint());
+ 
+@@ -527,6 +528,7 @@
+     Machine::status_t status = Machine::finished;
+     for (int n = r.sort; n && map; --n, ++map)
+     {
++      if (!*map) continue;
+         const int32 ret = r.constraint->run(m, map, status);
+         if (!ret || status != Machine::finished)
+         {
+diff -r b3a86877ec68 src/Rule.h
+--- misc/build/graphite2-0.9.2/src/Rule.h      Wed May 11 09:34:52 2011 +0700
++++ misc/build/graphite2-0.9.2/src/Rule.h      Mon May 16 13:54:00 2011 +0700
+@@ -187,8 +187,9 @@
+   // Merge the new sorted rules list into the current sorted result set.
+   const RuleEntry * lre = begin(), * rre = state.rules;
+   RuleEntry * out = m_rules + (m_begin == m_rules)*MAX_RULES;    
++  const RuleEntry * lrend = out + MAX_RULES;
+   m_begin = out; 
+-  while (lre != end())
++  while (lre != end() && out != lrend)
+   {
+     if (*lre < *rre)      *out++ = *lre++;
+     else if (*rre < *lre) { *out++ = *rre++; }
+@@ -196,12 +197,12 @@
+ 
+     if (rre == state.rules_end) 
+     { 
+-      while (lre != end()) { *out++ = *lre++; }
++      while (lre != end() && out != lrend) { *out++ = *lre++; }
+       m_end = out;
+       return;
+     }
+   }
+-  while (rre != state.rules_end) { *out++ = *rre++; }
++  while (rre != state.rules_end && out != lrend) { *out++ = *rre++; }
+   m_end = out;
+ }
+ 
+

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.