@@ -63,12 +63,37 @@ static char alpha_lower_list[] = "abcdefghijklmnopqrstuvwxyz";
63
63
static xsltFormatToken default_token ;
64
64
65
65
/*
66
- * **** Start temp insert ****
66
+ * Helper functions copied from libxml2
67
+ */
68
+
69
+ /**
70
+ * xsltCopyCharMultiByte:
71
+ * @out: pointer to an array of xmlChar
72
+ * @val: the char value
67
73
*
68
- * The following routine xsltUTF8Charcmp will be replaced with calls to
69
- * the corresponding libxml routine at a later date (when other
70
- * inter-library dependencies require it).
74
+ * append the char value in the array
75
+ *
76
+ * Returns the number of xmlChar written
71
77
*/
78
+ static int
79
+ xsltCopyCharMultiByte (xmlChar * out , int val ) {
80
+ if ((out == NULL ) || (val < 0 )) return (0 );
81
+ if (val >= 0x80 ) {
82
+ xmlChar * savedout = out ;
83
+ int bits ;
84
+ if (val < 0x800 ) { * out ++ = (val >> 6 ) | 0xC0 ; bits = 0 ; }
85
+ else if (val < 0x10000 ) { * out ++ = (val >> 12 ) | 0xE0 ; bits = 6 ;}
86
+ else if (val < 0x110000 ) { * out ++ = (val >> 18 ) | 0xF0 ; bits = 12 ; }
87
+ else {
88
+ return (0 );
89
+ }
90
+ for ( ; bits >= 0 ; bits -= 6 )
91
+ * out ++ = ((val >> bits ) & 0x3F ) | 0x80 ;
92
+ return (out - savedout );
93
+ }
94
+ * out = val ;
95
+ return 1 ;
96
+ }
72
97
73
98
/**
74
99
* xsltUTF8Charcmp
@@ -98,7 +123,6 @@ xsltIsLetterDigit(int val) {
98
123
xmlIsDigitQ (val );
99
124
}
100
125
101
- /***** Stop temp insert *****/
102
126
/************************************************************************
103
127
* *
104
128
* Utility functions *
@@ -174,7 +198,7 @@ xsltNumberFormatDecimal(xmlBufferPtr buffer,
174
198
break ;
175
199
}
176
200
pointer -= groupingCharacterLen ;
177
- xmlCopyCharMultiByte (pointer , groupingCharacter );
201
+ xsltCopyCharMultiByte (pointer , groupingCharacter );
178
202
}
179
203
180
204
val = digit_zero + (int )fmod (number , 10.0 );
@@ -192,7 +216,7 @@ xsltNumberFormatDecimal(xmlBufferPtr buffer,
192
216
* it is. So, we generate it into the buffer temp_char, then
193
217
* copy from there into temp_string.
194
218
*/
195
- len = xmlCopyCharMultiByte (temp_char , val );
219
+ len = xsltCopyCharMultiByte (temp_char , val );
196
220
if ( (pointer - len ) < temp_string ) {
197
221
i = -1 ;
198
222
break ;
0 commit comments