[wadalabfont-kit] / jis2prim / Matchers.h  

Diff of /jis2prim/Matchers.h

Parent Directory | Revision Log

version 1.3, Tue Mar 19 00:33:14 2002 UTC version 1.5, Tue Aug 20 11:10:36 2002 UTC
Line 12 
Line 12 
  protected:   protected:
   int x,y;    int x,y;
   PatMatch pm;    PatMatch pm;
     int penalty;
  public:   public:
   MatchResult(int xx, int yy,const PatMatch& p) :x(xx),y(yy),pm(p){}    MatchResult(int xx, int yy,const PatMatch& p,int penalty) :x(xx),y(yy),pm(p),penalty(penalty){}
   vector<pixel> getPixels() const {    std::vector<pixel> getPixels() const;
     return pm.getPixels(x,y);  
   }  
 };  };
   
 class Matchers {  class Matchers {
   friend ostream& operator<<(ostream &os,const Matchers &mt);    friend ostream& operator<<(ostream &os,const Matchers &mt);
  protected:   protected:
   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(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(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(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,4,  
                           ".@@."  
                           "@@@."  
                           ".@@."  
                           "....",  
                           Assumption()  
                           .add(SimpleAssumption(YokoMask,JointEnd,1.5,2,0,0))  
                           .add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2))));  
   }  
   vector<MatchResult> findMatch(const BitmapFont& bf) const{  
     vector<MatchResult> mr;  
     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++)  
           if(it->isMatch(bf,x,y))  
             mr.push_back(MatchResult(x,y,*it));  
     return mr;  
   }  
   vector<pixel> notCovered(const BitmapFont& bf) const{  
     vector<MatchResult> mr=findMatch(bf);  
     vector<set<int> > pixel2match(bf.getSize());  
     vector<set<int> > match2pixel(mr.size());  
     vector<MatchResult>::iterator it;  
     for(it=mr.begin();it!=mr.end();it++){  
       int n= it-mr.begin();  
       vector<pixel> ps=(*it).getPixels();  
       vector<pixel>::iterator ips;  
       for(ips=ps.begin();ips!=ps.end();ips++){  
         int m=bf.getIndex(*ips);  
         cout << '(' << ips->first << ',' << ips->second << ")\n";  
         assert(m != -1);  
         match2pixel[n].insert(m);  
         pixel2match[m].insert(n);  
       }  
     }  
     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);
   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 << ")";  
   return os;  
 }  
 #endif /* _MATCHERS_H */  #endif /* _MATCHERS_H */


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

ktanaka

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help