(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.1 and 1.4

version 1.1, 2003/07/15 17:02:49 version 1.4, 2003/08/26 20:17:08
Line 30 
Line 30 
 #include <Pegasus/Common/LanguageParser.h> #include <Pegasus/Common/LanguageParser.h>
 #include <Pegasus/Common/InternalException.h> #include <Pegasus/Common/InternalException.h>
 #include <Pegasus/Common/Tracer.h> #include <Pegasus/Common/Tracer.h>
   #include <Pegasus/Common/MessageLoader.h> //l10n
 #include <cstring> #include <cstring>
  
 //PEGASUS_USING_STD; //PEGASUS_USING_STD;
Line 85 
Line 86 
                         hdr.remove(0,i+3);  // remove everything but the quality value                         hdr.remove(0,i+3);  // remove everything but the quality value
                 }                 }
                 else{                 else{
                         throw InvalidAcceptLanguageHeader(                          //l10n
                           //throw InvalidAcceptLanguageHeader(
                                   //"AcceptLanguage contains too many characters or non-alpha characters");
                           MessageLoaderParms parms("Common.LanguageParser.TOO_MANY_OR_NON_ALPHA_CHARACTERS_AL",
                                 "AcceptLanguage contains too many characters or non-alpha characters");                                 "AcceptLanguage contains too many characters or non-alpha characters");
                           throw InvalidAcceptLanguageHeader(MessageLoader::getMessage(parms));
                 }                 }
                 //validate quality                 //validate quality
                 quality = atof(hdr.getCString());                 quality = atof(hdr.getCString());
                 if(quality > 1.0 || quality < 0.0){                 if(quality > 1.0 || quality < 0.0){
                         throw InvalidAcceptLanguageHeader(                          //l10n
                           //throw InvalidAcceptLanguageHeader(
                                   //"AcceptLanguage contains an invalid quality value");
                           MessageLoaderParms parms("Common.LanguageParser.INVALID_QUALITY_VALUE",
                                 "AcceptLanguage contains an invalid quality value");                                 "AcceptLanguage contains an invalid quality value");
                           throw InvalidAcceptLanguageHeader(MessageLoader::getMessage(parms));
                 }                 }
         }         }
         else{   // extract and store language, quality defaults to 1.0         else{   // extract and store language, quality defaults to 1.0
                 if(isValid(hdr, validate_length)) language_tag = hdr;                 if(isValid(hdr, validate_length)) language_tag = hdr;
                 else throw InvalidAcceptLanguageHeader(                  else{
                           //l10n
                           //throw InvalidAcceptLanguageHeader(
                                   //"AcceptLanguage contains too many characters or non-alpha characters");
                           MessageLoaderParms parms("Common.LanguageParser.TOO_MANY_OR_NON_ALPHA_CHARACTERS_AL",
                                 "AcceptLanguage contains too many characters or non-alpha characters");                                 "AcceptLanguage contains too many characters or non-alpha characters");
                           throw InvalidAcceptLanguageHeader(MessageLoader::getMessage(parms));
                   }
         }         }
  
         PEG_METHOD_EXIT();         PEG_METHOD_EXIT();
Line 115 
Line 130 
         while((i = value.find("(")) != PEG_NOT_FOUND){ // get rid of anything in parenthesis in hdr if found         while((i = value.find("(")) != PEG_NOT_FOUND){ // get rid of anything in parenthesis in hdr if found
                 if((j = value.find(")")) != PEG_NOT_FOUND)                 if((j = value.find(")")) != PEG_NOT_FOUND)
                         value.remove(i, (j-i)+1);                         value.remove(i, (j-i)+1);
                 else  throw InvalidContentLanguageHeader(                  else{
                           //l10n
                             //throw InvalidContentLanguageHeader(
                                                           //"ContentLanguage does not contain terminating ) character");
                           MessageLoaderParms parms("Common.LanguageParser.DOES_NOT_CONTAIN_TERMINATING",
                                                         "ContentLanguage does not contain terminating ) character");                                                         "ContentLanguage does not contain terminating ) character");
                           throw InvalidContentLanguageHeader(MessageLoader::getMessage(parms));
                   }
         }         }
         // get rid of any beginning or trailing whitespaces         // get rid of any beginning or trailing whitespaces
         while( (i = value.find(" ")) != PEG_NOT_FOUND ){         while( (i = value.find(" ")) != PEG_NOT_FOUND ){
                 value.remove(i,1);                 value.remove(i,1);
         }         }
         if(!isValid(value)) throw InvalidContentLanguageHeader(          if(!isValid(value)){
                   //l10n
                    //throw InvalidContentLanguageHeader(
                                                           //"ContentLanguage contains too many characters or non-alpha characters");
                   MessageLoaderParms parms("Common.LanguageParser.TOO_MANY_OR_NON_ALPHA_CHARACTERS_CL",
                                                         "ContentLanguage contains too many characters or non-alpha characters");                                                         "ContentLanguage contains too many characters or non-alpha characters");
                   throw InvalidContentLanguageHeader(MessageLoader::getMessage(parms));
   
           }
         PEG_METHOD_EXIT();         PEG_METHOD_EXIT();
         return value;         return value;
 } }
Line 177 
Line 205 
         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 191 
Line 219 
  
 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 206 
Line 234 
 } }
  
 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( !isalpha(_str[i]) )                 if( !isalpha(_str[i]) )
                         return false;                         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);
           for(Uint32 i = 0; i < length; i++)
                 if(!isalnum(_str[i]))                 if(!isalnum(_str[i]))
                         return _str[i];                         return _str[i];
         return '\0';         return '\0';
Line 221 
Line 251 
  
 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);
           for(Uint32 i = 0; i < length; i++)
                 _str[i] = (!isalnum(_str[i])) ? new_sep : _str[i];                 _str[i] = (!isalnum(_str[i])) ? new_sep : _str[i];
         return (String(_str)).getCString();         return (String(_str)).getCString();
 } }


Legend:
Removed from v.1.1  
changed lines
  Added in v.1.4

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2