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

Diff for /pegasus/src/Pegasus/Common/LanguageParser.h between version 1.11 and 1.22

version 1.11, 2005/05/30 13:25:00 version 1.22, 2008/12/01 17:49:52
Line 1 
Line 1 
 //%2005////////////////////////////////////////////////////////////////////////  //%LICENSE////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development  // Licensed to The Open Group (TOG) under one or more contributor license
 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.  // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;  // this work for additional information regarding copyright ownership.
 // IBM Corp.; EMC Corporation, The Open Group.  // Each contributor licenses this file to you under the OpenPegasus Open
 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;  // Source License; you may not use this file except in compliance with the
 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.  // License.
 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;  //
 // EMC Corporation; VERITAS Software Corporation; The Open Group.  // Permission is hereby granted, free of charge, to any person obtaining a
 //  // copy of this software and associated documentation files (the "Software"),
 // Permission is hereby granted, free of charge, to any person obtaining a copy  // to deal in the Software without restriction, including without limitation
 // of this software and associated documentation files (the "Software"), to  // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 // deal in the Software without restriction, including without limitation the  // and/or sell copies of the Software, and to permit persons to whom the
 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or  // Software is furnished to do so, subject to the following conditions:
 // sell copies of the Software, and to permit persons to whom the Software is  //
 // furnished to do so, subject to the following conditions:  // The above copyright notice and this permission notice shall be included
 //  // in all copies or substantial portions of the Software.
 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN  //
 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT  // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION  // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 // //
 //==============================================================================  //////////////////////////////////////////////////////////////////////////
 //  
 // Author: Humberto Rivero (hurivero@us.ibm.com)  
 //  
 // Modified By: Aruran, IBM (ashanmug@in.ibm.com) for Bug# 3697, 3698  
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
Line 42 
Line 38 
 #include <Pegasus/Common/Config.h> #include <Pegasus/Common/Config.h>
 #include <Pegasus/Common/String.h> #include <Pegasus/Common/String.h>
 #include <Pegasus/Common/Array.h> #include <Pegasus/Common/Array.h>
   #include <Pegasus/Common/AcceptLanguageList.h>
 #ifdef PEGASUS_USE_EXPERIMENTAL_INTERFACES  #include <Pegasus/Common/ContentLanguageList.h>
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
   /**
 /** This class parses and validates AcceptLanguage OR ContentLanguage values      This class parses and validates Accept-Language and Content-Language values
  * from the respective HTTP headers, and provides various utility functions      from the respective HTTP headers, and provides utility functions to parse
  * to parse and manipulate language information      and manipulate language information
  */  */
 class PEGASUS_COMMON_LINKAGE LanguageParser{  class PEGASUS_COMMON_LINKAGE LanguageParser
   {
 public: public:
  
 /**     This member is used to represent an empty LanguageParser. Using this      /**
     member avoids construction of an empty LanguageParser          Builds an AcceptLanguageList object from an HTTP Accept-Language
     (e.g., LanguageParser()).          header value.
 */          @param acceptLanguageHeader A String containing an HTTP
 static const LanguageParser EMPTY;          Accept-Language header value from which to build the AcceptLanguageList
           object.
 /** Parses the value portion of either an AcceptLanguage HTTP header or a          @exception InvalidAcceptLanguageHeader if a syntax error is
  * ContentLanguage HTTP header, extracts the individual fields and stores          encountered.
  * them in an array.  
  * @param values Array<String>& where the individual fields are stored  
  * @param hdr String the value portion of the HTTP Accept/ContentLanguage header  
  * this parameter is passed as object intentionally  
  */  */
 void parseHdr(Array<String> &values, String hdr);      static AcceptLanguageList parseAcceptLanguageHeader(
           const String& acceptLanguageHeader);
  
 /** Parses an AcceptLanguage or ContentLanguage value from a header.      /**
  * If a valid AcceptLanguage value is determined to contain a quality          Builds a ContentLanguageList object from an HTTP Content-Language
  * value, then this quality once validated is returned. Otherwise -1 is returned.          header value.
  * It is up to the caller to know in what context this call is being made,          @param contentLanguageHeader A String containing an HTTP
  * that is: it is the callers responsibility to know whether          Content-Language header value from which to build the
  * an AcceptLanguage or a ContentLanguage value is being parsed.          ContentLanguageList object.
  * @param language String& where the valid language is stored          @exception InvalidContentLanguageHeader if a syntax error is
  * @param hdr String the value being parsed and validated          encountered.
  * @return Real32 if a valid quality found then 1 <=> 0, otherwise 1  
  * @exception throws ???  
  */  */
 Real32 parseAcceptLanguageValue(String &language, String hdr);      static ContentLanguageList parseContentLanguageHeader(
           const String& contentLanguageHeader);
  
 String parseContentLanguageValue(String & hdr);      /**
           Validates the syntax of a language tag according to RFC 3066.
           Parses the language tag into language, country, and variant, if
           the language tag is formed using ISO codes (ISO 639 and ISO 3166).
           @param languageTagString The language tag string to parse and
           validate.
           @param language The returned language value parsed from the language
           tag, if applicable.
           @param country The returned country value parsed from the language
           tag, if applicable.
           @param variant The returned language variant value parsed from the
           language tag, if applicable.
           @exception Exception if the language tag is syntactically invalid.
        */
       static void parseLanguageTag(
           const String& languageTagString,
           String& language,
           String& country,
           String& variant);
  
 /** /**
  * Given a language ex: en-US-xx,          Validates the syntax of an Accept-Language quality value.
  * returns the base of the language "en".          @param quality A Real32 quality value to validate.
  * @param language String          @exception Exception if the quality value is invalid.
  * @param separator Char16 the character that separates the various subtags  
  * @return String base of the language parameter  
  */  */
 String getLanguage(String & language_tag);      static void validateQualityValue(Real32 quality);
   
 String getCountry(String & language_tag);  
  
 String getVariant(String & language_tag);      /**
           Builds an HTTP Accept-Language header value from an AcceptLanguageList
 private:          object.
           @param acceptLanguages The AcceptLanguageList object to be encoded in
           an HTTP Accept-Language header.
        */
       static String buildAcceptLanguageHeader(
           const AcceptLanguageList& acceptLanguages);
  
 /** /**
  * Fills the first position in the array with the most general part of          Builds an HTTP Content-Language header value from a ContentLanguageList
  * the language String, each subsequent postion is the array gets more          object.
  * and more detailed.  For example: en-us-fooblah would be returned as          @param contentLanguages The ContentLanguageList object to be encoded
  * ["en"]["us"]["fooblah"]          in an HTTP Content-Language header.
  * @param subtags Array<String>& array filled in with the root and subtags  
  * @param language String the language to parse  
  * @param separator Char16 the character that separates the various subtags  
  * @return String the root of the language tag  
  */  */
 void parseLanguageSubtags(Array<String> &subtags, String language_tag);      static String buildContentLanguageHeader(
           const ContentLanguageList& contentLanguages);
  
 /** Breaks the language into its parts(subtags), then validates each part  #ifdef PEGASUS_HAS_ICU
  * according to the RFCs.      /**
  * @param s String language to be validated          Converts a locale ID to language tag syntax by replacing the '_'
  * @return Boolean          separators with '-' separators.
           @param localeId The locale ID string to convert to language tag
           syntax.  The conversion is performed on the localeId object
           directly.
           @return The converted String with language tag syntax.
  */  */
 Boolean isValid(String language_tag, Boolean length_check = true);      static String& convertLocaleIdToLanguageTag(String& localeId);
   #endif
  
 /** Checks if the String has all characters in A-Z OR a-z range.      /**
  * @param s String          Returns the default accept languages based on environment settings.
  * @return Boolean          ATTN: What is the behavior?  This is only implemented if MESSAGES and
           ICU are used.
  */  */
 Boolean checkAlpha(CString _str);      static AcceptLanguageList getDefaultAcceptLanguages();
  
 CString replaceSeparator(CString _s, char new_sep = '-');  private:
  
 char findSeparator(CString _str);      /**
           Parses the value portion of an HTTP Accept-Language or Content-Language
           header into individual language elements.  Comments and whitespace are
           removed.
           @param headerElements An array of Strings into which the language
           elements are stored.
           @param languageHeaderValue A String containing the value portion of
           an HTTP Accept-Language or Content-Language header.
           @exception Exception if a syntax error is encountered.
        */
       static void _parseLanguageHeader(
           const String& languageHeaderValue,
           Array<String>& languageElements);
  
 String convertPrivateLanguageTag(String language_tag);      /**
           Parses an AcceptLanguage or ContentLanguage value from a header.
           If a valid AcceptLanguage value is determined to contain a quality
           value, then this quality is validated and returned. Otherwise -1 is
           returned.  It is up to the caller to know in what context this call
           is being made, that is: it is the callers responsibility to know
           whether an AcceptLanguage or a ContentLanguage value is being parsed.
           @param acceptLanguageHeaderElement String to be parsed into a
           language tag and quality value.  The String must not contain comments
           or whitespace.
           @param languageTag String into which the parsed language tag is
           stored.
           @param quality Real32 into which the parsed quality value is stored.
           @exception Exception if a syntax error is encountered.
        */
       static void _parseAcceptLanguageElement(
           const String& acceptLanguageElement,
           String& languageTag,
           Real32& quality);
  
 }; //end LanguageParser      /**
           Fills the first position in the array with the most general part of
           the language String, each subsequent postion is the array gets more
           and more detailed.  For example: en-us-fooblah would be returned as
           ["en"]["us"]["fooblah"]
           @param subtags Array<String>& array filled in with the root and subtags
           @param languageTag String the language to parse
           @return String the root of the language tag
           @exception Exception if a syntax error is encountered.
        */
       static void _parseLanguageSubtags(
           Array<String>& subtags,
           const String& languageTagString);
  
 PEGASUS_NAMESPACE_END      /**
           Checks if a String represents a valid language tag primary subtag.
           A valid primary subtag contains 1 to 8 alphabetic characters.
           @param subtag The subtag String to validate.
           @return True if the String represents a valid language tag primary
           subtag; false otherwise.
        */
       static Boolean _isValidPrimarySubtagSyntax(const String& subtag);
  
 #endif  // PEGASUS_USE_EXPERIMENTAL_INTERFACES      /**
           Checks if a String represents a valid language tag subtag.
           A valid primary subtag contains 1 to 8 alphanumeric characters.
           @param subtag The subtag String to validate.
           @return True if the String represents a valid language tag subtag;
           false otherwise.
        */
       static Boolean _isValidSubtagSyntax(const String& subtag);
   };
   
   PEGASUS_NAMESPACE_END
  
 #endif #endif


Legend:
Removed from v.1.11  
changed lines
  Added in v.1.22

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2