ruby-json 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +504 -0
 - data/README +16 -0
 - data/doc/classes/Array.html +162 -0
 - data/doc/classes/Array.src/M000011.html +27 -0
 - data/doc/classes/Array.src/M000012.html +32 -0
 - data/doc/classes/ArrayTest.html +129 -0
 - data/doc/classes/ArrayTest.src/M000014.html +28 -0
 - data/doc/classes/FalseClass.html +131 -0
 - data/doc/classes/FalseClass.src/M000013.html +18 -0
 - data/doc/classes/Hash.html +156 -0
 - data/doc/classes/Hash.src/M000009.html +29 -0
 - data/doc/classes/Hash.src/M000010.html +45 -0
 - data/doc/classes/JSON.html +103 -0
 - data/doc/classes/JSON/Lexer.html +411 -0
 - data/doc/classes/JSON/Lexer.src/M000022.html +19 -0
 - data/doc/classes/JSON/Lexer.src/M000023.html +18 -0
 - data/doc/classes/JSON/Lexer.src/M000024.html +18 -0
 - data/doc/classes/JSON/Lexer.src/M000025.html +20 -0
 - data/doc/classes/JSON/Lexer.src/M000026.html +20 -0
 - data/doc/classes/JSON/Lexer.src/M000027.html +21 -0
 - data/doc/classes/JSON/Lexer.src/M000028.html +43 -0
 - data/doc/classes/JSON/Lexer.src/M000029.html +67 -0
 - data/doc/classes/JSON/Lexer.src/M000030.html +46 -0
 - data/doc/classes/JSON/Lexer.src/M000031.html +26 -0
 - data/doc/classes/JSON/Lexer.src/M000032.html +61 -0
 - data/doc/classes/JSON/Lexer.src/M000033.html +29 -0
 - data/doc/classes/JSON/Lexer.src/M000034.html +18 -0
 - data/doc/classes/JSON/Lexer.src/M000035.html +19 -0
 - data/doc/classes/JSON/Lexer.src/M000036.html +20 -0
 - data/doc/classes/LexerTest.html +219 -0
 - data/doc/classes/LexerTest.src/M000002.html +24 -0
 - data/doc/classes/LexerTest.src/M000003.html +22 -0
 - data/doc/classes/LexerTest.src/M000004.html +26 -0
 - data/doc/classes/LexerTest.src/M000005.html +23 -0
 - data/doc/classes/LexerTest.src/M000006.html +31 -0
 - data/doc/classes/LexerTest.src/M000007.html +27 -0
 - data/doc/classes/LexerTest.src/M000008.html +58 -0
 - data/doc/classes/NilClass.html +131 -0
 - data/doc/classes/NilClass.src/M000017.html +18 -0
 - data/doc/classes/Numeric.html +131 -0
 - data/doc/classes/Numeric.src/M000016.html +18 -0
 - data/doc/classes/Object.html +176 -0
 - data/doc/classes/Object.src/M000018.html +18 -0
 - data/doc/classes/ObjectTest.html +129 -0
 - data/doc/classes/ObjectTest.src/M000015.html +28 -0
 - data/doc/classes/String.html +151 -0
 - data/doc/classes/String.src/M000019.html +18 -0
 - data/doc/classes/String.src/M000020.html +46 -0
 - data/doc/classes/TrueClass.html +131 -0
 - data/doc/classes/TrueClass.src/M000021.html +18 -0
 - data/doc/created.rid +1 -0
 - data/doc/files/install_rb.html +194 -0
 - data/doc/files/install_rb.src/M000001.html +43 -0
 - data/doc/files/json/lexer_rb.html +156 -0
 - data/doc/files/json/objects_rb.html +154 -0
 - data/doc/files/test/arraytest_rb.html +150 -0
 - data/doc/files/test/lexertest_rb.html +150 -0
 - data/doc/files/test/objtest_rb.html +150 -0
 - data/doc/fr_class_index.html +39 -0
 - data/doc/fr_file_index.html +32 -0
 - data/doc/fr_method_index.html +62 -0
 - data/doc/index.html +24 -0
 - data/doc/rdoc-style.css +175 -0
 - data/install.rb +67 -0
 - data/lib/json/lexer.rb +297 -0
 - data/lib/json/objects.rb +201 -0
 - data/ruby-json.gemspec +25 -0
 - data/test/arraytest.rb +45 -0
 - data/test/lexertest.rb +146 -0
 - data/test/objtest.rb +45 -0
 - metadata +126 -0
 
    
        data/doc/rdoc-style.css
    ADDED
    
    | 
         @@ -0,0 +1,175 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            body {
         
     | 
| 
      
 3 
     | 
    
         
            +
                margin: 0;
         
     | 
| 
      
 4 
     | 
    
         
            +
                padding: 0;
         
     | 
| 
      
 5 
     | 
    
         
            +
                background: white;
         
     | 
| 
      
 6 
     | 
    
         
            +
            }
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
         
     | 
| 
      
 9 
     | 
    
         
            +
            h1 { font-size: 120%; }
         
     | 
| 
      
 10 
     | 
    
         
            +
            h2,h3,h4 { margin-top: 1em; }
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            a { background: #eef; color: #039; text-decoration: none; }
         
     | 
| 
      
 13 
     | 
    
         
            +
            a:hover { background: #039; color: #eef; }
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            /* Override the base stylesheet's Anchor inside a table cell */
         
     | 
| 
      
 16 
     | 
    
         
            +
            td > a {
         
     | 
| 
      
 17 
     | 
    
         
            +
            	background: transparent;
         
     | 
| 
      
 18 
     | 
    
         
            +
            	color: #039;
         
     | 
| 
      
 19 
     | 
    
         
            +
            	text-decoration: none;
         
     | 
| 
      
 20 
     | 
    
         
            +
            }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            /* === Structural elements =================================== */
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            div#index {
         
     | 
| 
      
 25 
     | 
    
         
            +
                margin: 0;
         
     | 
| 
      
 26 
     | 
    
         
            +
                padding: 0;
         
     | 
| 
      
 27 
     | 
    
         
            +
                font-size: 0.9em;
         
     | 
| 
      
 28 
     | 
    
         
            +
            }
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            div#index a {
         
     | 
| 
      
 31 
     | 
    
         
            +
                margin-left: 0.7em;
         
     | 
| 
      
 32 
     | 
    
         
            +
            }
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            div#classHeader {
         
     | 
| 
      
 35 
     | 
    
         
            +
                width: auto;
         
     | 
| 
      
 36 
     | 
    
         
            +
                background: #039;
         
     | 
| 
      
 37 
     | 
    
         
            +
                color: white;
         
     | 
| 
      
 38 
     | 
    
         
            +
                padding: 0.5em 1.5em 0.5em 1.5em;
         
     | 
| 
      
 39 
     | 
    
         
            +
                margin: 0;
         
     | 
| 
      
 40 
     | 
    
         
            +
                border-bottom: 3px solid #006;
         
     | 
| 
      
 41 
     | 
    
         
            +
            }
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            div#classHeader a {
         
     | 
| 
      
 44 
     | 
    
         
            +
                background: inherit;
         
     | 
| 
      
 45 
     | 
    
         
            +
                color: white;
         
     | 
| 
      
 46 
     | 
    
         
            +
            }
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            div#classHeader td {
         
     | 
| 
      
 49 
     | 
    
         
            +
                background: inherit;
         
     | 
| 
      
 50 
     | 
    
         
            +
                color: white;
         
     | 
| 
      
 51 
     | 
    
         
            +
            }
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            div#fileHeader {
         
     | 
| 
      
 54 
     | 
    
         
            +
                width: auto;
         
     | 
| 
      
 55 
     | 
    
         
            +
                background: #039;
         
     | 
| 
      
 56 
     | 
    
         
            +
                color: white;
         
     | 
| 
      
 57 
     | 
    
         
            +
                padding: 0.5em 1.5em 0.5em 1.5em;
         
     | 
| 
      
 58 
     | 
    
         
            +
                margin: 0;
         
     | 
| 
      
 59 
     | 
    
         
            +
                border-bottom: 3px solid #006;
         
     | 
| 
      
 60 
     | 
    
         
            +
            }
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
            div#fileHeader a {
         
     | 
| 
      
 63 
     | 
    
         
            +
                background: inherit;
         
     | 
| 
      
 64 
     | 
    
         
            +
                color: white;
         
     | 
| 
      
 65 
     | 
    
         
            +
            }
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
            div#fileHeader td {
         
     | 
| 
      
 68 
     | 
    
         
            +
                background: inherit;
         
     | 
| 
      
 69 
     | 
    
         
            +
                color: white;
         
     | 
| 
      
 70 
     | 
    
         
            +
            }
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            div#bodyContent {
         
     | 
| 
      
 73 
     | 
    
         
            +
                padding: 0 1.5em 0 1.5em;
         
     | 
| 
      
 74 
     | 
    
         
            +
            }
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            div#description {
         
     | 
| 
      
 77 
     | 
    
         
            +
                padding: 0.5em 1.5em;
         
     | 
| 
      
 78 
     | 
    
         
            +
                background: #efefef;
         
     | 
| 
      
 79 
     | 
    
         
            +
                border: 1px dotted #999;
         
     | 
| 
      
 80 
     | 
    
         
            +
            }
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            div#description h1,h2,h3,h4,h5,h6 {
         
     | 
| 
      
 83 
     | 
    
         
            +
                color: black;
         
     | 
| 
      
 84 
     | 
    
         
            +
                background: transparent;
         
     | 
| 
      
 85 
     | 
    
         
            +
            }
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            div#validator-badges {
         
     | 
| 
      
 88 
     | 
    
         
            +
                text-align: center;
         
     | 
| 
      
 89 
     | 
    
         
            +
            }
         
     | 
| 
      
 90 
     | 
    
         
            +
            div#validator-badges img { border: 0; }
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
            div#copyright {
         
     | 
| 
      
 93 
     | 
    
         
            +
                color: #333;
         
     | 
| 
      
 94 
     | 
    
         
            +
                background: #efefef;
         
     | 
| 
      
 95 
     | 
    
         
            +
                font: 0.75em sans-serif;
         
     | 
| 
      
 96 
     | 
    
         
            +
                margin-top: 5em;
         
     | 
| 
      
 97 
     | 
    
         
            +
                margin-bottom: 0;
         
     | 
| 
      
 98 
     | 
    
         
            +
                padding: 0.5em 2em;
         
     | 
| 
      
 99 
     | 
    
         
            +
            }
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
            /* === Classes =================================== */
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            table.header-table {
         
     | 
| 
      
 105 
     | 
    
         
            +
                color: white;
         
     | 
| 
      
 106 
     | 
    
         
            +
                font-size: small;
         
     | 
| 
      
 107 
     | 
    
         
            +
            }
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
            .type-note {
         
     | 
| 
      
 110 
     | 
    
         
            +
                font-size: small;
         
     | 
| 
      
 111 
     | 
    
         
            +
                color: #DEDEDE;
         
     | 
| 
      
 112 
     | 
    
         
            +
            }
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
            .section-bar {
         
     | 
| 
      
 115 
     | 
    
         
            +
                background: #eee;
         
     | 
| 
      
 116 
     | 
    
         
            +
                color: #333;
         
     | 
| 
      
 117 
     | 
    
         
            +
                padding: 3px;
         
     | 
| 
      
 118 
     | 
    
         
            +
                border: 1px solid #999;
         
     | 
| 
      
 119 
     | 
    
         
            +
            }
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
            .top-aligned-row { vertical-align: vertical-align: top }
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
            /* --- Context section classes ----------------------- */
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
            .context-row { }
         
     | 
| 
      
 126 
     | 
    
         
            +
            .context-item-name { font-family: monospace; font-weight: bold; color: black; }
         
     | 
| 
      
 127 
     | 
    
         
            +
            .context-item-value { font-size: x-small; color: #448; }
         
     | 
| 
      
 128 
     | 
    
         
            +
            .context-item-desc { background: #efefef; }
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            /* --- Method classes -------------------------- */
         
     | 
| 
      
 131 
     | 
    
         
            +
            .method-detail {
         
     | 
| 
      
 132 
     | 
    
         
            +
                background: #EFEFEF;
         
     | 
| 
      
 133 
     | 
    
         
            +
                padding: 0;
         
     | 
| 
      
 134 
     | 
    
         
            +
                margin-top: 0.5em;
         
     | 
| 
      
 135 
     | 
    
         
            +
                margin-bottom: 0.5em;
         
     | 
| 
      
 136 
     | 
    
         
            +
                border: 1px dotted #DDD;
         
     | 
| 
      
 137 
     | 
    
         
            +
            }
         
     | 
| 
      
 138 
     | 
    
         
            +
            .method-heading {
         
     | 
| 
      
 139 
     | 
    
         
            +
            	color: black;
         
     | 
| 
      
 140 
     | 
    
         
            +
            	background: #AAA;
         
     | 
| 
      
 141 
     | 
    
         
            +
            	border-bottom: 1px solid #666;
         
     | 
| 
      
 142 
     | 
    
         
            +
            	padding: 0.2em 0.5em 0 0.5em;
         
     | 
| 
      
 143 
     | 
    
         
            +
            }
         
     | 
| 
      
 144 
     | 
    
         
            +
            .method-signature { color: black; background: inherit; }
         
     | 
| 
      
 145 
     | 
    
         
            +
            .method-name { font-weight: bold; }
         
     | 
| 
      
 146 
     | 
    
         
            +
            .method-args { font-style: italic; }
         
     | 
| 
      
 147 
     | 
    
         
            +
            .method-description { padding: 0 0.5em 0 0.5em; }
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            /* --- Source code sections -------------------- */
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
            a.source-toggle { font-size: 90%; }
         
     | 
| 
      
 152 
     | 
    
         
            +
            div.method-source-code {
         
     | 
| 
      
 153 
     | 
    
         
            +
                background: #262626;
         
     | 
| 
      
 154 
     | 
    
         
            +
                color: #ffdead;
         
     | 
| 
      
 155 
     | 
    
         
            +
            	margin: 1em;
         
     | 
| 
      
 156 
     | 
    
         
            +
                padding: 0.5em;
         
     | 
| 
      
 157 
     | 
    
         
            +
                border: 1px dashed #999;
         
     | 
| 
      
 158 
     | 
    
         
            +
                overflow: hidden;
         
     | 
| 
      
 159 
     | 
    
         
            +
            }
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
            div.method-source-code pre { color: #ffdead; overflow: hidden; }
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
            /* --- Ruby keyword styles --------------------- */
         
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
            .standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
            .ruby-constant	{ color: #7fffd4; background: transparent; }
         
     | 
| 
      
 168 
     | 
    
         
            +
            .ruby-keyword	{ color: #00ffff; background: transparent; }
         
     | 
| 
      
 169 
     | 
    
         
            +
            .ruby-ivar		{ color: #eedd82; background: transparent; }
         
     | 
| 
      
 170 
     | 
    
         
            +
            .ruby-operator	{ color: #00ffee; background: transparent; }
         
     | 
| 
      
 171 
     | 
    
         
            +
            .ruby-identifier { color: #ffdead; background: transparent; }
         
     | 
| 
      
 172 
     | 
    
         
            +
            .ruby-node		{ color: #ffa07a; background: transparent; }
         
     | 
| 
      
 173 
     | 
    
         
            +
            .ruby-comment	{ color: #b22222; font-weight: bold; background: transparent; }
         
     | 
| 
      
 174 
     | 
    
         
            +
            .ruby-regexp	{ color: #ffa07a; background: transparent; }
         
     | 
| 
      
 175 
     | 
    
         
            +
            .ruby-value		{ color: #7fffd4; background: transparent; }
         
     | 
    
        data/install.rb
    ADDED
    
    | 
         @@ -0,0 +1,67 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #! /usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Install Script
         
     | 
| 
      
 3 
     | 
    
         
            +
            #  Copyright (C) 2003 Rafael R. Sevilla <dido@imperium.ph>
         
     | 
| 
      
 4 
     | 
    
         
            +
            #  This file is part of JSON for Ruby
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            #  JSON for Ruby is free software; you can redistribute it and/or
         
     | 
| 
      
 7 
     | 
    
         
            +
            #  modify it under the terms of the GNU Lesser General Public License
         
     | 
| 
      
 8 
     | 
    
         
            +
            #  as published by the Free Software Foundation; either version 2.1 of
         
     | 
| 
      
 9 
     | 
    
         
            +
            #  the License, or (at your option) any later version.
         
     | 
| 
      
 10 
     | 
    
         
            +
            #
         
     | 
| 
      
 11 
     | 
    
         
            +
            #  JSON for Ruby is distributed in the hope that it will be useful,
         
     | 
| 
      
 12 
     | 
    
         
            +
            #  but WITHOUT ANY WARRANTY; without even the implied warranty of
         
     | 
| 
      
 13 
     | 
    
         
            +
            #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
         
     | 
| 
      
 14 
     | 
    
         
            +
            #  Lesser General Public License for more details. 
         
     | 
| 
      
 15 
     | 
    
         
            +
            #
         
     | 
| 
      
 16 
     | 
    
         
            +
            #  You should have received a copy of the GNU Lesser General Public
         
     | 
| 
      
 17 
     | 
    
         
            +
            #  License along with JSON for Ruby; if not, write to the Free
         
     | 
| 
      
 18 
     | 
    
         
            +
            #  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
         
     | 
| 
      
 19 
     | 
    
         
            +
            #  02111-1307 USA.
         
     | 
| 
      
 20 
     | 
    
         
            +
            #
         
     | 
| 
      
 21 
     | 
    
         
            +
            # Author:: Rafael R. Sevilla (mailto:dido@imperium.ph)
         
     | 
| 
      
 22 
     | 
    
         
            +
            # Copyright:: Copyright (c) 2003 Rafael R. Sevilla
         
     | 
| 
      
 23 
     | 
    
         
            +
            # License:: GNU Lesser General Public License
         
     | 
| 
      
 24 
     | 
    
         
            +
            # $Id: install.rb,v 1.1 2003/08/20 10:53:24 didosevilla Exp $
         
     | 
| 
      
 25 
     | 
    
         
            +
            #
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            require 'getoptlong'
         
     | 
| 
      
 28 
     | 
    
         
            +
            require 'ftools'
         
     | 
| 
      
 29 
     | 
    
         
            +
            require 'find'
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            SOURCE_DIR = 'json'
         
     | 
| 
      
 32 
     | 
    
         
            +
            LIBDIR = 'json'
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            def instdir
         
     | 
| 
      
 35 
     | 
    
         
            +
                g = GetoptLong.new(['--install-dir', '-i', GetoptLong::REQUIRED_ARGUMENT])
         
     | 
| 
      
 36 
     | 
    
         
            +
                g.each { | name, arg |
         
     | 
| 
      
 37 
     | 
    
         
            +
            	if name == '--install-dir'
         
     | 
| 
      
 38 
     | 
    
         
            +
            	    return arg
         
     | 
| 
      
 39 
     | 
    
         
            +
            	else
         
     | 
| 
      
 40 
     | 
    
         
            +
            	    $stderr.puts "usage: $0 [--install-dir dir]"
         
     | 
| 
      
 41 
     | 
    
         
            +
            	end
         
     | 
| 
      
 42 
     | 
    
         
            +
                }
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                begin
         
     | 
| 
      
 45 
     | 
    
         
            +
            	require 'rbconfig'
         
     | 
| 
      
 46 
     | 
    
         
            +
            	libdir = Config::CONFIG['sitedir'] + "/" + 
         
     | 
| 
      
 47 
     | 
    
         
            +
            	    Config::CONFIG['MAJOR'] + "." +
         
     | 
| 
      
 48 
     | 
    
         
            +
            	    Config::CONFIG['MINOR']
         
     | 
| 
      
 49 
     | 
    
         
            +
                rescue ScriptError
         
     | 
| 
      
 50 
     | 
    
         
            +
            	$LOAD_PATH.each do |l|
         
     | 
| 
      
 51 
     | 
    
         
            +
            	    if l =~ /site_ruby/ && l =~ /\d$/ && l !~ /#{PLATFORM}/
         
     | 
| 
      
 52 
     | 
    
         
            +
            		libdir = l
         
     | 
| 
      
 53 
     | 
    
         
            +
            		break
         
     | 
| 
      
 54 
     | 
    
         
            +
            	    end
         
     | 
| 
      
 55 
     | 
    
         
            +
            	end
         
     | 
| 
      
 56 
     | 
    
         
            +
            	STDERR.puts "Can't find required file `rbconfig.rb'."
         
     | 
| 
      
 57 
     | 
    
         
            +
            	STDERR.puts "The 'json' files need to be installed manually in " +
         
     | 
| 
      
 58 
     | 
    
         
            +
            	    " #{libdir}"
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
                return libdir
         
     | 
| 
      
 61 
     | 
    
         
            +
            end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            INSTALL_DIR = instdir()
         
     | 
| 
      
 64 
     | 
    
         
            +
            File.makedirs(File.join(INSTALL_DIR, LIBDIR))
         
     | 
| 
      
 65 
     | 
    
         
            +
            Find.find(SOURCE_DIR) { |f|
         
     | 
| 
      
 66 
     | 
    
         
            +
                File.install(f, File.join(INSTALL_DIR, f), 0644, true) if f =~ /.rb$/
         
     | 
| 
      
 67 
     | 
    
         
            +
            }
         
     | 
    
        data/lib/json/lexer.rb
    ADDED
    
    | 
         @@ -0,0 +1,297 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Lexical analyzer for JSON
         
     | 
| 
      
 3 
     | 
    
         
            +
            #  Copyright (C) 2003,2005 Rafael R. Sevilla <dido@imperium.ph>
         
     | 
| 
      
 4 
     | 
    
         
            +
            #  This file is part of JSON for Ruby
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            #  JSON for Ruby is free software; you can redistribute it and/or
         
     | 
| 
      
 7 
     | 
    
         
            +
            #  modify it under the terms of the GNU Lesser General Public License
         
     | 
| 
      
 8 
     | 
    
         
            +
            #  as published by the Free Software Foundation; either version 2.1 of
         
     | 
| 
      
 9 
     | 
    
         
            +
            #  the License, or (at your option) any later version.
         
     | 
| 
      
 10 
     | 
    
         
            +
            #
         
     | 
| 
      
 11 
     | 
    
         
            +
            #  JSON for Ruby is distributed in the hope that it will be useful,
         
     | 
| 
      
 12 
     | 
    
         
            +
            #  but WITHOUT ANY WARRANTY; without even the implied warranty of
         
     | 
| 
      
 13 
     | 
    
         
            +
            #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
         
     | 
| 
      
 14 
     | 
    
         
            +
            #  Lesser General Public License for more details. 
         
     | 
| 
      
 15 
     | 
    
         
            +
            #
         
     | 
| 
      
 16 
     | 
    
         
            +
            #  You should have received a copy of the GNU Lesser General Public
         
     | 
| 
      
 17 
     | 
    
         
            +
            #  License along with JSON for Ruby; if not, write to the Free
         
     | 
| 
      
 18 
     | 
    
         
            +
            #  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
         
     | 
| 
      
 19 
     | 
    
         
            +
            #  02111-1307 USA.
         
     | 
| 
      
 20 
     | 
    
         
            +
            #
         
     | 
| 
      
 21 
     | 
    
         
            +
            # Author:: Rafael R. Sevilla (mailto:dido@imperium.ph)
         
     | 
| 
      
 22 
     | 
    
         
            +
            # Some bugs fixed by Adam Kramer (mailto:adam@the-kramers.net)
         
     | 
| 
      
 23 
     | 
    
         
            +
            # Copyright:: Copyright (c) 2003,2005 Rafael R. Sevilla
         
     | 
| 
      
 24 
     | 
    
         
            +
            # License:: GNU Lesser General Public License
         
     | 
| 
      
 25 
     | 
    
         
            +
            # $Id: lexer.rb,v 1.7 2005/01/28 02:42:10 didosevilla Exp $
         
     | 
| 
      
 26 
     | 
    
         
            +
            #
         
     | 
| 
      
 27 
     | 
    
         
            +
            require 'json/objects'
         
     | 
| 
      
 28 
     | 
    
         
            +
            require 'cgi'
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            module JSON
         
     | 
| 
      
 31 
     | 
    
         
            +
              class Lexer
         
     | 
| 
      
 32 
     | 
    
         
            +
                # This method will initialize the lexer to contain a string.
         
     | 
| 
      
 33 
     | 
    
         
            +
                # =====Parameters
         
     | 
| 
      
 34 
     | 
    
         
            +
                # +s+:: the string to initialize the lexer object with
         
     | 
| 
      
 35 
     | 
    
         
            +
                def initialize(s)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  @index = 0
         
     | 
| 
      
 37 
     | 
    
         
            +
                  @source = s
         
     | 
| 
      
 38 
     | 
    
         
            +
                end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                # Backs up the lexer status one character.
         
     | 
| 
      
 41 
     | 
    
         
            +
                def back
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @index -= 1 if @index > 0
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                def more?
         
     | 
| 
      
 46 
     | 
    
         
            +
                  return(@index < @source.length)
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                # Consumes the next character.
         
     | 
| 
      
 50 
     | 
    
         
            +
                def nextchar
         
     | 
| 
      
 51 
     | 
    
         
            +
                  c = self.more?() ? @source[@index,1] : "\0"
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @index += 1
         
     | 
| 
      
 53 
     | 
    
         
            +
                  return(c)
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                # Consumes the next character and check that it matches a specified
         
     | 
| 
      
 57 
     | 
    
         
            +
                # character.
         
     | 
| 
      
 58 
     | 
    
         
            +
                def nextmatch(char)
         
     | 
| 
      
 59 
     | 
    
         
            +
                  n = self.nextchar
         
     | 
| 
      
 60 
     | 
    
         
            +
                  raise "Expected '#{char}' and instead saw '#{n}'." if (n != char)
         
     | 
| 
      
 61 
     | 
    
         
            +
                  return(n)
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                # Read the next n characters from the string in the lexer.
         
     | 
| 
      
 65 
     | 
    
         
            +
                # =====Parameters
         
     | 
| 
      
 66 
     | 
    
         
            +
                # +n+:: the number of characters to read from the lexer
         
     | 
| 
      
 67 
     | 
    
         
            +
                def nextchars(n)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  raise "substring bounds error" if (@index + n > @source.length)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  i = @index
         
     | 
| 
      
 70 
     | 
    
         
            +
                  @index += n
         
     | 
| 
      
 71 
     | 
    
         
            +
                  return(@source[i,n])
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                # Read the next n characters from the string with escape sequence
         
     | 
| 
      
 75 
     | 
    
         
            +
                # processing.
         
     | 
| 
      
 76 
     | 
    
         
            +
                def nextclean
         
     | 
| 
      
 77 
     | 
    
         
            +
                  while true
         
     | 
| 
      
 78 
     | 
    
         
            +
            	c = self.nextchar()
         
     | 
| 
      
 79 
     | 
    
         
            +
            	if (c == '/')
         
     | 
| 
      
 80 
     | 
    
         
            +
            	  case self.nextchar()
         
     | 
| 
      
 81 
     | 
    
         
            +
            	  when '/'
         
     | 
| 
      
 82 
     | 
    
         
            +
            	    c = self.nextchar()
         
     | 
| 
      
 83 
     | 
    
         
            +
            	    while c != "\n" && c != "\r" && c != "\0"
         
     | 
| 
      
 84 
     | 
    
         
            +
            	      c = self.nextchar()
         
     | 
| 
      
 85 
     | 
    
         
            +
            	    end
         
     | 
| 
      
 86 
     | 
    
         
            +
            	  when '*'
         
     | 
| 
      
 87 
     | 
    
         
            +
            	    while true
         
     | 
| 
      
 88 
     | 
    
         
            +
            	      c = self.nextchar()
         
     | 
| 
      
 89 
     | 
    
         
            +
            	      raise "unclosed comment" if (c == "\0")
         
     | 
| 
      
 90 
     | 
    
         
            +
            	      if (c == '*')
         
     | 
| 
      
 91 
     | 
    
         
            +
            		break if (self.nextchar() == '/')
         
     | 
| 
      
 92 
     | 
    
         
            +
            		self.back()
         
     | 
| 
      
 93 
     | 
    
         
            +
            	      end
         
     | 
| 
      
 94 
     | 
    
         
            +
            	    end
         
     | 
| 
      
 95 
     | 
    
         
            +
            	  else
         
     | 
| 
      
 96 
     | 
    
         
            +
            	    self.back()
         
     | 
| 
      
 97 
     | 
    
         
            +
            	    return '/';
         
     | 
| 
      
 98 
     | 
    
         
            +
            	  end
         
     | 
| 
      
 99 
     | 
    
         
            +
            	elsif c == "\0" || c[0] > " "[0]
         
     | 
| 
      
 100 
     | 
    
         
            +
            	  return(c)
         
     | 
| 
      
 101 
     | 
    
         
            +
            	end
         
     | 
| 
      
 102 
     | 
    
         
            +
                  end
         
     | 
| 
      
 103 
     | 
    
         
            +
                end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                # Given a Unicode code point, return a string giving its UTF-8
         
     | 
| 
      
 106 
     | 
    
         
            +
                # representation based on RFC 2279.
         
     | 
| 
      
 107 
     | 
    
         
            +
                def utf8str(code)
         
     | 
| 
      
 108 
     | 
    
         
            +
                  if (code & ~(0x7f)) == 0
         
     | 
| 
      
 109 
     | 
    
         
            +
                    # UCS-4 range 0x00000000 - 0x0000007F
         
     | 
| 
      
 110 
     | 
    
         
            +
                    return(code.chr)
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                  buf = ""
         
     | 
| 
      
 114 
     | 
    
         
            +
                  if (code & ~(0x7ff)) == 0
         
     | 
| 
      
 115 
     | 
    
         
            +
                    # UCS-4 range 0x00000080 - 0x000007FF
         
     | 
| 
      
 116 
     | 
    
         
            +
                    buf << (0b11000000 | (code >> 6)).chr
         
     | 
| 
      
 117 
     | 
    
         
            +
                    buf << (0b10000000 | (code & 0b00111111)).chr
         
     | 
| 
      
 118 
     | 
    
         
            +
                    return(buf)
         
     | 
| 
      
 119 
     | 
    
         
            +
                  end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                  if (code & ~(0x000ffff)) == 0
         
     | 
| 
      
 122 
     | 
    
         
            +
                    # UCS-4 range 0x00000800 - 0x0000FFFF
         
     | 
| 
      
 123 
     | 
    
         
            +
                    buf << (0b11100000 | (code >> 12)).chr
         
     | 
| 
      
 124 
     | 
    
         
            +
                    buf << (0b10000000 | ((code >> 6) & 0b00111111)).chr
         
     | 
| 
      
 125 
     | 
    
         
            +
                    buf << (0b10000000 | (code & 0b0011111)).chr
         
     | 
| 
      
 126 
     | 
    
         
            +
                    return(buf)
         
     | 
| 
      
 127 
     | 
    
         
            +
                  end
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                  # Not used -- JSON only has UCS-2, but for the sake
         
     | 
| 
      
 130 
     | 
    
         
            +
                  # of completeness
         
     | 
| 
      
 131 
     | 
    
         
            +
                  if (code & ~(0x1FFFFF)) == 0
         
     | 
| 
      
 132 
     | 
    
         
            +
                    # UCS-4 range 0x00010000 - 0x001FFFFF
         
     | 
| 
      
 133 
     | 
    
         
            +
                    buf << (0b11110000 | (code >> 18)).chr
         
     | 
| 
      
 134 
     | 
    
         
            +
                    buf << (0b10000000 | ((code >> 12) & 0b00111111)).chr
         
     | 
| 
      
 135 
     | 
    
         
            +
                    buf << (0b10000000 | ((code >> 6) & 0b00111111)).chr
         
     | 
| 
      
 136 
     | 
    
         
            +
                    buf << (0b10000000 | (code & 0b0011111)).chr
         
     | 
| 
      
 137 
     | 
    
         
            +
                    return(buf)
         
     | 
| 
      
 138 
     | 
    
         
            +
                  end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                  if (code & ~(0x03FFFFFF)) == 0
         
     | 
| 
      
 141 
     | 
    
         
            +
                    # UCS-4 range 0x00200000 - 0x03FFFFFF
         
     | 
| 
      
 142 
     | 
    
         
            +
                    buf << (0b11110000 | (code >> 24)).chr
         
     | 
| 
      
 143 
     | 
    
         
            +
                    buf << (0b10000000 | ((code >> 18) & 0b00111111)).chr
         
     | 
| 
      
 144 
     | 
    
         
            +
                    buf << (0b10000000 | ((code >> 12) & 0b00111111)).chr
         
     | 
| 
      
 145 
     | 
    
         
            +
                    buf << (0b10000000 | ((code >> 6) & 0b00111111)).chr
         
     | 
| 
      
 146 
     | 
    
         
            +
                    buf << (0b10000000 | (code & 0b0011111)).chr
         
     | 
| 
      
 147 
     | 
    
         
            +
                    return(buf)
         
     | 
| 
      
 148 
     | 
    
         
            +
                  end
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                  # UCS-4 range 0x04000000 - 0x7FFFFFFF
         
     | 
| 
      
 151 
     | 
    
         
            +
                  buf << (0b11111000 | (code >> 30)).chr
         
     | 
| 
      
 152 
     | 
    
         
            +
                  buf << (0b10000000 | ((code >> 24) & 0b00111111)).chr
         
     | 
| 
      
 153 
     | 
    
         
            +
                  buf << (0b10000000 | ((code >> 18) & 0b00111111)).chr
         
     | 
| 
      
 154 
     | 
    
         
            +
                  buf << (0b10000000 | ((code >> 12) & 0b00111111)).chr
         
     | 
| 
      
 155 
     | 
    
         
            +
                  buf << (0b10000000 | ((code >> 6) & 0b00111111)).chr
         
     | 
| 
      
 156 
     | 
    
         
            +
                  buf << (0b10000000 | (code & 0b0011111)).chr
         
     | 
| 
      
 157 
     | 
    
         
            +
                  return(buf)
         
     | 
| 
      
 158 
     | 
    
         
            +
                end
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
                # Reads the next string, given a quote character (usually ' or ")
         
     | 
| 
      
 161 
     | 
    
         
            +
                # =====Parameters
         
     | 
| 
      
 162 
     | 
    
         
            +
                # +quot+: the next matching quote character to use
         
     | 
| 
      
 163 
     | 
    
         
            +
                def nextstring(quot)
         
     | 
| 
      
 164 
     | 
    
         
            +
                  c = buf = ""
         
     | 
| 
      
 165 
     | 
    
         
            +
                  while true
         
     | 
| 
      
 166 
     | 
    
         
            +
            	c = self.nextchar()
         
     | 
| 
      
 167 
     | 
    
         
            +
            	case c
         
     | 
| 
      
 168 
     | 
    
         
            +
            	when /\0|\n\r/
         
     | 
| 
      
 169 
     | 
    
         
            +
            	  raise "Unterminated string"
         
     | 
| 
      
 170 
     | 
    
         
            +
            	when "\\"
         
     | 
| 
      
 171 
     | 
    
         
            +
            	  chr = self.nextchar()
         
     | 
| 
      
 172 
     | 
    
         
            +
            	  case chr
         
     | 
| 
      
 173 
     | 
    
         
            +
            	  when 'b'
         
     | 
| 
      
 174 
     | 
    
         
            +
            	    buf << "\b"
         
     | 
| 
      
 175 
     | 
    
         
            +
            	  when 't'
         
     | 
| 
      
 176 
     | 
    
         
            +
            	    buf << "\t"
         
     | 
| 
      
 177 
     | 
    
         
            +
            	  when 'n'
         
     | 
| 
      
 178 
     | 
    
         
            +
            	    buf << "\n"
         
     | 
| 
      
 179 
     | 
    
         
            +
            	  when 'f'
         
     | 
| 
      
 180 
     | 
    
         
            +
            	    buf << "\f"
         
     | 
| 
      
 181 
     | 
    
         
            +
            	  when 'r'
         
     | 
| 
      
 182 
     | 
    
         
            +
            	    buf << "\r"
         
     | 
| 
      
 183 
     | 
    
         
            +
            	  when 'u'
         
     | 
| 
      
 184 
     | 
    
         
            +
            	    buf << utf8str(Integer("0x" + self.nextchars(4)))
         
     | 
| 
      
 185 
     | 
    
         
            +
            	  else
         
     | 
| 
      
 186 
     | 
    
         
            +
            	    buf << chr
         
     | 
| 
      
 187 
     | 
    
         
            +
            	  end
         
     | 
| 
      
 188 
     | 
    
         
            +
            	else
         
     | 
| 
      
 189 
     | 
    
         
            +
            	  return(buf) if (c == quot)
         
     | 
| 
      
 190 
     | 
    
         
            +
            	  buf << c
         
     | 
| 
      
 191 
     | 
    
         
            +
            	end
         
     | 
| 
      
 192 
     | 
    
         
            +
                  end
         
     | 
| 
      
 193 
     | 
    
         
            +
                end
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
                # Reads the next group of characters that match a regular
         
     | 
| 
      
 196 
     | 
    
         
            +
                # expresion.
         
     | 
| 
      
 197 
     | 
    
         
            +
                # 
         
     | 
| 
      
 198 
     | 
    
         
            +
                def nextto(regex)
         
     | 
| 
      
 199 
     | 
    
         
            +
                  buf = ""
         
     | 
| 
      
 200 
     | 
    
         
            +
                  while (true)
         
     | 
| 
      
 201 
     | 
    
         
            +
            	c = self.nextchar()
         
     | 
| 
      
 202 
     | 
    
         
            +
            	if !(regex =~ c).nil? || c == '\0' || c == '\n' || c == '\r'
         
     | 
| 
      
 203 
     | 
    
         
            +
            	  self.back() if (c != '\0')
         
     | 
| 
      
 204 
     | 
    
         
            +
            	  return(buf.chomp())
         
     | 
| 
      
 205 
     | 
    
         
            +
            	end
         
     | 
| 
      
 206 
     | 
    
         
            +
            	buf += c
         
     | 
| 
      
 207 
     | 
    
         
            +
                  end
         
     | 
| 
      
 208 
     | 
    
         
            +
                end
         
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
      
 210 
     | 
    
         
            +
                # Reads the next value from the string.  This can return either a
         
     | 
| 
      
 211 
     | 
    
         
            +
                # string, a FixNum, a floating point value, a JSON array, or a
         
     | 
| 
      
 212 
     | 
    
         
            +
                # JSON object.
         
     | 
| 
      
 213 
     | 
    
         
            +
                def nextvalue
         
     | 
| 
      
 214 
     | 
    
         
            +
                  c = self.nextclean
         
     | 
| 
      
 215 
     | 
    
         
            +
                  s = ""
         
     | 
| 
      
 216 
     | 
    
         
            +
             
     | 
| 
      
 217 
     | 
    
         
            +
                  case c
         
     | 
| 
      
 218 
     | 
    
         
            +
                  when /\"|\'/
         
     | 
| 
      
 219 
     | 
    
         
            +
            	return(self.nextstring(c))
         
     | 
| 
      
 220 
     | 
    
         
            +
                  when '{'
         
     | 
| 
      
 221 
     | 
    
         
            +
            	self.back()
         
     | 
| 
      
 222 
     | 
    
         
            +
                    return(Hash.new.from_json(self))
         
     | 
| 
      
 223 
     | 
    
         
            +
                  when '['
         
     | 
| 
      
 224 
     | 
    
         
            +
            	self.back()
         
     | 
| 
      
 225 
     | 
    
         
            +
            	return(Array.new.from_json(self))
         
     | 
| 
      
 226 
     | 
    
         
            +
                  else
         
     | 
| 
      
 227 
     | 
    
         
            +
            	buf = ""
         
     | 
| 
      
 228 
     | 
    
         
            +
            	while ((c =~ /"| |:|,|\]|\}|\/|\0/).nil?)
         
     | 
| 
      
 229 
     | 
    
         
            +
            	  buf += c
         
     | 
| 
      
 230 
     | 
    
         
            +
            	  c = self.nextchar()
         
     | 
| 
      
 231 
     | 
    
         
            +
            	end
         
     | 
| 
      
 232 
     | 
    
         
            +
            	self.back()
         
     | 
| 
      
 233 
     | 
    
         
            +
            	s = buf.chomp
         
     | 
| 
      
 234 
     | 
    
         
            +
            	case s
         
     | 
| 
      
 235 
     | 
    
         
            +
            	when "true"
         
     | 
| 
      
 236 
     | 
    
         
            +
            	  return(true)
         
     | 
| 
      
 237 
     | 
    
         
            +
            	when "false"
         
     | 
| 
      
 238 
     | 
    
         
            +
            	  return(false)
         
     | 
| 
      
 239 
     | 
    
         
            +
            	when "null"
         
     | 
| 
      
 240 
     | 
    
         
            +
            	  return(nil)
         
     | 
| 
      
 241 
     | 
    
         
            +
            	when /^[0-9]|\.|-|\+/
         
     | 
| 
      
 242 
     | 
    
         
            +
            	  begin
         
     | 
| 
      
 243 
     | 
    
         
            +
            	    return(Integer(s))
         
     | 
| 
      
 244 
     | 
    
         
            +
            	  rescue ArgumentError
         
     | 
| 
      
 245 
     | 
    
         
            +
            	    # do nothing on an error, the next case should do the trick
         
     | 
| 
      
 246 
     | 
    
         
            +
            	  end
         
     | 
| 
      
 247 
     | 
    
         
            +
            	  begin
         
     | 
| 
      
 248 
     | 
    
         
            +
            	    return(Float(s))
         
     | 
| 
      
 249 
     | 
    
         
            +
            	  rescue ArgumentError
         
     | 
| 
      
 250 
     | 
    
         
            +
            	    # do nothing
         
     | 
| 
      
 251 
     | 
    
         
            +
            	  end
         
     | 
| 
      
 252 
     | 
    
         
            +
            	end
         
     | 
| 
      
 253 
     | 
    
         
            +
            	if (s == "")
         
     | 
| 
      
 254 
     | 
    
         
            +
                      s = nil
         
     | 
| 
      
 255 
     | 
    
         
            +
                    end
         
     | 
| 
      
 256 
     | 
    
         
            +
            	return(s)
         
     | 
| 
      
 257 
     | 
    
         
            +
                  end
         
     | 
| 
      
 258 
     | 
    
         
            +
                end
         
     | 
| 
      
 259 
     | 
    
         
            +
             
     | 
| 
      
 260 
     | 
    
         
            +
                # Skip to the next instance of the character specified
         
     | 
| 
      
 261 
     | 
    
         
            +
                # =====Parameters
         
     | 
| 
      
 262 
     | 
    
         
            +
                # +to+:: Character to skip to
         
     | 
| 
      
 263 
     | 
    
         
            +
                def skipto(to)
         
     | 
| 
      
 264 
     | 
    
         
            +
                  index = @index
         
     | 
| 
      
 265 
     | 
    
         
            +
                  loop {
         
     | 
| 
      
 266 
     | 
    
         
            +
            	c = self.nextchar()
         
     | 
| 
      
 267 
     | 
    
         
            +
            	if (c == '\0')
         
     | 
| 
      
 268 
     | 
    
         
            +
            	  @index = index
         
     | 
| 
      
 269 
     | 
    
         
            +
            	  return(c)
         
     | 
| 
      
 270 
     | 
    
         
            +
            	end
         
     | 
| 
      
 271 
     | 
    
         
            +
            	if (c == to)
         
     | 
| 
      
 272 
     | 
    
         
            +
            	  self.back
         
     | 
| 
      
 273 
     | 
    
         
            +
            	  return(c)
         
     | 
| 
      
 274 
     | 
    
         
            +
            	end
         
     | 
| 
      
 275 
     | 
    
         
            +
                  }
         
     | 
| 
      
 276 
     | 
    
         
            +
                end
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
                def unescape
         
     | 
| 
      
 279 
     | 
    
         
            +
                  @source = CGI::unescape(@source)
         
     | 
| 
      
 280 
     | 
    
         
            +
                end
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
                # Skip past the next instance of the character specified
         
     | 
| 
      
 283 
     | 
    
         
            +
                # =====Parameters
         
     | 
| 
      
 284 
     | 
    
         
            +
                # +to+:: the character to skip past
         
     | 
| 
      
 285 
     | 
    
         
            +
                def skippast(to)
         
     | 
| 
      
 286 
     | 
    
         
            +
                  @index = @source.index(to, @index)
         
     | 
| 
      
 287 
     | 
    
         
            +
                  @index = (@index.nil?) ? @source.length : @index + to.length
         
     | 
| 
      
 288 
     | 
    
         
            +
                end
         
     | 
| 
      
 289 
     | 
    
         
            +
             
     | 
| 
      
 290 
     | 
    
         
            +
                def each
         
     | 
| 
      
 291 
     | 
    
         
            +
                  while (n = nextvalue)
         
     | 
| 
      
 292 
     | 
    
         
            +
                    yield(n)
         
     | 
| 
      
 293 
     | 
    
         
            +
                  end
         
     | 
| 
      
 294 
     | 
    
         
            +
                end
         
     | 
| 
      
 295 
     | 
    
         
            +
              end
         
     | 
| 
      
 296 
     | 
    
         
            +
            end
         
     | 
| 
      
 297 
     | 
    
         
            +
             
     |