ReactOS 0.4.15-dev-7998-gdb93cb1
xsltlocale.h File Reference
#include <libxml/xmlstring.h>
#include "xsltexports.h"
Include dependency graph for xsltlocale.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define XSLT_LOCALE_NONE
 

Typedefs

typedef voidxsltLocale
 
typedef xmlChar xsltLocaleChar
 

Functions

XSLTPUBFUN xsltLocale XSLTCALL xsltNewLocale (const xmlChar *langName)
 
XSLTPUBFUN void XSLTCALL xsltFreeLocale (xsltLocale locale)
 
XSLTPUBFUN xsltLocaleChar *XSLTCALL xsltStrxfrm (xsltLocale locale, const xmlChar *string)
 
XSLTPUBFUN int XSLTCALL xsltLocaleStrcmp (xsltLocale locale, const xsltLocaleChar *str1, const xsltLocaleChar *str2)
 
XSLTPUBFUN void XSLTCALL xsltFreeLocales (void)
 

Macro Definition Documentation

◆ XSLT_LOCALE_NONE

#define XSLT_LOCALE_NONE

Definition at line 61 of file xsltlocale.h.

Typedef Documentation

◆ xsltLocale

typedef void* xsltLocale

Definition at line 63 of file xsltlocale.h.

◆ xsltLocaleChar

Definition at line 64 of file xsltlocale.h.

Function Documentation

◆ xsltFreeLocale()

XSLTPUBFUN void XSLTCALL xsltFreeLocale ( xsltLocale  locale)

xsltFreeLocale: @locale: the locale to free

Frees a locale created with xsltNewLocale

Definition at line 342 of file xsltlocale.c.

342 {
343#ifdef XSLT_LOCALE_POSIX
344 if (locale != NULL)
345 freelocale(locale);
346#endif
347}
Definition: _locale.h:75
#define NULL
Definition: types.h:112

Referenced by xsltDefaultSortFunction(), and xsltFreeStylePreComp().

◆ xsltFreeLocales()

XSLTPUBFUN void XSLTCALL xsltFreeLocales ( void  )

xsltFreeLocales:

Cleanup function for the locale support on shutdown

Definition at line 63 of file xsltlocale.c.

63 {
64#ifdef XSLT_LOCALE_WINAPI
65 xmlRMutexLock(xsltLocaleMutex);
66 xmlFree(xsltLocaleList);
67 xsltLocaleList = NULL;
68 xmlRMutexUnlock(xsltLocaleMutex);
69#endif
70}
XMLPUBVAR xmlFreeFunc xmlFree
Definition: globals.h:251
XMLPUBFUN void XMLCALL xmlRMutexLock(xmlRMutexPtr tok)
Definition: threads.c:333
XMLPUBFUN void XMLCALL xmlRMutexUnlock(xmlRMutexPtr tok)
Definition: threads.c:377

Referenced by xsltCleanupGlobals().

◆ xsltLocaleStrcmp()

XSLTPUBFUN int XSLTCALL xsltLocaleStrcmp ( xsltLocale  locale,
const xsltLocaleChar str1,
const xsltLocaleChar str2 
)

xsltLocaleStrcmp: @locale: a locale identifier @str1: a string transformed with xsltStrxfrm @str2: a string transformed with xsltStrxfrm

Compares two strings transformed with xsltStrxfrm

Returns a value < 0 if str1 sorts before str2, a value > 0 if str1 sorts after str2, 0 if str1 and str2 are equal wrt sorting

Definition at line 423 of file xsltlocale.c.

423 {
424 (void)locale;
425#ifdef XSLT_LOCALE_WINAPI
426{
427 int ret;
428 if (str1 == str2) return(0);
429 if (str1 == NULL) return(-1);
430 if (str2 == NULL) return(1);
431 ret = CompareStringW(locale, 0, str1, -1, str2, -1);
432 if (ret == 0) {
433 xsltTransformError(NULL, NULL, NULL, "xsltLocaleStrcmp : CompareStringW fail\n");
434 return(0);
435 }
436 return(ret - 2);
437}
438#else
439 return(xmlStrcmp(str1, str2));
440#endif
441}
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
Definition: lang.c:2671
int ret
XMLPUBFUN int XMLCALL xmlStrcmp(const xmlChar *str1, const xmlChar *str2)
Definition: xmlstring.c:133
void xsltTransformError(xsltTransformContextPtr ctxt, xsltStylesheetPtr style, xmlNodePtr node, const char *msg,...)
Definition: xsltutils.c:678

Referenced by xsltDefaultSortFunction().

◆ xsltNewLocale()

XSLTPUBFUN xsltLocale XSLTCALL xsltNewLocale ( const xmlChar languageTag)

xsltNewLocale: @languageTag: RFC 3066 language tag

Creates a new locale of an opaque system dependent type based on the language tag.

Returns the locale or NULL on error or if no matching locale was found

Definition at line 82 of file xsltlocale.c.

82 {
83#ifdef XSLT_LOCALE_POSIX
85 char localeName[XSLTMAX_LANGTAGLEN+6]; /* 6 chars for ".utf8\0" */
86 const xmlChar *p = languageTag;
87 const char *region = NULL;
88 char *q = localeName;
89 int i, llen;
90
91 /* Convert something like "pt-br" to "pt_BR.utf8" */
92
93 if (languageTag == NULL)
94 return(NULL);
95
96 for (i=0; i<XSLTMAX_ISO639LANGLEN && ISALPHA(*p); ++i)
97 *q++ = TOLOWER(*p++);
98
99 if (i == 0)
100 return(NULL);
101
102 llen = i;
103
104 if (*p) {
105 if (*p++ != '-')
106 return(NULL);
107 *q++ = '_';
108
109 for (i=0; i<XSLTMAX_ISO3166CNTRYLEN && ISALPHA(*p); ++i)
110 *q++ = TOUPPER(*p++);
111
112 if (i == 0 || *p)
113 return(NULL);
114
115 memcpy(q, ".utf8", 6);
116 locale = newlocale(LC_COLLATE_MASK, localeName, NULL);
117 if (locale != NULL)
118 return(locale);
119
120 /* Continue without using country code */
121
122 q = localeName + llen;
123 }
124
125 /* Try locale without territory, e.g. for Esperanto (eo) */
126
127 memcpy(q, ".utf8", 6);
128 locale = newlocale(LC_COLLATE_MASK, localeName, NULL);
129 if (locale != NULL)
130 return(locale);
131
132 /* Try to find most common country for language */
133
134 if (llen != 2)
135 return(NULL);
136
137 region = (char *)xsltDefaultRegion((xmlChar *)localeName);
138 if (region == NULL)
139 return(NULL);
140
141 q = localeName + llen;
142 *q++ = '_';
143 *q++ = region[0];
144 *q++ = region[1];
145 memcpy(q, ".utf8", 6);
146 locale = newlocale(LC_COLLATE_MASK, localeName, NULL);
147
148 return(locale);
149#endif
150
151#ifdef XSLT_LOCALE_WINAPI
152{
154 xmlChar localeName[XSLTMAX_LANGTAGLEN+1];
155 xmlChar *q = localeName;
156 const xmlChar *p = languageTag;
157 int i, llen;
158 const xmlChar *region = NULL;
159
160 if (languageTag == NULL) goto end;
161
162 xsltEnumSupportedLocales();
163
164 for (i=0; i<XSLTMAX_ISO639LANGLEN && ISALPHA(*p); ++i)
165 *q++ = TOLOWER(*p++);
166 if (i == 0) goto end;
167
168 llen = i;
169 *q++ = '-';
170 if (*p) { /*if country tag is given*/
171 if (*p++ != '-') goto end;
172
173 for (i=0; i<XSLTMAX_ISO3166CNTRYLEN && ISALPHA(*p); ++i)
174 *q++ = TOUPPER(*p++);
175 if (i == 0 || *p) goto end;
176
177 *q = '\0';
178 locale = xslt_locale_WINAPI(localeName);
179 if (locale != (xsltLocale)0) goto end;
180 }
181 /* Try to find most common country for language */
182 region = xsltDefaultRegion(localeName);
183 if (region == NULL) goto end;
184
185 strcpy((char *) localeName + llen + 1, (char *) region);
186 locale = xslt_locale_WINAPI(localeName);
187end:
188 return(locale);
189}
190#endif
191
192#ifdef XSLT_LOCALE_NONE
193 return(NULL);
194#endif
195}
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
GLuint GLuint end
Definition: gl.h:1545
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
GLfloat GLfloat p
Definition: glext.h:8902
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
unsigned char xmlChar
Definition: xmlstring.h:28
static const xmlChar * xsltDefaultRegion(const xmlChar *localeName)
Definition: xsltlocale.c:198
#define XSLTMAX_LANGTAGLEN
Definition: xsltlocale.c:25
#define XSLTMAX_ISO3166CNTRYLEN
Definition: xsltlocale.c:23
#define XSLTMAX_ISO639LANGLEN
Definition: xsltlocale.c:22
#define TOUPPER(c)
Definition: xsltlocale.c:17
#define TOLOWER(c)
Definition: xsltlocale.c:18
#define ISALPHA(c)
Definition: xsltlocale.c:19
void * xsltLocale
Definition: xsltlocale.h:63

Referenced by xsltDefaultSortFunction(), and xsltSortComp().

◆ xsltStrxfrm()

XSLTPUBFUN xsltLocaleChar *XSLTCALL xsltStrxfrm ( xsltLocale  locale,
const xmlChar string 
)

xsltStrxfrm: @locale: locale created with xsltNewLocale @string: UTF-8 string to transform

Transforms a string according to locale. The transformed string must then be compared with xsltLocaleStrcmp and freed with xmlFree.

Returns the transformed string or NULL on error

Definition at line 360 of file xsltlocale.c.

361{
362#ifdef XSLT_LOCALE_NONE
363 return(NULL);
364#else
365 size_t xstrlen, r;
366 xsltLocaleChar *xstr;
367
368#ifdef XSLT_LOCALE_POSIX
369 xstrlen = strxfrm_l(NULL, (const char *)string, 0, locale) + 1;
370 xstr = (xsltLocaleChar *) xmlMalloc(xstrlen);
371 if (xstr == NULL) {
373 "xsltStrxfrm : out of memory error\n");
374 return(NULL);
375 }
376
377 r = strxfrm_l((char *)xstr, (const char *)string, xstrlen, locale);
378#endif
379
380#ifdef XSLT_LOCALE_WINAPI
381 xstrlen = MultiByteToWideChar(CP_UTF8, 0, (char *) string, -1, NULL, 0);
382 if (xstrlen == 0) {
383 xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : MultiByteToWideChar check failed\n");
384 return(NULL);
385 }
386 xstr = (xsltLocaleChar*) xmlMalloc(xstrlen * sizeof(xsltLocaleChar));
387 if (xstr == NULL) {
388 xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : out of memory\n");
389 return(NULL);
390 }
391 r = MultiByteToWideChar(CP_UTF8, 0, (char *) string, -1, xstr, xstrlen);
392 if (r == 0) {
393 xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : MultiByteToWideChar failed\n");
394 xmlFree(xstr);
395 return(NULL);
396 }
397 return(xstr);
398#endif /* XSLT_LOCALE_WINAPI */
399
400 if (r >= xstrlen) {
401 xsltTransformError(NULL, NULL, NULL, "xsltStrxfrm : strxfrm failed\n");
402 xmlFree(xstr);
403 return(NULL);
404 }
405
406 return(xstr);
407#endif /* XSLT_LOCALE_NONE */
408}
#define MultiByteToWideChar
Definition: compat.h:110
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define CP_UTF8
Definition: nls.h:20
XMLPUBVAR xmlMallocFunc xmlMalloc
Definition: globals.h:248
xmlChar xsltLocaleChar
Definition: xsltlocale.h:64

Referenced by xsltComputeSortResultInternal().