• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
TextCodecReplacement()14 TextCodecReplacement::TextCodecReplacement()
15     : m_sentEOF(false)
16 {
17 }
18 
registerEncodingNames(EncodingNameRegistrar registrar)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 
newStreamingTextDecoderReplacement(const TextEncoding &,const void *)34 static PassOwnPtr<TextCodec> newStreamingTextDecoderReplacement(const TextEncoding&, const void*)
35 {
36     return adoptPtr(new TextCodecReplacement);
37 }
38 
registerCodecs(TextCodecRegistrar registrar)39 void TextCodecReplacement::registerCodecs(TextCodecRegistrar registrar)
40 {
41     registrar("replacement", newStreamingTextDecoderReplacement, 0);
42 }
43 
decode(const char *,size_t,FlushBehavior,bool,bool & sawError)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