152b1d543SIngo Weinhold /* 2*e9bad28aSIngo Weinhold * Copyright 2008-2013, Ingo Weinhold, ingo_weinhold@gmx.de. 352b1d543SIngo Weinhold * Distributed under the terms of the MIT License. 452b1d543SIngo Weinhold */ 552b1d543SIngo Weinhold 652b1d543SIngo Weinhold #include "TerminalCharClassifier.h" 752b1d543SIngo Weinhold 8*e9bad28aSIngo Weinhold #include <ctype.h> 9*e9bad28aSIngo Weinhold 10*e9bad28aSIngo Weinhold #include <algorithm> 11*e9bad28aSIngo Weinhold 12*e9bad28aSIngo Weinhold 13*e9bad28aSIngo Weinhold // #pragma mark - TerminalCharClassifier 14*e9bad28aSIngo Weinhold 1552b1d543SIngo Weinhold ~TerminalCharClassifier()1652b1d543SIngo WeinholdTerminalCharClassifier::~TerminalCharClassifier() 1752b1d543SIngo Weinhold { 1852b1d543SIngo Weinhold } 19*e9bad28aSIngo Weinhold 20*e9bad28aSIngo Weinhold 21*e9bad28aSIngo Weinhold // #pragma mark - DefaultCharClassifier 22*e9bad28aSIngo Weinhold 23*e9bad28aSIngo Weinhold DefaultCharClassifier(const char * additionalWordChars)24*e9bad28aSIngo WeinholdDefaultCharClassifier::DefaultCharClassifier(const char* additionalWordChars) 25*e9bad28aSIngo Weinhold { 26*e9bad28aSIngo Weinhold const char* p = additionalWordChars; 27*e9bad28aSIngo Weinhold while (p != NULL && *p != '\0') { 28*e9bad28aSIngo Weinhold int count = UTF8Char::ByteCount(*p); 29*e9bad28aSIngo Weinhold if (count <= 0 || count > 4) 30*e9bad28aSIngo Weinhold break; 31*e9bad28aSIngo Weinhold fAdditionalWordChars.push_back(UTF8Char(p, count)); 32*e9bad28aSIngo Weinhold p += count; 33*e9bad28aSIngo Weinhold } 34*e9bad28aSIngo Weinhold } 35*e9bad28aSIngo Weinhold 36*e9bad28aSIngo Weinhold 37*e9bad28aSIngo Weinhold int Classify(const UTF8Char & character)38*e9bad28aSIngo WeinholdDefaultCharClassifier::Classify(const UTF8Char& character) 39*e9bad28aSIngo Weinhold { 40*e9bad28aSIngo Weinhold if (character.IsSpace()) 41*e9bad28aSIngo Weinhold return CHAR_TYPE_SPACE; 42*e9bad28aSIngo Weinhold 43*e9bad28aSIngo Weinhold if (character.IsAlNum()) 44*e9bad28aSIngo Weinhold return CHAR_TYPE_WORD_CHAR; 45*e9bad28aSIngo Weinhold 46*e9bad28aSIngo Weinhold if (std::find(fAdditionalWordChars.begin(), fAdditionalWordChars.end(), 47*e9bad28aSIngo Weinhold character) != fAdditionalWordChars.end()) { 48*e9bad28aSIngo Weinhold return CHAR_TYPE_WORD_CHAR; 49*e9bad28aSIngo Weinhold } 50*e9bad28aSIngo Weinhold 51*e9bad28aSIngo Weinhold return CHAR_TYPE_WORD_DELIMITER; 52*e9bad28aSIngo Weinhold } 53