version 1.5.6.1, 2004/03/10 21:22:11
|
version 1.6, 2004/08/10 10:24:01
|
|
|
// | // |
//============================================================================== | //============================================================================== |
// | // |
|
|
// Author: Humberto Rivero (hurivero@us.ibm.com) | // Author: Humberto Rivero (hurivero@us.ibm.com) |
|
|
// | // |
|
|
// Modified By: | // Modified By: |
|
|
// | // |
|
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
|
|
#ifndef Pegasus_LanguageParser_h | #ifndef Pegasus_LanguageParser_h |
|
|
#define Pegasus_LanguageParser_h | #define Pegasus_LanguageParser_h |
| |
|
|
|
|
#include <cstdlib> | #include <cstdlib> |
|
|
#include <cctype> | #include <cctype> |
|
|
#include <Pegasus/Common/Linkage.h> | #include <Pegasus/Common/Linkage.h> |
|
|
#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> |
| |
|
|
#ifdef PEGASUS_USE_EXPERIMENTAL_INTERFACES | #ifdef PEGASUS_USE_EXPERIMENTAL_INTERFACES |
| |
|
|
|
|
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
| |
|
|
|
|
|
|
/** This class parses and validates AcceptLanguage OR ContentLanguage values | /** This class parses and validates AcceptLanguage OR ContentLanguage values |
|
|
* from the respective HTTP headers, and provides various utility functions | * from the respective HTTP headers, and provides various utility functions |
|
|
* to parse and manipulate language information | * to parse 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 | /** This member is used to represent an empty LanguageParser. Using this |
|
|
member avoids construction of an empty LanguageParser | member avoids construction of an empty LanguageParser |
|
|
(e.g., LanguageParser()). | (e.g., LanguageParser()). |
|
|
*/ | */ |
|
|
static const LanguageParser EMPTY; | static const LanguageParser EMPTY; |
| |
|
|
|
|
/** Parses the value portion of either an AcceptLanguage HTTP header or a | /** Parses the value portion of either an AcceptLanguage HTTP header or a |
|
|
* ContentLanguage HTTP header, extracts the individual fields and stores | * ContentLanguage HTTP header, extracts the individual fields and stores |
|
|
* them in an array. | * them in an array. |
|
|
* @param values Array<String>& where the individual fields are stored | * @param values Array<String>& where the individual fields are stored |
|
|
* @param hdr String the value portion of the HTTP Accept/ContentLanguage header | * @param hdr String the value portion of the HTTP Accept/ContentLanguage header |
|
|
*/ | */ |
|
|
void parseHdr(Array<String> &values, String & hdr); | void parseHdr(Array<String> &values, String & hdr); |
| |
|
|
|
|
/** Parses an AcceptLanguage or ContentLanguage value from a header. | /** Parses an AcceptLanguage or ContentLanguage value from a header. |
|
|
* If a valid AcceptLanguage value is determined to contain a quality | * If a valid AcceptLanguage value is determined to contain a quality |
|
|
* value, then this quality once validated is returned. Otherwise -1 is returned. | * value, then this quality once validated is returned. Otherwise -1 is returned. |
|
|
* It is up to the caller to know in what context this call is being made, | * 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 | * that is: it is the callers responsibility to know whether |
|
|
* an AcceptLanguage or a ContentLanguage value is being parsed. | * an AcceptLanguage or a ContentLanguage value is being parsed. |
|
|
* @param language String& where the valid language is stored | * @param language String& where the valid language is stored |
|
|
* @param hdr String the value being parsed and validated | * @param hdr String the value being parsed and validated |
|
|
* @return Real32 if a valid quality found then 1 <=> 0, otherwise 1 | * @return Real32 if a valid quality found then 1 <=> 0, otherwise 1 |
|
|
* @exception throws ??? | * @exception throws ??? |
|
|
*/ | */ |
|
|
Real32 parseAcceptLanguageValue(String &language, String & hdr); | Real32 parseAcceptLanguageValue(String &language, String & hdr); |
| |
|
|
|
|
String parseContentLanguageValue(String & hdr); | String parseContentLanguageValue(String & hdr); |
| |
|
|
|
|
/** | /** |
|
|
* Given a language ex: en-US-xx, | * Given a language ex: en-US-xx, |
|
|
* returns the base of the language "en". | * returns the base of the language "en". |
|
|
* @param language String | * @param language String |
|
|
* @param separator Char16 the character that separates the various subtags | * @param separator Char16 the character that separates the various subtags |
|
|
* @return String base of the language parameter | * @return String base of the language parameter |
|
|
*/ | */ |
|
|
String getLanguage(String & language_tag); | String getLanguage(String & language_tag); |
| |
|
|
|
|
String getCountry(String & language_tag); | String getCountry(String & language_tag); |
| |
|
|
|
|
String getVariant(String & language_tag); | String getVariant(String & language_tag); |
| |
|
|
|
|
private: | private: |
| |
|
|
|
|
/** | /** |
|
|
* Fills the first position in the array with the most general part of | * Fills the first position in the array with the most general part of |
|
|
* the language String, each subsequent postion is the array gets more | * the language String, each subsequent postion is the array gets more |
|
|
* and more detailed. For example: en-us-fooblah would be returned as | * and more detailed. For example: en-us-fooblah would be returned as |
|
|
* ["en"]["us"]["fooblah"] | * ["en"]["us"]["fooblah"] |
|
|
* @param subtags Array<String>& array filled in with the root and subtags | * @param subtags Array<String>& array filled in with the root and subtags |
|
|
* @param language String the language to parse | * @param language String the language to parse |
|
|
* @param separator Char16 the character that separates the various subtags | * @param separator Char16 the character that separates the various subtags |
|
|
* @return String the root of the language tag | * @return String the root of the language tag |
|
|
*/ | */ |
|
|
void parseLanguageSubtags(Array<String> &subtags, String language_tag); | void parseLanguageSubtags(Array<String> &subtags, String language_tag); |
| |
|
|
|
|
/** Breaks the language into its parts(subtags), then validates each part | /** Breaks the language into its parts(subtags), then validates each part |
|
|
* according to the RFCs. | * according to the RFCs. |
|
|
* @param s String language to be validated | * @param s String language to be validated |
|
|
* @return Boolean | * @return Boolean |
|
|
*/ | */ |
|
|
Boolean isValid(String language_tag, Boolean length_check = true); | Boolean isValid(String language_tag, Boolean length_check = true); |
| |
|
|
|
|
/** Checks if the String has all characters in A-Z OR a-z range. | /** Checks if the String has all characters in A-Z OR a-z range. |
|
|
* @param s String | * @param s String |
|
|
* @return Boolean | * @return Boolean |
|
|
*/ | */ |
|
|
Boolean checkAlpha(CString _str); | Boolean checkAlpha(CString _str); |
| |
|
|
|
|
CString replaceSeparator(CString _s, char new_sep = '-'); | CString replaceSeparator(CString _s, char new_sep = '-'); |
| |
|
|
|
|
char findSeparator(CString _str); | char findSeparator(CString _str); |
| |
|
|
|
|
String convertPrivateLanguageTag(String language_tag); | String convertPrivateLanguageTag(String language_tag); |
| |
|
|
|
|
}; //end LanguageParser | }; //end LanguageParser |
| |
|
|
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
| |
|
|
#endif // PEGASUS_USE_EXPERIMENTAL_INTERFACES | #endif // PEGASUS_USE_EXPERIMENTAL_INTERFACES |
| |
|
|
#endif | #endif |
|
|