summaryrefslogtreecommitdiff
path: root/doc/classes/JSON/Ext/Parser.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/classes/JSON/Ext/Parser.html')
-rw-r--r--doc/classes/JSON/Ext/Parser.html488
1 files changed, 488 insertions, 0 deletions
diff --git a/doc/classes/JSON/Ext/Parser.html b/doc/classes/JSON/Ext/Parser.html
new file mode 100644
index 0000000..2c4512b
--- /dev/null
+++ b/doc/classes/JSON/Ext/Parser.html
@@ -0,0 +1,488 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>JSON::Ext::Parser</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <link rel="stylesheet" href="../../../css/reset.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="../../../css/main.css" type="text/css" media="screen" />
+ <script src="../../../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
+ <script src="../../../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
+ <script src="../../../js/main.js" type="text/javascript" charset="utf-8"></script>
+</head>
+
+<body>
+ <div class="banner">
+ <h1>
+ <span class="type">Class</span>
+ JSON::Ext::Parser
+
+ <span class="parent">&lt;
+
+ <a href="../../Object.html">Object</a>
+
+ </span>
+
+ </h1>
+ <ul class="files">
+
+ <li><a href="../../../files/ext/json/ext/parser/parser_c.html">ext/json/ext/parser/parser.c</a></li>
+
+ </ul>
+ </div>
+ <div id="bodyContent">
+ <div id="content">
+
+ <div class="description">
+ <p>
+This is the <a href="../../JSON.html">JSON</a> parser implemented as a C
+extension. It can be configured to be used by setting
+</p>
+<pre>
+ JSON.parser = JSON::Ext::Parser
+</pre>
+<p>
+with the method parser= in <a href="../../JSON.html">JSON</a>.
+</p>
+
+ </div>
+
+
+
+
+
+
+
+
+
+ <div class="sectiontitle">Methods</div>
+ <dl class="methods">
+
+ <dt>N</dt>
+ <dd>
+ <ul>
+
+ <li><a href="#method-c-new">new</a></li>
+
+ </ul>
+ </dd>
+
+ <dt>P</dt>
+ <dd>
+ <ul>
+
+ <li><a href="#method-i-parse">parse</a></li>
+
+ </ul>
+ </dd>
+
+ <dt>S</dt>
+ <dd>
+ <ul>
+
+ <li><a href="#method-i-source">source</a></li>
+
+ </ul>
+ </dd>
+
+ </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <div class="sectiontitle">Class Public methods</div>
+
+ <div class="method">
+ <div class="title" id="method-c-new">
+
+ <a name="method-c-new"></a><b> new(source, opts => {})
+</b>
+
+ </div>
+
+ <div class="description">
+ <p>
+Creates a new <a href="Parser.html">JSON::Ext::Parser</a> instance for the
+string <em>source</em>.
+</p>
+<p>
+Creates a new <a href="Parser.html">JSON::Ext::Parser</a> instance for the
+string <em>source</em>.
+</p>
+<p>
+It will be configured by the <em>opts</em> hash. <em>opts</em> can have the
+following keys:
+</p>
+<p>
+<em>opts</em> can have the following keys:
+</p>
+<ul>
+<li><p>
+<b>max_nesting</b>: The maximum depth of nesting allowed in the parsed data
+structures. Disable depth checking with :max_nesting => false|nil|0, it
+defaults to 19.
+</p>
+</li>
+<li><p>
+<b>allow_nan</b>: If set to true, allow NaN, Infinity and -Infinity in
+defiance of RFC 4627 to be parsed by the <a href="Parser.html">Parser</a>.
+This option defaults to false.
+</p>
+</li>
+<li><p>
+<b>symbolize_names</b>: If set to true, returns symbols for the names
+(keys) in a <a href="../../JSON.html">JSON</a> object. Otherwise strings
+are returned, which is also the default.
+</p>
+</li>
+<li><p>
+<b>create_additions</b>: If set to false, the <a
+href="Parser.html">Parser</a> doesn&#8217;t create additions even if a
+matchin class and create_id was found. This option defaults to true.
+</p>
+</li>
+<li><p>
+<b>object_class</b>: Defaults to Hash
+</p>
+</li>
+<li><p>
+<b>array_class</b>: Defaults to Array
+</p>
+</li>
+</ul>
+
+ </div>
+
+
+
+
+ <div class="sourcecode">
+ <p class="source-link">
+ Source: <a href="javascript:toggleSource('method-c-new_source')" id="l_method-c-new_source">show</a>
+
+ </p>
+ <div id="method-c-new_source" class="dyn-source">
+ <pre>static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
+{
+ char *ptr;
+ long len;
+ VALUE source, opts;
+ GET_PARSER;
+ rb_scan_args(argc, argv, &quot;11&quot;, &amp;source, &amp;opts);
+ source = convert_encoding(StringValue(source));
+ ptr = RSTRING_PTR(source);
+ len = RSTRING_LEN(source);
+ if (!NIL_P(opts)) {
+ opts = rb_convert_type(opts, T_HASH, &quot;Hash&quot;, &quot;to_hash&quot;);
+ if (NIL_P(opts)) {
+ rb_raise(rb_eArgError, &quot;opts needs to be like a hash&quot;);
+ } else {
+ VALUE tmp = ID2SYM(i_max_nesting);
+ if (option_given_p(opts, tmp)) {
+ VALUE max_nesting = rb_hash_aref(opts, tmp);
+ if (RTEST(max_nesting)) {
+ Check_Type(max_nesting, T_FIXNUM);
+ json-&gt;max_nesting = FIX2INT(max_nesting);
+ } else {
+ json-&gt;max_nesting = 0;
+ }
+ } else {
+ json-&gt;max_nesting = 19;
+ }
+ tmp = ID2SYM(i_allow_nan);
+ if (option_given_p(opts, tmp)) {
+ VALUE allow_nan = rb_hash_aref(opts, tmp);
+ json-&gt;allow_nan = RTEST(allow_nan) ? 1 : 0;
+ } else {
+ json-&gt;allow_nan = 0;
+ }
+ tmp = ID2SYM(i_symbolize_names);
+ if (option_given_p(opts, tmp)) {
+ VALUE symbolize_names = rb_hash_aref(opts, tmp);
+ json-&gt;symbolize_names = RTEST(symbolize_names) ? 1 : 0;
+ } else {
+ json-&gt;symbolize_names = 0;
+ }
+ tmp = ID2SYM(i_create_additions);
+ if (option_given_p(opts, tmp)) {
+ VALUE create_additions = rb_hash_aref(opts, tmp);
+ if (RTEST(create_additions)) {
+ json-&gt;create_id = rb_funcall(mJSON, i_create_id, 0);
+ } else {
+ json-&gt;create_id = Qnil;
+ }
+ } else {
+ json-&gt;create_id = rb_funcall(mJSON, i_create_id, 0);
+ }
+ tmp = ID2SYM(i_object_class);
+ if (option_given_p(opts, tmp)) {
+ json-&gt;object_class = rb_hash_aref(opts, tmp);
+ } else {
+ json-&gt;object_class = Qnil;
+ }
+ tmp = ID2SYM(i_array_class);
+ if (option_given_p(opts, tmp)) {
+ json-&gt;array_class = rb_hash_aref(opts, tmp);
+ } else {
+ json-&gt;array_class = Qnil;
+ }
+ }
+ } else {
+ json-&gt;max_nesting = 19;
+ json-&gt;allow_nan = 0;
+ json-&gt;create_id = rb_funcall(mJSON, i_create_id, 0);
+ json-&gt;object_class = Qnil;
+ json-&gt;array_class = Qnil;
+ }
+ json-&gt;current_nesting = 0;
+ json-&gt;len = len;
+ json-&gt;source = ptr;
+ json-&gt;Vsource = source;
+ return self;
+}</pre>
+ </div>
+ </div>
+
+ </div>
+
+ <div class="sectiontitle">Instance Public methods</div>
+
+ <div class="method">
+ <div class="title" id="method-i-parse">
+
+ <a name="method-i-parse"></a><b> parse()
+</b>
+
+ </div>
+
+ <div class="description">
+ <p>
+Parses the current <a href="../../JSON.html">JSON</a> text <em>source</em>
+and returns the complete data structure as a result.
+</p>
+
+ </div>
+
+
+
+
+ <div class="sourcecode">
+ <p class="source-link">
+ Source: <a href="javascript:toggleSource('method-i-parse_source')" id="l_method-i-parse_source">show</a>
+
+ </p>
+ <div id="method-i-parse_source" class="dyn-source">
+ <pre>static VALUE cParser_parse(VALUE self)
+{
+ char *p, *pe;
+ int cs = EVIL;
+ VALUE result = Qnil;
+ GET_PARSER;
+
+
+#line 1701 &quot;parser.c&quot;
+ {
+ cs = JSON_start;
+ }
+
+#line 698 &quot;parser.rl&quot;
+ p = json-&gt;source;
+ pe = p + json-&gt;len;
+
+#line 1710 &quot;parser.c&quot;
+ {
+ if ( p == pe )
+ goto _test_eof;
+ switch ( cs )
+ {
+st1:
+ if ( ++p == pe )
+ goto _test_eof1;
+case 1:
+ switch( (*p) ) {
+ case 13: goto st1;
+ case 32: goto st1;
+ case 47: goto st2;
+ case 91: goto tr3;
+ case 123: goto tr4;
+ }
+ if ( 9 &lt;= (*p) &amp;&amp; (*p) &lt;= 10 )
+ goto st1;
+ goto st0;
+st0:
+cs = 0;
+ goto _out;
+st2:
+ if ( ++p == pe )
+ goto _test_eof2;
+case 2:
+ switch( (*p) ) {
+ case 42: goto st3;
+ case 47: goto st5;
+ }
+ goto st0;
+st3:
+ if ( ++p == pe )
+ goto _test_eof3;
+case 3:
+ if ( (*p) == 42 )
+ goto st4;
+ goto st3;
+st4:
+ if ( ++p == pe )
+ goto _test_eof4;
+case 4:
+ switch( (*p) ) {
+ case 42: goto st4;
+ case 47: goto st1;
+ }
+ goto st3;
+st5:
+ if ( ++p == pe )
+ goto _test_eof5;
+case 5:
+ if ( (*p) == 10 )
+ goto st1;
+ goto st5;
+tr3:
+#line 506 &quot;parser.rl&quot;
+ {
+ char *np;
+ json-&gt;current_nesting = 1;
+ np = JSON_parse_array(json, p, pe, &amp;result);
+ if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st10;
+tr4:
+#line 499 &quot;parser.rl&quot;
+ {
+ char *np;
+ json-&gt;current_nesting = 1;
+ np = JSON_parse_object(json, p, pe, &amp;result);
+ if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
+ }
+ goto st10;
+st10:
+ if ( ++p == pe )
+ goto _test_eof10;
+case 10:
+#line 1787 &quot;parser.c&quot;
+ switch( (*p) ) {
+ case 13: goto st10;
+ case 32: goto st10;
+ case 47: goto st6;
+ }
+ if ( 9 &lt;= (*p) &amp;&amp; (*p) &lt;= 10 )
+ goto st10;
+ goto st0;
+st6:
+ if ( ++p == pe )
+ goto _test_eof6;
+case 6:
+ switch( (*p) ) {
+ case 42: goto st7;
+ case 47: goto st9;
+ }
+ goto st0;
+st7:
+ if ( ++p == pe )
+ goto _test_eof7;
+case 7:
+ if ( (*p) == 42 )
+ goto st8;
+ goto st7;
+st8:
+ if ( ++p == pe )
+ goto _test_eof8;
+case 8:
+ switch( (*p) ) {
+ case 42: goto st8;
+ case 47: goto st10;
+ }
+ goto st7;
+st9:
+ if ( ++p == pe )
+ goto _test_eof9;
+case 9:
+ if ( (*p) == 10 )
+ goto st10;
+ goto st9;
+ }
+ _test_eof1: cs = 1; goto _test_eof;
+ _test_eof2: cs = 2; goto _test_eof;
+ _test_eof3: cs = 3; goto _test_eof;
+ _test_eof4: cs = 4; goto _test_eof;
+ _test_eof5: cs = 5; goto _test_eof;
+ _test_eof10: cs = 10; goto _test_eof;
+ _test_eof6: cs = 6; goto _test_eof;
+ _test_eof7: cs = 7; goto _test_eof;
+ _test_eof8: cs = 8; goto _test_eof;
+ _test_eof9: cs = 9; goto _test_eof;
+
+ _test_eof: {}
+ _out: {}
+ }
+
+#line 701 &quot;parser.rl&quot;
+
+ if (cs &gt;= JSON_first_final &amp;&amp; p == pe) {
+ return result;
+ } else {
+ rb_raise(eParserError, &quot;%u: unexpected token at '%s'&quot;, __LINE__, p);
+ return Qnil;
+ }
+}</pre>
+ </div>
+ </div>
+
+ </div>
+
+ <div class="method">
+ <div class="title" id="method-i-source">
+
+ <a name="method-i-source"></a><b> source()
+</b>
+
+ </div>
+
+ <div class="description">
+ <p>
+Returns a copy of the current <em>source</em> string, that was used to
+construct this <a href="Parser.html">Parser</a>.
+</p>
+
+ </div>
+
+
+
+
+ <div class="sourcecode">
+ <p class="source-link">
+ Source: <a href="javascript:toggleSource('method-i-source_source')" id="l_method-i-source_source">show</a>
+
+ </p>
+ <div id="method-i-source_source" class="dyn-source">
+ <pre>static VALUE cParser_source(VALUE self)
+{
+ GET_PARSER;
+ return rb_str_dup(json-&gt;Vsource);
+}</pre>
+ </div>
+ </div>
+
+ </div>
+
+</div>
+ </div>
+ </body>
+</html> \ No newline at end of file