UniCreateAttrObject
UniCreateAttrObject creates an attribute object that is used to determine character classifications.
Syntax
UniCreateAttrObject (locale_object, AttrName, attr_object)
Parameters
- locale_object (const LocaleObject)
- A locale object created by a call to UniCreateLocaleObject or NULL.
- AttrName (const UniChar *)
- A UniChar string that specifies the attribute names for which an attribute object should be created. Multiple attribute names are specified as a string of separate names.
- attr_object (AttrObject *)
- An address that will receive a pointer to an attribute object upon successful completion of UniCreateAttrObject.
Returns
Return value (int) - returns
- ULS_SUCCESS
- Successful completion; attr_object points to a valid attribute object.
- ULS_UNSUPPORTED
- The attribute name specified in AttrName is not supported by locale_object.
- ULS_NOMEMORY
- Insufficient memory to create the attribute object.
Remarks
UniCreateAttrObject allocates resources associated with an attribute defined in the LC_CTYPE category of the locale indicated by the locale_object argument.
The locale_object argument specifies a locale object handle returned by UniCreateLocaleObject. It should not be a NULL pointer.
The AttrName argument specifies the attribute names for which an attribute object handle should be created. Multiple attribute names are specified as a string of space-separated names.
When UniCreateAttrObject completes without errors, the attr_object argument specifies a valid pointer to an attribute object.
The attribute object pointer should be used in all subsequent calls to UniQueryCharAttr. If the function result is other than ULS_SUCCESS, the contents of the area pointed to by attr_object are undefined.
The following attribute names are the base POSIX attributes. All attribute names which can be specified in UniQueryAttr are allowed. Those attributes which start with underscore (_) or hash (#) may not be combined with other attributes.
- alnum
- True when alpha or digit is true.
- alpha
- True when upper or lower is true, or when none of cntrl, digit, punct, or space is true.
- blank
- True for the space and horizontal tab characters.
- cntrl
- True for any control character; the following attributes must be false: upper, lower, alpha, digit, xdigit, graph, print, and punct.
- digit
- True for the digits 0, 1, 2 3, 4, 5, 6, 7, 8, and 9.
- graph
- True for any character with the print attribute, except the space
- character
- (Code element 0x0020).
- lower
- True for any character that is a lowercase letter and none of cntrl, digit, punct, or space is true.
- True for upper, lower, alpha, digit, xdigit, punct, or any printing character including the space character (code element 0x0020).
- punct
- True for any printing character that is neither the space character (code element 0x0020) nor a character for which alnum is true.
- space
- True for any character that corresponds to a standard white-space character or is one of the set of white-space characters in the locale as indicated by the locale_object argument for which alnum is false. The standard white-space characters are the following: space, form feed, newline, carriage return, horizontal tab, and vertical tab.
- upper
- True for any character that is an uppercase letter and none of cntrl, digit, punct, or space is true.
- xdigit
- true for 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E F, a, b, c, d, e, and f.
Examples
This example shows how to create and use a character attribute object.
#include <stdio.h> #include <unidef.h> int main(void) { LocaleObject locale_object = NULL; AttrObject attr_object = NULL; int result = 0; int rc = ULS_SUCCESS; UniChar uni_char = L'a'; /* Unicode lowercase Latin letter a */ /*****************************************************************/ /* Assumes LANG environment variable set to a valid locale name, */ /* such as fr_FR */ /*****************************************************************/ rc = UniCreateLocaleObject(UNI_UCS_STRING_POINTER, (UniChar *)L"", &locale_object); if (rc != ULS_SUCCESS) { printf("UniCreateLocaleObject error: return code = %u\n", rc); return 1; } /* Create an alphabetic attribute object */ rc = UniCreateAttrObject(locale_object, (UniChar *)L"alpha", &attr_object); if (rc != ULS_SUCCESS) { printf("UniCreateAttrObject error: return code = %u\n", rc); return 1; } /* Make call to determine if character is alphabetic */ result = UniQueryCharAttr(attr_object, uni_char); if (result) printf("UniChar character %04X is alphabetic\n", uni_char); else printf("UniChar character %04X is not alphabetic\n", uni_char); return ULS_SUCCESS; }