1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.util;
16
17 import java.nio.ByteBuffer;
18 import java.nio.CharBuffer;
19 import java.nio.charset.Charset;
20 import java.nio.charset.CharsetDecoder;
21 import java.nio.charset.CharsetEncoder;
22 import java.nio.charset.CoderResult;
23 import java.nio.charset.StandardCharsets;
24
25
26
27
28
29
30 public final class XUserDefinedCharset extends Charset {
31
32
33 public static final String NAME = "x-user-defined";
34
35
36 public static final XUserDefinedCharset INSTANCE = new XUserDefinedCharset();
37
38 private XUserDefinedCharset() {
39 super(NAME, new String[0]);
40 }
41
42 @Override
43 public boolean contains(final Charset charset) {
44 return StandardCharsets.US_ASCII.equals(charset);
45 }
46
47 @Override
48 public CharsetDecoder newDecoder() {
49 return new XUserDefinedDecoder();
50 }
51
52 @Override
53 public CharsetEncoder newEncoder() {
54
55 return null;
56 }
57
58 private static final class XUserDefinedDecoder extends CharsetDecoder {
59 XUserDefinedDecoder() {
60 super(XUserDefinedCharset.INSTANCE, 1, 1);
61 }
62
63 @Override
64 protected CoderResult decodeLoop(final ByteBuffer in, final CharBuffer out) {
65 while (true) {
66 if (!in.hasRemaining()) {
67 return CoderResult.UNDERFLOW;
68 }
69 if (!out.hasRemaining()) {
70 return CoderResult.OVERFLOW;
71 }
72 final byte b = in.get();
73 if (b >= 0) {
74 out.append((char) b);
75 }
76 else {
77 out.append((char) (0xF700 + (b & 0xFF)));
78 }
79 }
80 }
81 }
82 }