kerning table fixes
authorMatthias Kramm <kramm@quiss.org>
Thu, 21 Jan 2010 01:07:56 +0000 (17:07 -0800)
committerMatthias Kramm <kramm@quiss.org>
Thu, 21 Jan 2010 01:07:56 +0000 (17:07 -0800)
lib/pdf/InfoOutputDev.cc
lib/pdf/InfoOutputDev.h
lib/q.c

index 3c65bd8..ba151a1 100644 (file)
@@ -67,7 +67,6 @@ void FontInfo::grow(int size)
 FontInfo::FontInfo(char*id)
 {
     this->id = strdup(id);
-    this->charid2glyph = 0;
     this->seen = 0;
     this->num_glyphs = 0;
     this->glyphs = 0;
@@ -83,10 +82,6 @@ FontInfo::~FontInfo()
 {
     if(this->id) {free(this->id);this->id=0;}
     this->font = 0;
-    if(this->charid2glyph) {
-       free(this->charid2glyph);
-       this->charid2glyph = 0;
-    }
     int t;
     for(t=0;t<num_glyphs;t++) {
        if(glyphs[t]) {
@@ -232,7 +227,7 @@ static gfxfont_t* createGfxFont(FontInfo*src)
     }
 
     int kerning_size = 0;
-    for(t=0;t<font->num_glyphs;t++) {
+    for(t=0;t<src->num_glyphs;t++) {
        dict_t* d = src->kerning[t];
        if(!d) continue;
        DICT_ITERATE_ITEMS(d,void*,key,mtf_t*,m) {
@@ -244,14 +239,18 @@ static gfxfont_t* createGfxFont(FontInfo*src)
     font->kerning_size = kerning_size;
     font->kerning = (gfxkerning_t*)malloc(sizeof(gfxkerning_t)*kerning_size);
     int pos = 0;
-    for(t=0;t<font->num_glyphs;t++) {
+    for(t=0;t<src->num_glyphs;t++) {
        dict_t* d = src->kerning[t];
        if(!d) continue;
        DICT_ITERATE_ITEMS(d,void*,key,mtf_t*,m) {
            if(m) {
-               font->kerning[pos].c1 = t;
-               font->kerning[pos].c2 = (int)(ptroff_t)key;
+               font->kerning[pos].c1 = src->glyphs[t]->glyphid;
+               font->kerning[pos].c2 = src->glyphs[(int)(ptroff_t)key]->glyphid;
                font->kerning[pos].advance = (int)(ptroff_t)m->first->key;
+               printf("kerning[%d] = (%d,%d,%d)\n", pos,
+                       font->kerning[pos].c1,
+                       font->kerning[pos].c2,
+                       font->kerning[pos].advance);
                pos++;
            }
        }
index e5ea3c6..66958da 100644 (file)
@@ -85,7 +85,6 @@ public:
     GlyphInfo**glyphs;
     dict_t**kerning;
 
-    int*charid2glyph;
     SplashFont*splash_font;
     char seen;
     int space_char;
diff --git a/lib/q.c b/lib/q.c
index 8971616..a16d1b3 100644 (file)
--- a/lib/q.c
+++ b/lib/q.c
@@ -1340,10 +1340,12 @@ void mtf_increase(mtf_t*m, const void*key)
     while(item) {
        if(m->type->equals(item->key, key)) {
            item->num++;
-           if(last) last->next = item->next;
-           else m->first = item->next;
-            item->next = m->first;
-            m->first = item;
+           if(item->num>m->first->num) {
+               if(last) last->next = item->next;
+               else m->first = item->next;
+               item->next = m->first;
+               m->first = item;
+           }
             return;
        }
        last = item;