File: XmlEntityDecl.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 (149 lines) | stat: -rw-r--r-- 4,008 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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package nokogiri;

import static nokogiri.internals.NokogiriHelpers.getNokogiriClass;

import org.jruby.Ruby;
import org.jruby.RubyClass;
import org.jruby.RubyFixnum;
import org.jruby.anno.JRubyClass;
import org.jruby.anno.JRubyMethod;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;
import org.w3c.dom.Node;

/**
 * DTD entity declaration.
 *
 * @author Patrick Mahoney <pat@polycrystal.org>
 * @author Yoko Harada <yokolet@gmail.com>
 */
@JRubyClass(name = "Nokogiri::XML::EntityDecl", parent = "Nokogiri::XML::Node")
public class XmlEntityDecl extends XmlNode
{
  public static final int INTERNAL_GENERAL = 1;
  public static final int EXTERNAL_GENERAL_PARSED = 2;
  public static final int EXTERNAL_GENERAL_UNPARSED  = 3;
  public static final int INTERNAL_PARAMETER = 4;
  public static final int EXTERNAL_PARAMETER = 5;
  public static final int INTERNAL_PREDEFINED = 6;

  private IRubyObject entityType;
  private IRubyObject name;
  private IRubyObject external_id;
  private IRubyObject system_id;
  private IRubyObject content;

  XmlEntityDecl(Ruby runtime, RubyClass klass)
  {
    super(runtime, klass);
  }

  /**
   * Initialize based on an entityDecl node from a NekoDTD parsed DTD.
   */
  public
  XmlEntityDecl(Ruby runtime, RubyClass klass, Node entDeclNode)
  {
    super(runtime, klass, entDeclNode);
    entityType = RubyFixnum.newFixnum(runtime, XmlEntityDecl.INTERNAL_GENERAL);
    name = external_id = system_id = content = runtime.getNil();
  }

  public
  XmlEntityDecl(Ruby runtime, RubyClass klass, Node entDeclNode, IRubyObject[] argv)
  {
    super(runtime, klass, entDeclNode);
    name = argv[0];
    entityType = RubyFixnum.newFixnum(runtime, XmlEntityDecl.INTERNAL_GENERAL);
    external_id = system_id = content = runtime.getNil();

    if (argv.length > 1) { entityType = argv[1]; }
    if (argv.length > 4) {
      external_id = argv[2];
      system_id = argv[3];
      content = argv[4];
    }
  }

  static XmlEntityDecl
  create(ThreadContext context, Node entDeclNode)
  {
    return new XmlEntityDecl(context.runtime,
                             getNokogiriClass(context.runtime, "Nokogiri::XML::EntityDecl"),
                             entDeclNode
                            );
  }

  // when entity is created by create_entity method
  static XmlEntityDecl
  create(ThreadContext context, Node entDeclNode, IRubyObject... argv)
  {
    return new XmlEntityDecl(context.runtime,
                             getNokogiriClass(context.runtime, "Nokogiri::XML::EntityDecl"),
                             entDeclNode, argv
                            );
  }

  /**
   * Returns the local part of the element name.
   */
  @Override
  @JRubyMethod
  public IRubyObject
  node_name(ThreadContext context)
  {
    IRubyObject value = getAttribute(context, "name");
    if (value.isNil()) { value = name; }
    return value;
  }

  @Override
  @JRubyMethod(name = "node_name=")
  public IRubyObject
  node_name_set(ThreadContext context, IRubyObject name)
  {
    throw context.runtime.newRuntimeError("cannot change name of DTD decl");
  }

  @JRubyMethod
  public IRubyObject
  content(ThreadContext context)
  {
    IRubyObject value = getAttribute(context, "value");
    if (value.isNil()) { value = content; }
    return value;
  }

  // TODO: what is content vs. original_content?
  @JRubyMethod
  public IRubyObject
  original_content(ThreadContext context)
  {
    return getAttribute(context, "value");
  }

  @JRubyMethod
  public IRubyObject
  system_id(ThreadContext context)
  {
    IRubyObject value = getAttribute(context, "sysid");
    if (value.isNil()) { value = system_id; }
    return value;
  }

  @JRubyMethod
  public IRubyObject
  external_id(ThreadContext context)
  {
    IRubyObject value = getAttribute(context, "pubid");
    if (value.isNil()) { value = external_id; }
    return value;
  }

  @JRubyMethod
  public IRubyObject
  entity_type(ThreadContext context)
  {
    return entityType;
  }
}