From bcc24611dd8738826b495e48ce2fdc8ce9c0b3e2 Mon Sep 17 00:00:00 2001 From: kramm Date: Wed, 3 Jul 2002 18:51:28 +0000 Subject: [PATCH] fix character searching in fonts. --- pdf2swf/swfoutput.cc | 59 +++++++++++++++++++++++++++++++++++--------------- pdf2swf/swfoutput.h | 2 +- 2 files changed, 43 insertions(+), 18 deletions(-) diff --git a/pdf2swf/swfoutput.cc b/pdf2swf/swfoutput.cc index 330c890..27fdced 100644 --- a/pdf2swf/swfoutput.cc +++ b/pdf2swf/swfoutput.cc @@ -451,7 +451,7 @@ static void drawchar(struct swfoutput*obj, SWFFont*font, char*character, int cha } else { - T1_OUTLINE*outline = font->getOutline(character); + T1_OUTLINE*outline = font->getOutline(character, charnr); char* charname = character; if(!outline) { @@ -699,40 +699,51 @@ SWFFont::~SWFFont() free(char2swfcharid); } -T1_OUTLINE*SWFFont::getOutline(char*name) +T1_OUTLINE*SWFFont::getOutline(char*name, int charnr) { int t; for(t=0;tcharnum;t++) { if(!strcmp(this->charname[t],name)) { - if(!used[t]) - { - swfcharid2char[swfcharpos] = t; - char2swfcharid[t] = swfcharpos; - swfcharpos++; - used[t] = 1; - } return outline[t]; } } + + /* if we didn't find the character, maybe + we can find the capitalized version */ + for(t=0;tcharnum;t++) { + if(!strcasecmp(this->charname[t],name)) + return outline[t]; + } + + /* if we didn't find it by name, use the names of the first 256 characters + of the font to try a new name based on charnr */ + if(this->standardtable && charnr>=0 && charnr < this->standardtablesize) { + return getOutline(this->standardtable[charnr], -1); + } + + logf(" Didn't find character '%s' in font '%s'", FIXNULL(name), this->name); return 0; } -int SWFFont::getWidth(char*name) +int SWFFont::getSWFCharID(char*name, int charnr) { int t; for(t=0;tcharnum;t++) { if(!strcmp(this->charname[t],name)) { - return this->width[t]; + if(!used[t]) + { + swfcharid2char[swfcharpos] = t; + char2swfcharid[t] = swfcharpos++; + used[t] = 1; + } + return char2swfcharid[t]; } } - return 0; -} -int SWFFont::getSWFCharID(char*name, int charnr) -{ - int t; + /* if we didn't find the character, maybe + we can find the capitalized version */ for(t=0;tcharnum;t++) { - if(!strcmp(this->charname[t],name)) { + if(!strcasecmp(this->charname[t],name)) { if(!used[t]) { swfcharid2char[swfcharpos] = t; @@ -742,6 +753,9 @@ int SWFFont::getSWFCharID(char*name, int charnr) return char2swfcharid[t]; } } + + /* if we didn't find it by name, use the names of the first 256 (or so) characters + of the font to try a new name based on charnr */ if(this->standardtable && charnr>=0 && charnr < this->standardtablesize) { return getSWFCharID(this->standardtable[charnr], -1); } @@ -749,6 +763,17 @@ int SWFFont::getSWFCharID(char*name, int charnr) return 0; } +int SWFFont::getWidth(char*name) +{ + int t; + for(t=0;tcharnum;t++) { + if(!strcmp(this->charname[t],name)) { + return this->width[t]; + } + } + return 0; +} + char*SWFFont::getName() { return this->name; diff --git a/pdf2swf/swfoutput.h b/pdf2swf/swfoutput.h index 896de37..32aaf13 100644 --- a/pdf2swf/swfoutput.h +++ b/pdf2swf/swfoutput.h @@ -59,7 +59,7 @@ class SWFFont SWFFont(char*name, int t1id, char*filename); SWFFont::~SWFFont(); - T1_OUTLINE*getOutline(char*charname); + T1_OUTLINE*getOutline(char*charname, int charnr); int getSWFCharID(char*name, int charnr); int getWidth(char*name); char*getName(); -- 1.7.10.4