(file) Return to LanguageParser.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/LanguageParser.cpp between version 1.3 and 1.6

version 1.3, 2003/08/22 14:56:48 version 1.6, 2003/09/04 18:35:37
Line 32 
Line 32 
 #include <Pegasus/Common/Tracer.h> #include <Pegasus/Common/Tracer.h>
 #include <Pegasus/Common/MessageLoader.h> //l10n #include <Pegasus/Common/MessageLoader.h> //l10n
 #include <cstring> #include <cstring>
   #include <iostream>
   #include <cstdlib>
 //PEGASUS_USING_STD; //PEGASUS_USING_STD;
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
Line 83 
Line 84 
         if(i != PEG_NOT_FOUND){ // extract and store language and quality         if(i != PEG_NOT_FOUND){ // extract and store language and quality
                 if(isValid(hdr.subString(0,i), validate_length)){                 if(isValid(hdr.subString(0,i), validate_length)){
                         language_tag = hdr.subString(0,i);                         language_tag = hdr.subString(0,i);
                           if(hdr.size() > i + 3)
                         hdr.remove(0,i+3);  // remove everything but the quality value                         hdr.remove(0,i+3);  // remove everything but the quality value
                           else{
                                   MessageLoaderParms parms("Common.LanguageParser.INVALID_QUALITY_VALUE",
                                                                            "AcceptLanguage contains an invalid quality value");
                                   throw InvalidAcceptLanguageHeader(MessageLoader::getMessage(parms));
                           }
                 }                 }
                 else{                 else{
                         //l10n                         //l10n
Line 188 
Line 195 
     PEG_METHOD_ENTER(TRC_L10N, "LanguageParser::parseLanguageSubtags");     PEG_METHOD_ENTER(TRC_L10N, "LanguageParser::parseLanguageSubtags");
         Uint32 i;         Uint32 i;
         char separator = findSeparator(language_tag.getCString());         char separator = findSeparator(language_tag.getCString());
   
         while( (i = language_tag.find(Char16(separator))) != PEG_NOT_FOUND ){         while( (i = language_tag.find(Char16(separator))) != PEG_NOT_FOUND ){
   
                         subtags.append(language_tag.subString(0,i));                         subtags.append(language_tag.subString(0,i));
                         language_tag.remove(0,i + 1);                         language_tag.remove(0,i + 1);
         }         }
Line 205 
Line 214 
         Array<String> subtags;         Array<String> subtags;
         parseLanguageSubtags(subtags, language_tag);         parseLanguageSubtags(subtags, language_tag);
         if(subtags.size() > 0){         if(subtags.size() > 0){
                 for(int i = 0; i < subtags.size(); i++){                  for(Uint32 i = 0; i < subtags.size(); i++){
                         //length should be 8 or less AND all characters should be A-Z or a-z                         //length should be 8 or less AND all characters should be A-Z or a-z
                         if((validate_length && subtags[i].size() > 8) || !checkAlpha(subtags[i].getCString()))                         if((validate_length && subtags[i].size() > 8) || !checkAlpha(subtags[i].getCString()))
                                 return false;                                 return false;
Line 219 
Line 228 
  
 String LanguageParser::convertPrivateLanguageTag(String language_tag){ String LanguageParser::convertPrivateLanguageTag(String language_tag){
         // figure out if its a unix style locale or windows locale         // figure out if its a unix style locale or windows locale
         int i;          Uint32 i;
         if(( i = language_tag.find("pegasus-")) != PEG_NOT_FOUND ){         if(( i = language_tag.find("pegasus-")) != PEG_NOT_FOUND ){
                 language_tag = language_tag.subString(i+5);  // capture the remainder of the string                 language_tag = language_tag.subString(i+5);  // capture the remainder of the string
                 return String(replaceSeparator(language_tag.getCString(), '-'));                 return String(replaceSeparator(language_tag.getCString(), '-'));
Line 234 
Line 243 
 } }
  
 Boolean LanguageParser::checkAlpha(CString _str){ Boolean LanguageParser::checkAlpha(CString _str){
         for(int i = 0; i < strlen(_str); i++)          Uint32 length = (Uint32) strlen(_str);
           for(Uint32 i = 0; i < length; i++){
           if (!(((_str[i] >= 'A') && (_str[i] <= 'Z')) ||
              ((_str[i] >= 'a') && (_str[i] <= 'z'))))
                           return false;
           }
           return true;
   
           /*for(Uint32 i = 0; i < length; i++)
                 if( !isalpha(_str[i]) )                 if( !isalpha(_str[i]) )
                         return false;                         return false;
           return true;*/
   }
   
   Boolean LanguageParser::checkAlphaNum(char c){
   
           if (!(((c >= 'A') && (c <= 'Z')) ||
              ((c >= 'a') && (c <= 'z')) ||
              ((c >= '0') && (c <= '9'))))
                           return false;
   
         return true;         return true;
 } }
  
 char LanguageParser::findSeparator(CString _str){ char LanguageParser::findSeparator(CString _str){
         for(int i = 0; i < strlen(_str); i++)          Uint32 length = (Uint32) strlen(_str);
                 if(!isalnum(_str[i]))          for(Uint32 i = 0; i < length; i++)
                   if(!checkAlphaNum(_str[i]))
                         return _str[i];                         return _str[i];
         return '\0';         return '\0';
 } }
  
 CString LanguageParser::replaceSeparator(CString _s, char new_sep){ CString LanguageParser::replaceSeparator(CString _s, char new_sep){
         char * _str = const_cast<char *>((const char*)_s);         char * _str = const_cast<char *>((const char*)_s);
         for(int i = 0; i < strlen(_str); i++)          Uint32 length = (Uint32) strlen(_str);
                 _str[i] = (!isalnum(_str[i])) ? new_sep : _str[i];          for(Uint32 i = 0; i < length; i++)
                   _str[i] = (!checkAlphaNum(_str[i])) ? new_sep : _str[i];
         return (String(_str)).getCString();         return (String(_str)).getCString();
 } }
  


Legend:
Removed from v.1.3  
changed lines
  Added in v.1.6

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2