Home | History | Annotate | Download | only in text
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "config.h"
      6 #include "wtf/text/TextCodecReplacement.h"
      7 
      8 #include "wtf/PassOwnPtr.h"
      9 #include "wtf/text/WTFString.h"
     10 #include "wtf/unicode/CharacterNames.h"
     11 
     12 namespace WTF {
     13 
     14 TextCodecReplacement::TextCodecReplacement()
     15     : m_sentEOF(false)
     16 {
     17 }
     18 
     19 void TextCodecReplacement::registerEncodingNames(EncodingNameRegistrar registrar)
     20 {
     21     // The 'replacement' label itself should not be referenceable by
     22     // resources or script - it's a specification convenience - but much of
     23     // the wtf/text API asserts that an encoding name is a label for itself.
     24     // This is handled in TextEncoding by marking it as not valid.
     25     registrar("replacement", "replacement");
     26 
     27     registrar("csiso2022kr", "replacement");
     28     registrar("hz-gb-2312", "replacement");
     29     registrar("iso-2022-cn", "replacement");
     30     registrar("iso-2022-cn-ext", "replacement");
     31     registrar("iso-2022-kr", "replacement");
     32 }
     33 
     34 static PassOwnPtr<TextCodec> newStreamingTextDecoderReplacement(const TextEncoding&, const void*)
     35 {
     36     return adoptPtr(new TextCodecReplacement);
     37 }
     38 
     39 void TextCodecReplacement::registerCodecs(TextCodecRegistrar registrar)
     40 {
     41     registrar("replacement", newStreamingTextDecoderReplacement, 0);
     42 }
     43 
     44 String TextCodecReplacement::decode(const char*, size_t, FlushBehavior, bool, bool& sawError)
     45 {
     46     sawError = true;
     47     if (m_sentEOF)
     48         return String();
     49 
     50     m_sentEOF = true;
     51     return String(&Unicode::replacementCharacter, 1);
     52 }
     53 
     54 } // namespace WTF
     55