[wadalabfont-kit] / jis2prim / Matchers.h  

Diff of /jis2prim/Matchers.h

Parent Directory | Revision Log

version 1.4, Tue Aug 6 06:30:43 2002 UTC version 1.5, Tue Aug 20 11:10:36 2002 UTC
Line 15 
Line 15 
   int penalty;    int penalty;
  public:   public:
   MatchResult(int xx, int yy,const PatMatch& p,int penalty) :x(xx),y(yy),pm(p),penalty(penalty){}    MatchResult(int xx, int yy,const PatMatch& p,int penalty) :x(xx),y(yy),pm(p),penalty(penalty){}
   std::vector<pixel> getPixels() const {    std::vector<pixel> getPixels() const;
     return pm.getPixels(x,y);  
   }  
 };  };
   
 class Matchers {  class Matchers {
Line 25 
Line 23 
  protected:   protected:
   std::vector<PatMatch> pm;    std::vector<PatMatch> pm;
  public:   public:
   Matchers(){    Matchers();
     pm.push_back(PatMatch(3,3,    std::vector<MatchResult> findMatch(const BitmapFont& bf) const;
                           "..."    std::vector<pixel> notCovered(const BitmapFont& bf) const;
                           ".@@"  
                           "...",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,Start,1,1,0,0))  
                           .add(SimpleAssumption(HidariMask,End,1,1,180,0))));  
     pm.push_back(PatMatch(3,3,  
                           "..."  
                           "@@@"  
                           "...",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,Mid,1,1,0,0))  
                           .add(SimpleAssumption(HidariMask,Mid,1,1,180,1))));  
     pm.push_back(PatMatch(4,3,  
                           "...?"  
                           "@@@@"  
                           ".@@.",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0))  
                           .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,1,270,2))));  
     pm.push_back(PatMatch(5,3,  
                           ".@@.."  
                           "@@@@@"  
                           ".....",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0))  
                           .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointEnd,1.5,1,270,2))));  
     pm.push_back(PatMatch(5,4,  
                           "....?"  
                           ".@@.."  
                           "@@@@."  
                           "?...?",  
                           SimpleAssumption(YokoMask,End,3,2,0,2)));  
     pm.push_back(PatMatch(4,2,  
                           ".@@."  
                           ".@@.",  
                           SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,1,270,2)));  
     pm.push_back(PatMatch(5,2,  
                           "..@@."  
                           ".@@..",  
                           SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),JointStart,2,0.5,225,1.7)));  
     pm.push_back(PatMatch(4,2,  
                           "?*@*"  
                           "*@*?",  
                           SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),JointStart,1.5,0.5,225,1)));  
     pm.push_back(PatMatch(4,3,  
                           "?*@*"  
                           "*@@*"  
                           "*@*?",  
                           SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),JointStart,1.5,0.5,225,1)));  
     pm.push_back(PatMatch(4,3,  
                           ".@@."  
                           "@@@@"  
                           ".@@.",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0))  
                           .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),Mid,1.5,1,270,2))));  
     pm.push_back(PatMatch(5,3,  
                           "..@@."  
                           "@@@@@"  
                           ".@@..",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,Mid,2,1,0,0))  
                           .add(SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),Mid,2,1,250,2))));  
     pm.push_back(PatMatch(4,4,  
                           "?.??"  
                           ".@.."  
                           ".@@@"  
                           "?@?.",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,JointStart,1.5,2,0,0))  
                           .add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,2,270,2))));  
     pm.push_back(PatMatch(5,3,  
                           "?...?"  
                           ".@@@."  
                           ".@@.?",  
                           SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),Start,1.5,0.5,270,2)));  
     pm.push_back(PatMatch(5,4,  
                           "*@@*?"  
                           "?.@@."  
                           "?.@@."  
                           "??..?",  
                           SimpleAssumption(TenMask,End,2.5,2.5,300,2)));  
     pm.push_back(PatMatch(4,3,  
                           "*.??"  
                           "*@*?"  
                           "?*@*",  
                           SimpleAssumption(TenMask,Start,1,1,315,1)));  
     pm.push_back(PatMatch(4,4,  
                           ".@@."  
                           ".@@@"  
                           ".@@."  
                           "....",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,JointStart,1.5,2,0,0))  
                           .add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2))));  
     pm.push_back(PatMatch(4,5,  
                           ".@@."  
                           ".@@@"  
                           ".@@."  
                           ".@@."  
                           "....",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,JointStart,1.5,2,0,0))  
                           .add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2))));  
     pm.push_back(PatMatch(4,4,  
                           ".@@."  
                           "@@@."  
                           ".@@."  
                           "....",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,JointEnd,1.5,2,0,0))  
                           .add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2))));  
   }  
   std::vector<MatchResult> findMatch(const BitmapFont& bf) const{  
     std::vector<MatchResult> mr;  
     std::vector<PatMatch>::const_iterator it;  
     for(it=pm.begin();it!=pm.end();it++)  
       for(int y= -1; y<bf.getHeight(); y++)  
         for(int x= -1;x<bf.getWidth();x++){  
           int penalty=it->matchPenalty(bf,x,y);  
           if(penalty>=0)  
             mr.push_back(MatchResult(x,y,*it,penalty));  
         }  
     return mr;  
   }  
   std::vector<pixel> notCovered(const BitmapFont& bf) const{  
     std::vector<MatchResult> mr=findMatch(bf);  
     std::vector<std::set<int> > pixel2match(bf.getSize());  
     std::vector<std::set<int> > match2pixel(mr.size());  
     std::vector<MatchResult>::iterator it;  
     for(it=mr.begin();it!=mr.end();it++){  
       int n= it-mr.begin();  
       std::vector<pixel> ps=(*it).getPixels();  
       std::vector<pixel>::iterator ips;  
       for(ips=ps.begin();ips!=ps.end();ips++){  
         int m=bf.getIndex(*ips);  
         std::cout << '(' << ips->first << ',' << ips->second << ")\n";  
         assert(m != -1);  
         match2pixel[n].insert(m);  
         pixel2match[m].insert(n);  
       }  
     }  
     std::vector<pixel> ret;  
     for(int i=0;i<bf.getPixelSize();i++){  
       if(pixel2match[i].empty()) {  
         ret.push_back(bf.getPixelAt(i));  
       }  
     }  
     return ret;  
   }  
 };  };
 ostream& operator<<(ostream &os,const Matchers &mt){  ostream& operator<<(ostream &os,const Matchers &mt);
   os << "Matchers(";  ostream& operator<<(ostream &os,const MatchResult &mr);
   std::vector<PatMatch>::const_iterator it;  
   for(it=mt.pm.begin();it!=mt.pm.end();it++){  
     os << *it << ',';  
   }  
   os << ')';  
   return os;  
 }  
 ostream& operator<<(ostream &os,const MatchResult &mr){  
   os << "MatchResult(" << mr.x << "," << mr.y << "," << mr.pm  
      << "," << mr.penalty << ")";  
   return os;  
 }  
 #endif /* _MATCHERS_H */  #endif /* _MATCHERS_H */


Generate output suitable for use with a patch program
Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

ktanaka

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help