OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
3 * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com> | 3 * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com> |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 return; | 417 return; |
418 } | 418 } |
419 UCNV_FROM_U_CALLBACK_SUBSTITUTE(context, fromUArgs, codeUnits, length, codeP
oint, reason, err); | 419 UCNV_FROM_U_CALLBACK_SUBSTITUTE(context, fromUArgs, codeUnits, length, codeP
oint, reason, err); |
420 } | 420 } |
421 | 421 |
422 class TextCodecInput { | 422 class TextCodecInput { |
423 public: | 423 public: |
424 TextCodecInput(const TextEncoding& encoding, const UChar* characters, size_t
length) | 424 TextCodecInput(const TextEncoding& encoding, const UChar* characters, size_t
length) |
425 : m_begin(characters) | 425 : m_begin(characters) |
426 , m_end(characters + length) | 426 , m_end(characters + length) |
427 { | 427 { } |
428 if (encoding.hasTrivialDisplayString()) | |
429 return; | |
430 m_buffer.reserveInitialCapacity(length); | |
431 m_buffer.append(characters, length); | |
432 initalizeFromBuffer(encoding); | |
433 } | |
434 | 428 |
435 TextCodecInput(const TextEncoding& encoding, const LChar* characters, size_t
length) | 429 TextCodecInput(const TextEncoding& encoding, const LChar* characters, size_t
length) |
436 { | 430 { |
437 m_buffer.reserveInitialCapacity(length); | 431 m_buffer.reserveInitialCapacity(length); |
438 for (size_t i = 0; i < length; ++i) | 432 for (size_t i = 0; i < length; ++i) |
439 m_buffer.append(characters[i]); | 433 m_buffer.append(characters[i]); |
440 initalizeFromBuffer(encoding); | 434 m_begin = m_buffer.data(); |
| 435 m_end = m_begin + m_buffer.size(); |
441 } | 436 } |
442 | 437 |
443 const UChar* begin() const { return m_begin; } | 438 const UChar* begin() const { return m_begin; } |
444 const UChar* end() const { return m_end; } | 439 const UChar* end() const { return m_end; } |
445 | 440 |
446 private: | 441 private: |
447 void initalizeFromBuffer(const TextEncoding& encoding) | |
448 { | |
449 // FIXME: We should see if there is "force ASCII range" mode in ICU; | |
450 // until then, we change the backslash into a yen sign. | |
451 // Encoding will change the yen sign back into a backslash. | |
452 encoding.displayBuffer(m_buffer.data(), m_buffer.size()); | |
453 m_begin = m_buffer.data(); | |
454 m_end = m_begin + m_buffer.size(); | |
455 } | |
456 | |
457 const UChar* m_begin; | 442 const UChar* m_begin; |
458 const UChar* m_end; | 443 const UChar* m_end; |
459 Vector<UChar> m_buffer; | 444 Vector<UChar> m_buffer; |
460 }; | 445 }; |
461 | 446 |
462 CString TextCodecICU::encodeInternal(const TextCodecInput& input, UnencodableHan
dling handling) | 447 CString TextCodecICU::encodeInternal(const TextCodecInput& input, UnencodableHan
dling handling) |
463 { | 448 { |
464 const UChar* source = input.begin(); | 449 const UChar* source = input.begin(); |
465 const UChar* end = input.end(); | 450 const UChar* end = input.end(); |
466 | 451 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
519 { | 504 { |
520 return encodeCommon(characters, length, handling); | 505 return encodeCommon(characters, length, handling); |
521 } | 506 } |
522 | 507 |
523 CString TextCodecICU::encode(const LChar* characters, size_t length, Unencodable
Handling handling) | 508 CString TextCodecICU::encode(const LChar* characters, size_t length, Unencodable
Handling handling) |
524 { | 509 { |
525 return encodeCommon(characters, length, handling); | 510 return encodeCommon(characters, length, handling); |
526 } | 511 } |
527 | 512 |
528 } // namespace WTF | 513 } // namespace WTF |
OLD | NEW |