@@ -243,26 +243,25 @@
243 243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int n = blob_size(pContent);
244 244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int j, c, flags = LOOK_NONE; /* Assume UTF-8 text, prove otherwise */
245 245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
246 246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n==0 ) return flags; /* Empty file -> text */
247 247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c = *z;
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c==0 ){
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j = (c!='\n');
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !j ){
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ flags |= (LOOK_LF | LOOK_LONE_LF); /* Found LF as first char */
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( c==0 ){
249 252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_NUL; /* NUL character in a file -> binary */
250 253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( c=='\r' ){
251 254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_CR;
252 255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n<=1 || z[1]!='\n' ){
253 256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
254 257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
255 258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- j = (c!='\n');
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !j ) flags |= (LOOK_LF | LOOK_LONE_LF); /* Found LF as first char */
258 259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( !(flags&stopFlags) && --n>0 ){
259 260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int c2 = c;
260 261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c = *++z; ++j;
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c==0 ){
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- flags |= LOOK_NUL; /* NUL character in a file -> binary */
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( c=='\n' ){
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c=='\n' ){
264 263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_LF;
265 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( c2=='\r' ){
266 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= (LOOK_CR | LOOK_CRLF); /* Found LF preceded by CR */
267 266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
268 267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_LONE_LF;
@@ -269,10 +268,12 @@
269 268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
270 269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( j>LENGTH_MASK ){
271 270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_LONG; /* Very long line -> binary */
272 271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
273 272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = 0;
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( c==0 ){
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ flags |= LOOK_NUL; /* NUL character in a file -> binary */
274 275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( c=='\r' ){
275 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_CR;
276 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n<=1 || z[1]!='\n' ){
277 278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
278 279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -357,32 +358,31 @@
357 358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
358 359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c = *z;
359 360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bReverse ){
360 361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c = UTF16_SWAP(c);
361 362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c==0 ){
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j = (c!='\n');
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !j ){
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ flags |= (LOOK_LF | LOOK_LONE_LF); /* Found LF as first char */
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( c==0 ){
363 367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_NUL; /* NUL character in a file -> binary */
364 368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( c=='\r' ){
365 369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_CR;
366 370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n<=sizeof(WCHAR_T) || UTF16_SWAP_IF(bReverse, z[1])!='\n' ){
367 371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
368 372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
369 373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- j = (c!='\n');
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !j ) flags |= (LOOK_LF | LOOK_LONE_LF); /* Found LF as first char */
372 374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( 1 ){
373 375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int c2 = c;
374 376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n -= sizeof(WCHAR_T);
375 377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (flags&stopFlags) || n<sizeof(WCHAR_T) ) break;
376 378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c = *++z;
377 379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bReverse ){
378 380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c = UTF16_SWAP(c);
379 381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
380 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
++j;
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c==0 ){
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- flags |= LOOK_NUL; /* NUL character in a file -> binary */
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( c=='\n' ){
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c=='\n' ){
384 384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_LF;
385 385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( c2=='\r' ){
386 386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= (LOOK_CR | LOOK_CRLF); /* Found LF preceded by CR */
387 387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
388 388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_LONE_LF;
@@ -389,13 +389,15 @@
389 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
390 390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( j>UTF16_LENGTH_MASK ){
391 391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_LONG; /* Very long line -> binary */
392 392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
393 393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = 0;
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( c==0 ){
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ flags |= LOOK_NUL; /* NUL character in a file -> binary */
394 396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( c=='\r' ){
395 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_CR;
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n<=sizeof(WCHAR_T) || UTF16_SWAP_IF(bReverse, z[1])!='\n' ){
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n<2*sizeof(WCHAR_T) || UTF16_SWAP_IF(bReverse, z[1])!='\n' ){
397 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= LOOK_LONE_CR; /* More chars, next char is not LF */
398 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
399 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
400 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
401 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n ){
@@ -436,28 +438,35 @@
436 438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
437 439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function returns non-zero if the blob starts with a UTF-16
438 440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** byte-order-mark (BOM), either in the endianness of the machine
439 441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or in reversed byte order. The UTF-32 BOM is ruled out by checking
440 442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if the UTF-16 BOM is not immediately followed by (utf16) 0.
441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pnByte and pbReverse are only set when the function returns 1.
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pnByte is only set when the function returns 1.
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pbReverse is always set, even when no BOM is found. Without BOM,
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it is set to 1 on little-endian and 0 on big-endian platforms. See
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** clause D98 of conformance (section 3.10) of the Unicode standard.
442 448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
443 449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int starts_with_utf16_bom(
444 450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const Blob *pContent, /* IN: Blob content to perform BOM detection on. */
445 451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pnByte, /* OUT: The number of bytes used for the BOM. */
446 452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pbReverse /* OUT: Non-zero for BOM in reverse byte-order. */
447 453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
448 454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const unsigned short *z = (unsigned short *)blob_buffer(pContent);
449 455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bomSize = sizeof(unsigned short);
450 456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int size = blob_size(pContent);
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const int one = 1;
451 458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( size<bomSize ) return 0; /* No: cannot read BOM. */
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( size>=(2*bomSize) && z[1]==0 ) return 0; /* No: possible UTF-32. */
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z[0]==0xfffe ){
459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( size<bomSize ) goto noBom; /* No: cannot read BOM. */
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( size>=(2*bomSize) && z[1]==0 ) goto noBom; /* No: possible UTF-32. */
461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z[0]==0xfeff ){
462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pbReverse ) *pbReverse = 0;
463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( z[0]==0xfffe ){
455 464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pbReverse ) *pbReverse = 1;
456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( z[0]==0xfeff ){
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pbReverse ) *pbReverse = 0;
458 465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ noBom:
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pbReverse ) *pbReverse = *(char *) &one;
459 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0; /* No: UTF-16 byte-order-mark not found. */
460 469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
461 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pnByte ) *pnByte = bomSize;
462 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1; /* Yes. */
463 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
464 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!