File: EncodingHandler.java

package info (click to toggle)
ruby-nokogiri 1.13.10%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 7,416 kB
  • sloc: ansic: 38,198; xml: 28,086; ruby: 22,271; java: 15,517; cpp: 7,037; yacc: 244; sh: 148; makefile: 136
file content (111 lines) | stat: -rw-r--r-- 2,608 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package nokogiri;

import static nokogiri.internals.NokogiriHelpers.getNokogiriClass;

import java.util.HashMap;

import org.jruby.Ruby;
import org.jruby.RubyClass;
import org.jruby.RubyObject;
import org.jruby.anno.JRubyClass;
import org.jruby.anno.JRubyMethod;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;

/**
 * Stub class to satisfy unit tests.  I'm not sure where this class is
 * meant to be used. As coded it won't really interact with any other
 * classes and will have no effect on character encodings reported by
 * documents being parsed.
 *
 * @author Patrick Mahoney <pat@polycrstal.org>
 */
@JRubyClass(name = "Nokogiri::EncodingHandler")
public class EncodingHandler extends RubyObject
{
  protected static HashMap<String, String> map = new HashMap<String, String>();
  static
  {
    addInitial();
  }

  protected String name;

  protected static void
  addInitial()
  {
    map.put("UTF-8", "UTF-8");
  }

  public
  EncodingHandler(Ruby ruby, RubyClass klass, String value)
  {
    super(ruby, klass);
    name = value;
  }

  @JRubyMethod(name = "[]", meta = true)
  public static IRubyObject
  get(ThreadContext context,
      IRubyObject _klass,
      IRubyObject keyObj)
  {
    Ruby ruby = context.getRuntime();
    String key = keyObj.toString();
    String value = map.get(key);
    if (value == null) {
      return ruby.getNil();
    }

    return new EncodingHandler(
             ruby,
             getNokogiriClass(ruby, "Nokogiri::EncodingHandler"),
             value);
  }

  @JRubyMethod(meta = true)
  public static IRubyObject
  delete (ThreadContext context,
          IRubyObject _klass,
          IRubyObject keyObj)
  {
    String key = keyObj.toString();
    String value = map.remove(key);
    if (value == null) {
      return context.getRuntime().getNil();
    }
    return context.getRuntime().newString(value);
  }

  @JRubyMethod(name = "clear_aliases!", meta = true)
  public static IRubyObject
  clear_aliases(ThreadContext context,
                IRubyObject _klass)
  {
    map.clear();
    addInitial();
    return context.getRuntime().getNil();
  }

  @JRubyMethod(meta = true)
  public static IRubyObject
  alias(ThreadContext context,
        IRubyObject _klass,
        IRubyObject orig,
        IRubyObject alias)
  {
    String value = map.get(orig.toString());
    if (value != null) {
      map.put(alias.toString(), value);
    }

    return context.getRuntime().getNil();
  }

  @JRubyMethod
  public IRubyObject
  name(ThreadContext context)
  {
    return context.getRuntime().newString(name);
  }
}