Advertisement
Guest User

Untitled

a guest
Nov 30th, 2011
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.46 KB | None | 0 0
  1. #include "wordtypefilter.h"
  2. #include "clconstants.h"
  3.  
  4. WordTypeFilter::WordTypeFilter(TokenStream* in, bool deleteTs)
  5.     : TokenFilter(in,deleteTs)
  6. {
  7. }
  8.  
  9. WordTypeFilter::~WordTypeFilter()
  10. {
  11. }
  12.  
  13. Token* WordTypeFilter::next(Token* token)
  14. {
  15.     if(!m_savedBuffer.isEmpty()) {
  16.         StringBuffer *output = m_savedBuffer.dequeue();
  17.         token->setText(output->getBuffer());
  18.  
  19.         delete output;
  20.  
  21.         return token;
  22.     }
  23.  
  24.     if ( input->next(token) != NULL ){
  25.         int32_t termLen = token->termLength();
  26.         const TCHAR* chars = token->termBuffer();
  27.         bool doProcess = false;
  28.  
  29.         CharType prevChartype = ArabicChar;
  30.  
  31.         for (int32_t i = 0; i < termLen; ++i) {
  32.             if(i>0) {
  33.                 CharType chartype = getCharType(chars[i]);
  34.                 if(chartype == prevChartype) {
  35.                     prevChartype = chartype;
  36.                 } else {
  37.                     doProcess = true;
  38.                     break;
  39.                 }
  40.  
  41.             } else {
  42.                 prevChartype = getCharType(chars[i]);
  43.             }
  44.         }
  45.  
  46.         if ( !doProcess ) {
  47.             return token;
  48.         } else {
  49.             qDebug("Need proccess");
  50.         }
  51.  
  52.         bool doneFromToken = false;
  53.         StringBuffer *output = new StringBuffer(termLen*2);
  54.  
  55.         for (int32_t j = 0; j < termLen; j++) {
  56.             TCHAR c = chars[j];
  57.             CharType chartype = getCharType(c);
  58.  
  59.             if(j>0) {
  60.                 if(chartype != prevChartype) {
  61.                     if(!doneFromToken) {
  62.                         token->setText(output->getBuffer());
  63.                         doneFromToken = true;
  64.  
  65.                         delete output;
  66.                         output = new StringBuffer(termLen*2);
  67.                     } else {
  68.                         m_savedBuffer.enqueue(output);
  69.  
  70.                         output = new StringBuffer(termLen*2);
  71.                     }
  72.  
  73.                 }
  74.             }
  75.  
  76.             prevChartype = chartype;
  77.             output->appendChar(c);
  78.         }
  79.  
  80.         if(doProcess) {
  81.             if(output->length()>0) {
  82.                 m_savedBuffer.enqueue(output);
  83.             }
  84.         }
  85.  
  86.         return token;
  87.     }
  88.  
  89.     return NULL;
  90. }
  91.  
  92. WordTypeFilter::CharType WordTypeFilter::getCharType(const TCHAR c)
  93. {
  94.     if(IS_ARABIC_CHAR(c))
  95.         return ArabicChar;
  96.     else if(IS_NUMBER(c))
  97.         return NumberChar;
  98.     else
  99.         return LatinChar;
  100. }
  101.  
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement