nokogiri-maglev- 1.5.3 → 1.5.4.20120815005250
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/CHANGELOG.ja.rdoc +27 -1
 - data/CHANGELOG.rdoc +27 -1
 - data/C_CODING_STYLE.rdoc +9 -3
 - data/Rakefile +3 -1
 - data/bin/nokogiri +3 -1
 - data/ext/nokogiri/extconf.rb +14 -4
 - data/ext/nokogiri/nokogiri.c +20 -0
 - data/ext/nokogiri/nokogiri.h +2 -5
 - data/ext/nokogiri/xml_attr.c +1 -1
 - data/ext/nokogiri/xml_cdata.c +1 -1
 - data/ext/nokogiri/xml_comment.c +1 -1
 - data/ext/nokogiri/xml_document.c +2 -2
 - data/ext/nokogiri/xml_document_fragment.c +1 -1
 - data/ext/nokogiri/xml_entity_reference.c +1 -1
 - data/ext/nokogiri/xml_node.c +15 -12
 - data/ext/nokogiri/xml_processing_instruction.c +1 -1
 - data/ext/nokogiri/xml_text.c +1 -1
 - data/ext/nokogiri/xml_xpath_context.c +1 -1
 - data/lib/nokogiri/version.rb +1 -1
 - data/lib/nokogiri/xml/document.rb +26 -8
 - data/lib/nokogiri/xml/node.rb +1 -1
 - data/lib/nokogiri/xml/node_set.rb +1 -1
 - data/lib/nokogiri/xml/parse_options.rb +7 -2
 - data/test/xml/test_document_fragment.rb +5 -0
 - data/test/xml/test_node.rb +10 -0
 - data/test/xml/test_node_set.rb +5 -0
 - data/test/xml/test_parse_options.rb +12 -0
 - metadata +51 -38
 
    
        data/CHANGELOG.ja.rdoc
    CHANGED
    
    | 
         @@ -1,4 +1,30 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            == 1.5. 
     | 
| 
      
 1 
     | 
    
         
            +
            == 1.5.4 / unreleased
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * Features
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              * The "nokogiri" script now has more verbose output when passed the `--rng` option. #675 (Thanks, Dan Radez!)
         
     | 
| 
      
 6 
     | 
    
         
            +
              * Build support on hardened Debian systems that use `-Werror=format-security`. #680.
         
     | 
| 
      
 7 
     | 
    
         
            +
              * Better build support for systems with pkg-config. #584
         
     | 
| 
      
 8 
     | 
    
         
            +
              * Better build support for systems with multiple iconv installations.
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            * Bugfixes
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              * Segmentation fault when creating a comment node for a DocumentFragment. #677, #678.
         
     | 
| 
      
 13 
     | 
    
         
            +
              * Treat '.' as xpath in at() and search(). #690
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              * [MRI, Security] Default parse options for XML documents were
         
     | 
| 
      
 16 
     | 
    
         
            +
                changed to not make network connections during document parsing,
         
     | 
| 
      
 17 
     | 
    
         
            +
                to avoid XXE vulnerability. #693
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                To re-enable this behavior, the configuration method `nononet` may
         
     | 
| 
      
 20 
     | 
    
         
            +
                be called, like this:
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                Nokogiri::XML::Document.parse(xml) { |config| config.nononet }
         
     | 
| 
      
 23 
     | 
    
         
            +
                
         
     | 
| 
      
 24 
     | 
    
         
            +
                Insert your own joke about double-negatives here.
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            == 1.5.3 / 2012-06-01
         
     | 
| 
       2 
28 
     | 
    
         | 
| 
       3 
29 
     | 
    
         
             
            * Features
         
     | 
| 
       4 
30 
     | 
    
         | 
    
        data/CHANGELOG.rdoc
    CHANGED
    
    | 
         @@ -1,4 +1,30 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            == 1.5. 
     | 
| 
      
 1 
     | 
    
         
            +
            == 1.5.4 / unreleased
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * Features
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              * The "nokogiri" script now has more verbose output when passed the `--rng` option. #675 (Thanks, Dan Radez!)
         
     | 
| 
      
 6 
     | 
    
         
            +
              * Build support on hardened Debian systems that use `-Werror=format-security`. #680.
         
     | 
| 
      
 7 
     | 
    
         
            +
              * Better build support for systems with pkg-config. #584
         
     | 
| 
      
 8 
     | 
    
         
            +
              * Better build support for systems with multiple iconv installations.
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            * Bugfixes
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              * Segmentation fault when creating a comment node for a DocumentFragment. #677, #678.
         
     | 
| 
      
 13 
     | 
    
         
            +
              * Treat '.' as xpath in at() and search(). #690
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              * [MRI, Security] Default parse options for XML documents were
         
     | 
| 
      
 16 
     | 
    
         
            +
                changed to not make network connections during document parsing,
         
     | 
| 
      
 17 
     | 
    
         
            +
                to avoid XXE vulnerability. #693
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                To re-enable this behavior, the configuration method `nononet` may
         
     | 
| 
      
 20 
     | 
    
         
            +
                be called, like this:
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                Nokogiri::XML::Document.parse(xml) { |config| config.nononet }
         
     | 
| 
      
 23 
     | 
    
         
            +
                
         
     | 
| 
      
 24 
     | 
    
         
            +
                Insert your own joke about double-negatives here.
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            == 1.5.3 / 2012-06-01
         
     | 
| 
       2 
28 
     | 
    
         | 
| 
       3 
29 
     | 
    
         
             
            * Features
         
     | 
| 
       4 
30 
     | 
    
         | 
    
        data/C_CODING_STYLE.rdoc
    CHANGED
    
    | 
         @@ -4,11 +4,17 @@ Please don't propose commits that only change whitespace. However, if your 
     | 
|
| 
       4 
4 
     | 
    
         
             
            commit touches a function or section that is not using MRI Ruby conventions,
         
     | 
| 
       5 
5 
     | 
    
         
             
            feel free to update whitespace in the surrounding code.
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
       7 
8 
     | 
    
         
             
            = WHITESPACE:
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            indent level: 2
         
     | 
| 
       10 
     | 
    
         
            -
            indent type: Always spaces
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
            * indent level: 2
         
     | 
| 
      
 11 
     | 
    
         
            +
            * indent type: Always spaces
         
     | 
| 
      
 12 
     | 
    
         
            +
            * line Breaks: LF
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            This style can be automatically applied by running:
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                astyle --indent=spaces=2 --style=1tbs --keep-one-line-blocks $(ack -f --type=cpp --type=cc ext/nokogiri)
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       12 
18 
     | 
    
         | 
| 
       13 
19 
     | 
    
         
             
            = FUNCTION DECLARATION:
         
     | 
| 
       14 
20 
     | 
    
         | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -23,10 +23,11 @@ end 
     | 
|
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
            require 'tasks/nokogiri.org'
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
            HOE = Hoe.spec 'maglev- 
     | 
| 
      
 26 
     | 
    
         
            +
            HOE = Hoe.spec 'nokogiri-maglev-' do
         
     | 
| 
       27 
27 
     | 
    
         
             
              developer 'Aaron Patterson', 'aaronp@rubyforge.org'
         
     | 
| 
       28 
28 
     | 
    
         
             
              developer 'Mike Dalessio',   'mike.dalessio@gmail.com'
         
     | 
| 
       29 
29 
     | 
    
         
             
              developer 'Yoko Harada',     'yokolet@gmail.com'
         
     | 
| 
      
 30 
     | 
    
         
            +
              developer 'Tim Elliott',     'tle@holymonkey.com'
         
     | 
| 
       30 
31 
     | 
    
         | 
| 
       31 
32 
     | 
    
         
             
              self.readme_file  = ['README',    ENV['HLANG'], 'rdoc'].compact.join('.')
         
     | 
| 
       32 
33 
     | 
    
         
             
              self.history_file = ['CHANGELOG', ENV['HLANG'], 'rdoc'].compact.join('.')
         
     | 
| 
         @@ -49,6 +50,7 @@ HOE = Hoe.spec 'maglev-nokogiri' do 
     | 
|
| 
       49 
50 
     | 
    
         
             
                ["mini_portile",    ">= 0.2.2"],
         
     | 
| 
       50 
51 
     | 
    
         
             
                ["minitest",        "~> 2.2.2"],
         
     | 
| 
       51 
52 
     | 
    
         
             
                ["racc",            ">= 1.4.6"],
         
     | 
| 
      
 53 
     | 
    
         
            +
                ["rake",            ">= 0.9"],
         
     | 
| 
       52 
54 
     | 
    
         
             
                ["rake-compiler",   "=  0.8.0"],
         
     | 
| 
       53 
55 
     | 
    
         
             
                ["rexical",         ">= 1.0.5"],
         
     | 
| 
       54 
56 
     | 
    
         
             
              ]
         
     | 
    
        data/bin/nokogiri
    CHANGED
    
    
    
        data/ext/nokogiri/extconf.rb
    CHANGED
    
    | 
         @@ -7,8 +7,8 @@ require 'mkmf' 
     | 
|
| 
       7 
7 
     | 
    
         
             
            RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
         
     | 
| 
       10 
     | 
    
         
            -
            LIBDIR =  
     | 
| 
       11 
     | 
    
         
            -
            INCLUDEDIR =  
     | 
| 
      
 10 
     | 
    
         
            +
            LIBDIR = RbConfig::CONFIG['libdir']
         
     | 
| 
      
 11 
     | 
    
         
            +
            INCLUDEDIR = RbConfig::CONFIG['includedir']
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'macruby'
         
     | 
| 
       14 
14 
     | 
    
         
             
              $LIBRUBYARG_STATIC.gsub!(/-static/, '')
         
     | 
| 
         @@ -99,12 +99,22 @@ def asplode(lib) 
     | 
|
| 
       99 
99 
     | 
    
         
             
              abort "-----\n#{lib} is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.\n-----"
         
     | 
| 
       100 
100 
     | 
    
         
             
            end
         
     | 
| 
       101 
101 
     | 
    
         | 
| 
       102 
     | 
    
         
            -
            pkg_config('libxslt') 
     | 
| 
      
 102 
     | 
    
         
            +
            pkg_config('libxslt')
         
     | 
| 
      
 103 
     | 
    
         
            +
            pkg_config('libxml-2.0')
         
     | 
| 
      
 104 
     | 
    
         
            +
            pkg_config('libiconv')
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
            def have_iconv?
         
     | 
| 
      
 107 
     | 
    
         
            +
              %w{ iconv_open libiconv_open }.any? do |method|
         
     | 
| 
      
 108 
     | 
    
         
            +
                have_func(method, 'iconv.h') or
         
     | 
| 
      
 109 
     | 
    
         
            +
                  have_library('iconv', method, 'iconv.h') or
         
     | 
| 
      
 110 
     | 
    
         
            +
                  find_library('iconv', method, 'iconv.h')
         
     | 
| 
      
 111 
     | 
    
         
            +
              end
         
     | 
| 
      
 112 
     | 
    
         
            +
            end
         
     | 
| 
       103 
113 
     | 
    
         | 
| 
       104 
114 
     | 
    
         
             
            asplode "libxml2"  unless find_header('libxml/parser.h')
         
     | 
| 
       105 
115 
     | 
    
         
             
            asplode "libxslt"  unless find_header('libxslt/xslt.h')
         
     | 
| 
       106 
116 
     | 
    
         
             
            asplode "libexslt" unless find_header('libexslt/exslt.h')
         
     | 
| 
       107 
     | 
    
         
            -
            # asplode "libiconv" unless  
     | 
| 
      
 117 
     | 
    
         
            +
            # asplode "libiconv" unless have_iconv?
         
     | 
| 
       108 
118 
     | 
    
         
             
            asplode "libxml2"  unless find_library("#{lib_prefix}xml2", 'xmlParseDoc')
         
     | 
| 
       109 
119 
     | 
    
         
             
            asplode "libxslt"  unless find_library("#{lib_prefix}xslt", 'xsltParseStylesheetDoc')
         
     | 
| 
       110 
120 
     | 
    
         
             
            asplode "libexslt" unless find_library("#{lib_prefix}exslt", 'exsltFuncRegister')
         
     | 
    
        data/ext/nokogiri/nokogiri.c
    CHANGED
    
    | 
         @@ -43,6 +43,26 @@ void vasprintf_free (void *p) 
     | 
|
| 
       43 
43 
     | 
    
         
             
            #endif
         
     | 
| 
       44 
44 
     | 
    
         
             
            #endif
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
      
 46 
     | 
    
         
            +
            void nokogiri_root_node(xmlNodePtr node)
         
     | 
| 
      
 47 
     | 
    
         
            +
            {
         
     | 
| 
      
 48 
     | 
    
         
            +
              xmlDocPtr doc;
         
     | 
| 
      
 49 
     | 
    
         
            +
              nokogiriTuplePtr tuple;
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              doc = node->doc;
         
     | 
| 
      
 52 
     | 
    
         
            +
              if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
         
     | 
| 
      
 53 
     | 
    
         
            +
              tuple = (nokogiriTuplePtr)doc->_private;
         
     | 
| 
      
 54 
     | 
    
         
            +
              st_insert(tuple->unlinkedNodes, (st_data_t)node, (st_data_t)node);
         
     | 
| 
      
 55 
     | 
    
         
            +
            }
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            void nokogiri_root_nsdef(xmlNsPtr ns, xmlDocPtr doc)
         
     | 
| 
      
 58 
     | 
    
         
            +
            {
         
     | 
| 
      
 59 
     | 
    
         
            +
              nokogiriTuplePtr tuple;
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
         
     | 
| 
      
 62 
     | 
    
         
            +
              tuple = (nokogiriTuplePtr)doc->_private;
         
     | 
| 
      
 63 
     | 
    
         
            +
              st_insert(tuple->unlinkedNodes, (st_data_t)ns, (st_data_t)ns);
         
     | 
| 
      
 64 
     | 
    
         
            +
            }
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
       46 
66 
     | 
    
         
             
            void Init_nokogiri()
         
     | 
| 
       47 
67 
     | 
    
         
             
            {
         
     | 
| 
       48 
68 
     | 
    
         
             
            #if !defined(__MACRUBY__) && !defined(MAGLEV)
         
     | 
    
        data/ext/nokogiri/nokogiri.h
    CHANGED
    
    | 
         @@ -120,11 +120,8 @@ extern VALUE mNokogiriHtml ; 
     | 
|
| 
       120 
120 
     | 
    
         
             
            extern VALUE mNokogiriHtmlSax ;
         
     | 
| 
       121 
121 
     | 
    
         
             
            extern VALUE mNokogiriXslt ;
         
     | 
| 
       122 
122 
     | 
    
         | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
            #define NOKOGIRI_ROOT_NSDEF(_nsDef, _doc)     \
         
     | 
| 
       127 
     | 
    
         
            -
              st_insert(((nokogiriTuplePtr)(_doc)->_private)->unlinkedNodes, (st_data_t)(_nsDef), (st_data_t)(_nsDef))
         
     | 
| 
      
 123 
     | 
    
         
            +
            void nokogiri_root_node(xmlNodePtr);
         
     | 
| 
      
 124 
     | 
    
         
            +
            void nokogiri_root_nsdef(xmlNsPtr, xmlDocPtr);
         
     | 
| 
       128 
125 
     | 
    
         | 
| 
       129 
126 
     | 
    
         
             
            #ifdef DEBUG
         
     | 
| 
       130 
127 
     | 
    
         | 
    
        data/ext/nokogiri/xml_attr.c
    CHANGED
    
    
    
        data/ext/nokogiri/xml_cdata.c
    CHANGED
    
    | 
         @@ -25,7 +25,7 @@ static VALUE new(int argc, VALUE *argv, VALUE klass) 
     | 
|
| 
       25 
25 
     | 
    
         
             
                  NIL_P(content) ? 0 : (int)RSTRING_LEN(content)
         
     | 
| 
       26 
26 
     | 
    
         
             
              );
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
               
     | 
| 
      
 28 
     | 
    
         
            +
              nokogiri_root_node(node);
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
              rb_node = Nokogiri_wrap_xml_node(klass, node);
         
     | 
| 
       31 
31 
     | 
    
         
             
              rb_obj_call_init(rb_node, argc, argv);
         
     | 
    
        data/ext/nokogiri/xml_comment.c
    CHANGED
    
    
    
        data/ext/nokogiri/xml_document.c
    CHANGED
    
    | 
         @@ -102,7 +102,7 @@ static VALUE set_root(VALUE self, VALUE root) 
     | 
|
| 
       102 
102 
     | 
    
         | 
| 
       103 
103 
     | 
    
         
             
                if(old_root) {
         
     | 
| 
       104 
104 
     | 
    
         
             
                  xmlUnlinkNode(old_root);
         
     | 
| 
       105 
     | 
    
         
            -
                   
     | 
| 
      
 105 
     | 
    
         
            +
                  nokogiri_root_node(old_root);
         
     | 
| 
       106 
106 
     | 
    
         
             
                }
         
     | 
| 
       107 
107 
     | 
    
         | 
| 
       108 
108 
     | 
    
         
             
                return root;
         
     | 
| 
         @@ -121,7 +121,7 @@ static VALUE set_root(VALUE self, VALUE root) 
     | 
|
| 
       121 
121 
     | 
    
         
             
              }
         
     | 
| 
       122 
122 
     | 
    
         | 
| 
       123 
123 
     | 
    
         
             
              xmlDocSetRootElement(doc, new_root);
         
     | 
| 
       124 
     | 
    
         
            -
              if(old_root)  
     | 
| 
      
 124 
     | 
    
         
            +
              if(old_root) nokogiri_root_node(old_root);
         
     | 
| 
       125 
125 
     | 
    
         
             
              return root;
         
     | 
| 
       126 
126 
     | 
    
         
             
            }
         
     | 
| 
       127 
127 
     | 
    
         | 
    
        data/ext/nokogiri/xml_node.c
    CHANGED
    
    | 
         @@ -51,7 +51,7 @@ static void relink_namespace(xmlNodePtr reparented) 
     | 
|
| 
       51 
51 
     | 
    
         
             
                    } else {
         
     | 
| 
       52 
52 
     | 
    
         
             
                      reparented->nsDef = curr->next;
         
     | 
| 
       53 
53 
     | 
    
         
             
                    }
         
     | 
| 
       54 
     | 
    
         
            -
                     
     | 
| 
      
 54 
     | 
    
         
            +
                    nokogiri_root_nsdef(curr, reparented->doc);
         
     | 
| 
       55 
55 
     | 
    
         
             
                  } else {
         
     | 
| 
       56 
56 
     | 
    
         
             
                    prev = curr;
         
     | 
| 
       57 
57 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -132,7 +132,7 @@ static VALUE reparent_node_with(VALUE pivot_obj, VALUE reparentee_obj, pivot_rep 
     | 
|
| 
       132 
132 
     | 
    
         
             
                 *  uninteresting libxml2 implementation detail). as a result, we cannot
         
     | 
| 
       133 
133 
     | 
    
         
             
                 *  reparent the actual reparentee, so we reparent a duplicate.
         
     | 
| 
       134 
134 
     | 
    
         
             
                 */
         
     | 
| 
       135 
     | 
    
         
            -
                 
     | 
| 
      
 135 
     | 
    
         
            +
                nokogiri_root_node(reparentee);
         
     | 
| 
       136 
136 
     | 
    
         
             
                if (!(reparentee = xmlDocCopyNode(reparentee, pivot->doc, 1))) {
         
     | 
| 
       137 
137 
     | 
    
         
             
                  rb_raise(rb_eRuntimeError, "Could not reparent node (xmlDocCopyNode)");
         
     | 
| 
       138 
138 
     | 
    
         
             
                }
         
     | 
| 
         @@ -162,7 +162,7 @@ static VALUE reparent_node_with(VALUE pivot_obj, VALUE reparentee_obj, pivot_rep 
     | 
|
| 
       162 
162 
     | 
    
         
             
                new_next_text = xmlDocCopyNode(next_text, pivot->doc, 1) ;
         
     | 
| 
       163 
163 
     | 
    
         | 
| 
       164 
164 
     | 
    
         
             
                xmlUnlinkNode(next_text);
         
     | 
| 
       165 
     | 
    
         
            -
                 
     | 
| 
      
 165 
     | 
    
         
            +
                nokogiri_root_node(next_text);
         
     | 
| 
       166 
166 
     | 
    
         | 
| 
       167 
167 
     | 
    
         
             
                xmlAddNextSibling(pivot, new_next_text);
         
     | 
| 
       168 
168 
     | 
    
         
             
              }
         
     | 
| 
         @@ -375,7 +375,7 @@ static VALUE duplicate_node(int argc, VALUE *argv, VALUE self) 
     | 
|
| 
       375 
375 
     | 
    
         
             
              dup = xmlDocCopyNode(node, node->doc, (int)NUM2INT(level));
         
     | 
| 
       376 
376 
     | 
    
         
             
              if(dup == NULL) return Qnil;
         
     | 
| 
       377 
377 
     | 
    
         | 
| 
       378 
     | 
    
         
            -
               
     | 
| 
      
 378 
     | 
    
         
            +
              nokogiri_root_node(dup);
         
     | 
| 
       379 
379 
     | 
    
         | 
| 
       380 
380 
     | 
    
         
             
              return Nokogiri_wrap_xml_node(rb_obj_class(self), dup);
         
     | 
| 
       381 
381 
     | 
    
         
             
            }
         
     | 
| 
         @@ -391,7 +391,7 @@ static VALUE unlink_node(VALUE self) 
     | 
|
| 
       391 
391 
     | 
    
         
             
              xmlNodePtr node;
         
     | 
| 
       392 
392 
     | 
    
         
             
              Data_Get_Struct(self, xmlNode, node);
         
     | 
| 
       393 
393 
     | 
    
         
             
              xmlUnlinkNode(node);
         
     | 
| 
       394 
     | 
    
         
            -
               
     | 
| 
      
 394 
     | 
    
         
            +
              nokogiri_root_node(node);
         
     | 
| 
       395 
395 
     | 
    
         
             
              return self;
         
     | 
| 
       396 
396 
     | 
    
         
             
            }
         
     | 
| 
       397 
397 
     | 
    
         | 
| 
         @@ -489,7 +489,7 @@ static VALUE replace(VALUE self, VALUE new_node) 
     | 
|
| 
       489 
489 
     | 
    
         | 
| 
       490 
490 
     | 
    
         
             
                xmlNodePtr pivot;
         
     | 
| 
       491 
491 
     | 
    
         
             
                Data_Get_Struct(self, xmlNode, pivot);
         
     | 
| 
       492 
     | 
    
         
            -
                 
     | 
| 
      
 492 
     | 
    
         
            +
                nokogiri_root_node(pivot);
         
     | 
| 
       493 
493 
     | 
    
         | 
| 
       494 
494 
     | 
    
         
             
                return reparent;
         
     | 
| 
       495 
495 
     | 
    
         
             
            }
         
     | 
| 
         @@ -681,7 +681,7 @@ static VALUE set(VALUE self, VALUE property, VALUE value) 
     | 
|
| 
       681 
681 
     | 
    
         
             
              if (prop && prop->children) {
         
     | 
| 
       682 
682 
     | 
    
         
             
                for (cur = prop->children; cur; cur = cur->next) {
         
     | 
| 
       683 
683 
     | 
    
         
             
                  if (cur->_private) {
         
     | 
| 
       684 
     | 
    
         
            -
                     
     | 
| 
      
 684 
     | 
    
         
            +
                    nokogiri_root_node(cur);
         
     | 
| 
       685 
685 
     | 
    
         
             
                    xmlUnlinkNode(cur);
         
     | 
| 
       686 
686 
     | 
    
         
             
                  }
         
     | 
| 
       687 
687 
     | 
    
         
             
                }
         
     | 
| 
         @@ -901,7 +901,7 @@ static VALUE set_content(VALUE self, VALUE content) 
     | 
|
| 
       901 
901 
     | 
    
         
             
              while (NULL != child) {
         
     | 
| 
       902 
902 
     | 
    
         
             
                next = child->next ;
         
     | 
| 
       903 
903 
     | 
    
         
             
                xmlUnlinkNode(child) ;
         
     | 
| 
       904 
     | 
    
         
            -
                 
     | 
| 
      
 904 
     | 
    
         
            +
                nokogiri_root_node(child);
         
     | 
| 
       905 
905 
     | 
    
         
             
                child = next ;
         
     | 
| 
       906 
906 
     | 
    
         
             
              }
         
     | 
| 
       907 
907 
     | 
    
         | 
| 
         @@ -1133,7 +1133,7 @@ static VALUE new(int argc, VALUE *argv, VALUE klass) 
     | 
|
| 
       1133 
1133 
     | 
    
         | 
| 
       1134 
1134 
     | 
    
         
             
              node = xmlNewNode(NULL, (xmlChar *)StringValuePtr(name));
         
     | 
| 
       1135 
1135 
     | 
    
         
             
              node->doc = doc->doc;
         
     | 
| 
       1136 
     | 
    
         
            -
               
     | 
| 
      
 1136 
     | 
    
         
            +
              nokogiri_root_node(node);
         
     | 
| 
       1137 
1137 
     | 
    
         | 
| 
       1138 
1138 
     | 
    
         
             
              rb_node = Nokogiri_wrap_xml_node(
         
     | 
| 
       1139 
1139 
     | 
    
         
             
                  klass == cNokogiriXmlNode ? Qnil : klass,
         
     | 
| 
         @@ -1322,6 +1322,7 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node) 
     | 
|
| 
       1322 
1322 
     | 
    
         
             
              VALUE node_cache = Qnil ;
         
     | 
| 
       1323 
1323 
     | 
    
         
             
              VALUE rb_node = Qnil ;
         
     | 
| 
       1324 
1324 
     | 
    
         
             
              nokogiriTuplePtr node_has_a_document;
         
     | 
| 
      
 1325 
     | 
    
         
            +
              xmlDocPtr doc;
         
     | 
| 
       1325 
1326 
     | 
    
         
             
              void (*mark_method)(xmlNodePtr) = NULL ;
         
     | 
| 
       1326 
1327 
     | 
    
         | 
| 
       1327 
1328 
     | 
    
         
             
              assert(node);
         
     | 
| 
         @@ -1332,7 +1333,9 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node) 
     | 
|
| 
       1332 
1333 
     | 
    
         
             
              /* It's OK if the node doesn't have a fully-realized document (as in XML::Reader). */
         
     | 
| 
       1333 
1334 
     | 
    
         
             
              /* see https://github.com/tenderlove/nokogiri/issues/95 */
         
     | 
| 
       1334 
1335 
     | 
    
         
             
              /* and https://github.com/tenderlove/nokogiri/issues/439 */
         
     | 
| 
       1335 
     | 
    
         
            -
               
     | 
| 
      
 1336 
     | 
    
         
            +
              doc = node->doc;
         
     | 
| 
      
 1337 
     | 
    
         
            +
              if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
         
     | 
| 
      
 1338 
     | 
    
         
            +
              node_has_a_document = DOC_RUBY_OBJECT_TEST(doc);
         
     | 
| 
       1336 
1339 
     | 
    
         | 
| 
       1337 
1340 
     | 
    
         
             
              if(node->_private && node_has_a_document)
         
     | 
| 
       1338 
1341 
     | 
    
         
             
                return (VALUE)node->_private;
         
     | 
| 
         @@ -1397,8 +1400,8 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node) 
     | 
|
| 
       1397 
1400 
     | 
    
         
             
              node->_private = (void *)rb_node;
         
     | 
| 
       1398 
1401 
     | 
    
         | 
| 
       1399 
1402 
     | 
    
         
             
              if (node_has_a_document) {
         
     | 
| 
       1400 
     | 
    
         
            -
                document = DOC_RUBY_OBJECT( 
     | 
| 
       1401 
     | 
    
         
            -
                node_cache = DOC_NODE_CACHE( 
     | 
| 
      
 1403 
     | 
    
         
            +
                document = DOC_RUBY_OBJECT(doc);
         
     | 
| 
      
 1404 
     | 
    
         
            +
                node_cache = DOC_NODE_CACHE(doc);
         
     | 
| 
       1402 
1405 
     | 
    
         
             
                rb_ary_push(node_cache, rb_node);
         
     | 
| 
       1403 
1406 
     | 
    
         
             
                rb_funcall(document, decorate, 1, rb_node);
         
     | 
| 
       1404 
1407 
     | 
    
         
             
              }
         
     | 
    
        data/ext/nokogiri/xml_text.c
    CHANGED
    
    | 
         @@ -22,7 +22,7 @@ static VALUE new(int argc, VALUE *argv, VALUE klass) 
     | 
|
| 
       22 
22 
     | 
    
         
             
              node = xmlNewText((xmlChar *)StringValuePtr(string));
         
     | 
| 
       23 
23 
     | 
    
         
             
              node->doc = doc->doc;
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
               
     | 
| 
      
 25 
     | 
    
         
            +
              nokogiri_root_node(node);
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
              rb_node = Nokogiri_wrap_xml_node(klass, node) ;
         
     | 
| 
       28 
28 
     | 
    
         
             
              rb_obj_call_init(rb_node, argc, argv);
         
     | 
    
        data/lib/nokogiri/version.rb
    CHANGED
    
    
| 
         @@ -3,10 +3,11 @@ module Nokogiri 
     | 
|
| 
       3 
3 
     | 
    
         
             
                ##
         
     | 
| 
       4 
4 
     | 
    
         
             
                # Nokogiri::XML::Document is the main entry point for dealing with
         
     | 
| 
       5 
5 
     | 
    
         
             
                # XML documents.  The Document is created by parsing an XML document.
         
     | 
| 
       6 
     | 
    
         
            -
                # See Nokogiri. 
     | 
| 
      
 6 
     | 
    
         
            +
                # See Nokogiri::XML::Document.parse() for more information on parsing.
         
     | 
| 
       7 
7 
     | 
    
         
             
                #
         
     | 
| 
       8 
8 
     | 
    
         
             
                # For searching a Document, see Nokogiri::XML::Node#css and
         
     | 
| 
       9 
9 
     | 
    
         
             
                # Nokogiri::XML::Node#xpath
         
     | 
| 
      
 10 
     | 
    
         
            +
                #
         
     | 
| 
       10 
11 
     | 
    
         
             
                class Document < Nokogiri::XML::Node
         
     | 
| 
       11 
12 
     | 
    
         
             
                  # I'm ignoring unicode characters here.
         
     | 
| 
       12 
13 
     | 
    
         
             
                  # See http://www.w3.org/TR/REC-xml-names/#ns-decl for more details.
         
     | 
| 
         @@ -15,13 +16,30 @@ module Nokogiri 
     | 
|
| 
       15 
16 
     | 
    
         
             
                  NCNAME_RE         = /^xmlns(:[#{NCNAME_START_CHAR}][#{NCNAME_CHAR}]*)?$/
         
     | 
| 
       16 
17 
     | 
    
         | 
| 
       17 
18 
     | 
    
         
             
                  ##
         
     | 
| 
       18 
     | 
    
         
            -
                  # Parse an XML file. 
     | 
| 
       19 
     | 
    
         
            -
                  # 
     | 
| 
       20 
     | 
    
         
            -
                  # + 
     | 
| 
       21 
     | 
    
         
            -
                  #  
     | 
| 
       22 
     | 
    
         
            -
                  # 
     | 
| 
       23 
     | 
    
         
            -
                  #  
     | 
| 
       24 
     | 
    
         
            -
                  # 
     | 
| 
      
 19 
     | 
    
         
            +
                  # Parse an XML file.
         
     | 
| 
      
 20 
     | 
    
         
            +
                  #
         
     | 
| 
      
 21 
     | 
    
         
            +
                  # +string_or_io+ may be a String, or any object that responds to
         
     | 
| 
      
 22 
     | 
    
         
            +
                  # _read_ and _close_ such as an IO, or StringIO.
         
     | 
| 
      
 23 
     | 
    
         
            +
                  #
         
     | 
| 
      
 24 
     | 
    
         
            +
                  # +url+ (optional) is the URI where this document is located.
         
     | 
| 
      
 25 
     | 
    
         
            +
                  #
         
     | 
| 
      
 26 
     | 
    
         
            +
                  # +encoding+ (optional) is the encoding that should be used when processing
         
     | 
| 
      
 27 
     | 
    
         
            +
                  # the document.
         
     | 
| 
      
 28 
     | 
    
         
            +
                  #
         
     | 
| 
      
 29 
     | 
    
         
            +
                  # +options+ (optional) is a configuration object that sets options during
         
     | 
| 
      
 30 
     | 
    
         
            +
                  # parsing, such as Nokogiri::XML::ParseOptions::RECOVER. See the
         
     | 
| 
      
 31 
     | 
    
         
            +
                  # Nokogiri::XML::ParseOptions for more information.
         
     | 
| 
      
 32 
     | 
    
         
            +
                  #
         
     | 
| 
      
 33 
     | 
    
         
            +
                  # +block+ (optional) is passed a configuration object on which
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # parse options may be set.
         
     | 
| 
      
 35 
     | 
    
         
            +
                  #
         
     | 
| 
      
 36 
     | 
    
         
            +
                  # When parsing untrusted documents, it's recommended that the
         
     | 
| 
      
 37 
     | 
    
         
            +
                  # +nonet+ option be used, as shown in this example code:
         
     | 
| 
      
 38 
     | 
    
         
            +
                  #
         
     | 
| 
      
 39 
     | 
    
         
            +
                  #   Nokogiri::XML::Document.parse(xml_string) { |config| config.nonet }
         
     | 
| 
      
 40 
     | 
    
         
            +
                  #
         
     | 
| 
      
 41 
     | 
    
         
            +
                  # Nokogiri.XML() is a convenience method which will call this method.
         
     | 
| 
      
 42 
     | 
    
         
            +
                  #
         
     | 
| 
       25 
43 
     | 
    
         
             
                  def self.parse string_or_io, url = nil, encoding = nil, options = ParseOptions::DEFAULT_XML, &block
         
     | 
| 
       26 
44 
     | 
    
         
             
                    options = Nokogiri::XML::ParseOptions.new(options) if Fixnum === options
         
     | 
| 
       27 
45 
     | 
    
         
             
                    # Give the options to the user
         
     | 
    
        data/lib/nokogiri/xml/node.rb
    CHANGED
    
    
| 
         @@ -27,7 +27,7 @@ module Nokogiri 
     | 
|
| 
       27 
27 
     | 
    
         
             
                  SAX1        = 1 << 9
         
     | 
| 
       28 
28 
     | 
    
         
             
                  # Implement XInclude substitution
         
     | 
| 
       29 
29 
     | 
    
         
             
                  XINCLUDE    = 1 << 10
         
     | 
| 
       30 
     | 
    
         
            -
                  # Forbid network access
         
     | 
| 
      
 30 
     | 
    
         
            +
                  # Forbid network access. Recommended for dealing with untrusted documents.
         
     | 
| 
       31 
31 
     | 
    
         
             
                  NONET       = 1 << 11
         
     | 
| 
       32 
32 
     | 
    
         
             
                  # Do not reuse the context dictionary
         
     | 
| 
       33 
33 
     | 
    
         
             
                  NODICT      = 1 << 12
         
     | 
| 
         @@ -47,7 +47,7 @@ module Nokogiri 
     | 
|
| 
       47 
47 
     | 
    
         
             
                  HUGE        = 1 << 19
         
     | 
| 
       48 
48 
     | 
    
         | 
| 
       49 
49 
     | 
    
         
             
                  # the default options used for parsing XML documents
         
     | 
| 
       50 
     | 
    
         
            -
                  DEFAULT_XML  = RECOVER
         
     | 
| 
      
 50 
     | 
    
         
            +
                  DEFAULT_XML  = RECOVER | NONET
         
     | 
| 
       51 
51 
     | 
    
         
             
                  # the default options used for parsing HTML documents
         
     | 
| 
       52 
52 
     | 
    
         
             
                  DEFAULT_HTML = RECOVER | NOERROR | NOWARNING | NONET
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
         @@ -64,6 +64,11 @@ module Nokogiri 
     | 
|
| 
       64 
64 
     | 
    
         
             
                        self
         
     | 
| 
       65 
65 
     | 
    
         
             
                      end
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
      
 67 
     | 
    
         
            +
                      def no#{constant.downcase}
         
     | 
| 
      
 68 
     | 
    
         
            +
                        @options &= ~#{constant}
         
     | 
| 
      
 69 
     | 
    
         
            +
                        self
         
     | 
| 
      
 70 
     | 
    
         
            +
                      end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
       67 
72 
     | 
    
         
             
                      def #{constant.downcase}?
         
     | 
| 
       68 
73 
     | 
    
         
             
                        #{constant} & @options == #{constant}
         
     | 
| 
       69 
74 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -176,6 +176,11 @@ module Nokogiri 
     | 
|
| 
       176 
176 
     | 
    
         
             
                    assert fragment.children.respond_to?(:awesome!), fragment.children.class
         
     | 
| 
       177 
177 
     | 
    
         
             
                  end
         
     | 
| 
       178 
178 
     | 
    
         | 
| 
      
 179 
     | 
    
         
            +
                  def test_add_node_to_doc_fragment_segfault
         
     | 
| 
      
 180 
     | 
    
         
            +
                    frag = Nokogiri::XML::DocumentFragment.new(@xml, '<p>hello world</p>')
         
     | 
| 
      
 181 
     | 
    
         
            +
                    Nokogiri::XML::Comment.new(frag,'moo')
         
     | 
| 
      
 182 
     | 
    
         
            +
                  end
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
       179 
184 
     | 
    
         
             
                  if Nokogiri.uses_libxml?
         
     | 
| 
       180 
185 
     | 
    
         
             
                    def test_for_libxml_in_context_fragment_parsing_bug_workaround
         
     | 
| 
       181 
186 
     | 
    
         
             
                      10.times do
         
     | 
    
        data/test/xml/test_node.rb
    CHANGED
    
    | 
         @@ -454,6 +454,11 @@ module Nokogiri 
     | 
|
| 
       454 
454 
     | 
    
         
             
                    assert_equal node, @xml.xpath('//address').first
         
     | 
| 
       455 
455 
     | 
    
         
             
                  end
         
     | 
| 
       456 
456 
     | 
    
         | 
| 
      
 457 
     | 
    
         
            +
                  def test_at_self
         
     | 
| 
      
 458 
     | 
    
         
            +
                    node = @xml.at('address')
         
     | 
| 
      
 459 
     | 
    
         
            +
                    assert_equal node, node.at('.')
         
     | 
| 
      
 460 
     | 
    
         
            +
                  end
         
     | 
| 
      
 461 
     | 
    
         
            +
             
     | 
| 
       457 
462 
     | 
    
         
             
                  def test_at_xpath
         
     | 
| 
       458 
463 
     | 
    
         
             
                    node = @xml.at_xpath('//address')
         
     | 
| 
       459 
464 
     | 
    
         
             
                    nodes = @xml.xpath('//address')
         
     | 
| 
         @@ -740,6 +745,11 @@ module Nokogiri 
     | 
|
| 
       740 
745 
     | 
    
         
             
                    assert_equal node.parent, parent_node
         
     | 
| 
       741 
746 
     | 
    
         
             
                  end
         
     | 
| 
       742 
747 
     | 
    
         | 
| 
      
 748 
     | 
    
         
            +
                  def test_search_self
         
     | 
| 
      
 749 
     | 
    
         
            +
                    node = @xml.at('//employee')
         
     | 
| 
      
 750 
     | 
    
         
            +
                    assert_equal node.search('.').to_a, [node]
         
     | 
| 
      
 751 
     | 
    
         
            +
                  end
         
     | 
| 
      
 752 
     | 
    
         
            +
             
     | 
| 
       743 
753 
     | 
    
         
             
                  def test_search_by_symbol
         
     | 
| 
       744 
754 
     | 
    
         
             
                    assert set = @xml.search(:employee)
         
     | 
| 
       745 
755 
     | 
    
         
             
                    assert 5, set.length
         
     | 
    
        data/test/xml/test_node_set.rb
    CHANGED
    
    | 
         @@ -146,6 +146,11 @@ module Nokogiri 
     | 
|
| 
       146 
146 
     | 
    
         
             
                    assert_equal @xml.xpath('//employee'), custom_employees
         
     | 
| 
       147 
147 
     | 
    
         
             
                  end
         
     | 
| 
       148 
148 
     | 
    
         | 
| 
      
 149 
     | 
    
         
            +
                  def test_search_self
         
     | 
| 
      
 150 
     | 
    
         
            +
                    set = @xml.xpath('//staff')
         
     | 
| 
      
 151 
     | 
    
         
            +
                    assert_equal set.to_a, set.search('.').to_a
         
     | 
| 
      
 152 
     | 
    
         
            +
                  end
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
       149 
154 
     | 
    
         
             
                  def test_search_with_custom_object
         
     | 
| 
       150 
155 
     | 
    
         
             
                    set = @xml.xpath('//staff')
         
     | 
| 
       151 
156 
     | 
    
         
             
                    custom_employees = set.search('//*[awesome(.)]', Class.new {
         
     | 
| 
         @@ -35,6 +35,18 @@ module Nokogiri 
     | 
|
| 
       35 
35 
     | 
    
         
             
                    assert_equal 1 << 1, options.options
         
     | 
| 
       36 
36 
     | 
    
         
             
                  end
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
      
 38 
     | 
    
         
            +
                  def test_unsetting
         
     | 
| 
      
 39 
     | 
    
         
            +
                    options = Nokogiri::XML::ParseOptions.new Nokogiri::XML::ParseOptions::DEFAULT_HTML
         
     | 
| 
      
 40 
     | 
    
         
            +
                    assert options.nonet?
         
     | 
| 
      
 41 
     | 
    
         
            +
                    assert options.recover?
         
     | 
| 
      
 42 
     | 
    
         
            +
                    options.nononet.norecover
         
     | 
| 
      
 43 
     | 
    
         
            +
                    assert ! options.nonet?
         
     | 
| 
      
 44 
     | 
    
         
            +
                    assert ! options.recover?
         
     | 
| 
      
 45 
     | 
    
         
            +
                    options.nonet.recover
         
     | 
| 
      
 46 
     | 
    
         
            +
                    assert options.nonet?
         
     | 
| 
      
 47 
     | 
    
         
            +
                    assert options.recover?
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
       38 
50 
     | 
    
         
             
                  def test_chaining
         
     | 
| 
       39 
51 
     | 
    
         
             
                    options = Nokogiri::XML::ParseOptions.new.recover.noent
         
     | 
| 
       40 
52 
     | 
    
         
             
                    assert options.recover?
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: nokogiri-maglev-
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.5. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.5.4.20120815005250
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
       8 
8 
     | 
    
         
             
            - Aaron Patterson
         
     | 
| 
       9 
9 
     | 
    
         
             
            - Mike Dalessio
         
     | 
| 
       10 
10 
     | 
    
         
             
            - Yoko Harada
         
     | 
| 
      
 11 
     | 
    
         
            +
            - Tim Elliott
         
     | 
| 
       11 
12 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       12 
13 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       13 
14 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
         @@ -15,7 +16,7 @@ date: 2012-08-14 00:00:00.000000000 Z 
     | 
|
| 
       15 
16 
     | 
    
         
             
            dependencies:
         
     | 
| 
       16 
17 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       17 
18 
     | 
    
         
             
              name: hoe-bundler
         
     | 
| 
       18 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 19 
     | 
    
         
            +
              requirement: &70249603047560 !ruby/object:Gem::Requirement
         
     | 
| 
       19 
20 
     | 
    
         
             
                none: false
         
     | 
| 
       20 
21 
     | 
    
         
             
                requirements:
         
     | 
| 
       21 
22 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -23,10 +24,10 @@ dependencies: 
     | 
|
| 
       23 
24 
     | 
    
         
             
                    version: '1.1'
         
     | 
| 
       24 
25 
     | 
    
         
             
              type: :development
         
     | 
| 
       25 
26 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       26 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 27 
     | 
    
         
            +
              version_requirements: *70249603047560
         
     | 
| 
       27 
28 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
29 
     | 
    
         
             
              name: hoe-debugging
         
     | 
| 
       29 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 30 
     | 
    
         
            +
              requirement: &70249603045740 !ruby/object:Gem::Requirement
         
     | 
| 
       30 
31 
     | 
    
         
             
                none: false
         
     | 
| 
       31 
32 
     | 
    
         
             
                requirements:
         
     | 
| 
       32 
33 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -34,10 +35,10 @@ dependencies: 
     | 
|
| 
       34 
35 
     | 
    
         
             
                    version: 1.0.3
         
     | 
| 
       35 
36 
     | 
    
         
             
              type: :development
         
     | 
| 
       36 
37 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       37 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 38 
     | 
    
         
            +
              version_requirements: *70249603045740
         
     | 
| 
       38 
39 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       39 
40 
     | 
    
         
             
              name: hoe-gemspec
         
     | 
| 
       40 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 41 
     | 
    
         
            +
              requirement: &70249603044800 !ruby/object:Gem::Requirement
         
     | 
| 
       41 
42 
     | 
    
         
             
                none: false
         
     | 
| 
       42 
43 
     | 
    
         
             
                requirements:
         
     | 
| 
       43 
44 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -45,10 +46,10 @@ dependencies: 
     | 
|
| 
       45 
46 
     | 
    
         
             
                    version: '1.0'
         
     | 
| 
       46 
47 
     | 
    
         
             
              type: :development
         
     | 
| 
       47 
48 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       48 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 49 
     | 
    
         
            +
              version_requirements: *70249603044800
         
     | 
| 
       49 
50 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       50 
51 
     | 
    
         
             
              name: hoe-git
         
     | 
| 
       51 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 52 
     | 
    
         
            +
              requirement: &70249603043820 !ruby/object:Gem::Requirement
         
     | 
| 
       52 
53 
     | 
    
         
             
                none: false
         
     | 
| 
       53 
54 
     | 
    
         
             
                requirements:
         
     | 
| 
       54 
55 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -56,10 +57,10 @@ dependencies: 
     | 
|
| 
       56 
57 
     | 
    
         
             
                    version: '1.4'
         
     | 
| 
       57 
58 
     | 
    
         
             
              type: :development
         
     | 
| 
       58 
59 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       59 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 60 
     | 
    
         
            +
              version_requirements: *70249603043820
         
     | 
| 
       60 
61 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       61 
62 
     | 
    
         
             
              name: mini_portile
         
     | 
| 
       62 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 63 
     | 
    
         
            +
              requirement: &70249603042500 !ruby/object:Gem::Requirement
         
     | 
| 
       63 
64 
     | 
    
         
             
                none: false
         
     | 
| 
       64 
65 
     | 
    
         
             
                requirements:
         
     | 
| 
       65 
66 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -67,10 +68,10 @@ dependencies: 
     | 
|
| 
       67 
68 
     | 
    
         
             
                    version: 0.2.2
         
     | 
| 
       68 
69 
     | 
    
         
             
              type: :development
         
     | 
| 
       69 
70 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       70 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 71 
     | 
    
         
            +
              version_requirements: *70249603042500
         
     | 
| 
       71 
72 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       72 
73 
     | 
    
         
             
              name: minitest
         
     | 
| 
       73 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 74 
     | 
    
         
            +
              requirement: &70249603041740 !ruby/object:Gem::Requirement
         
     | 
| 
       74 
75 
     | 
    
         
             
                none: false
         
     | 
| 
       75 
76 
     | 
    
         
             
                requirements:
         
     | 
| 
       76 
77 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -78,10 +79,10 @@ dependencies: 
     | 
|
| 
       78 
79 
     | 
    
         
             
                    version: 2.2.2
         
     | 
| 
       79 
80 
     | 
    
         
             
              type: :development
         
     | 
| 
       80 
81 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       81 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 82 
     | 
    
         
            +
              version_requirements: *70249603041740
         
     | 
| 
       82 
83 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       83 
84 
     | 
    
         
             
              name: racc
         
     | 
| 
       84 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 85 
     | 
    
         
            +
              requirement: &70249603040980 !ruby/object:Gem::Requirement
         
     | 
| 
       85 
86 
     | 
    
         
             
                none: false
         
     | 
| 
       86 
87 
     | 
    
         
             
                requirements:
         
     | 
| 
       87 
88 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -89,10 +90,21 @@ dependencies: 
     | 
|
| 
       89 
90 
     | 
    
         
             
                    version: 1.4.6
         
     | 
| 
       90 
91 
     | 
    
         
             
              type: :development
         
     | 
| 
       91 
92 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       92 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 93 
     | 
    
         
            +
              version_requirements: *70249603040980
         
     | 
| 
      
 94 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 95 
     | 
    
         
            +
              name: rake
         
     | 
| 
      
 96 
     | 
    
         
            +
              requirement: &70249603040300 !ruby/object:Gem::Requirement
         
     | 
| 
      
 97 
     | 
    
         
            +
                none: false
         
     | 
| 
      
 98 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 99 
     | 
    
         
            +
                - - ! '>='
         
     | 
| 
      
 100 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 101 
     | 
    
         
            +
                    version: '0.9'
         
     | 
| 
      
 102 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 103 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 104 
     | 
    
         
            +
              version_requirements: *70249603040300
         
     | 
| 
       93 
105 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       94 
106 
     | 
    
         
             
              name: rake-compiler
         
     | 
| 
       95 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 107 
     | 
    
         
            +
              requirement: &70249603101660 !ruby/object:Gem::Requirement
         
     | 
| 
       96 
108 
     | 
    
         
             
                none: false
         
     | 
| 
       97 
109 
     | 
    
         
             
                requirements:
         
     | 
| 
       98 
110 
     | 
    
         
             
                - - =
         
     | 
| 
         @@ -100,10 +112,10 @@ dependencies: 
     | 
|
| 
       100 
112 
     | 
    
         
             
                    version: 0.8.0
         
     | 
| 
       101 
113 
     | 
    
         
             
              type: :development
         
     | 
| 
       102 
114 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       103 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 115 
     | 
    
         
            +
              version_requirements: *70249603101660
         
     | 
| 
       104 
116 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       105 
117 
     | 
    
         
             
              name: rexical
         
     | 
| 
       106 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 118 
     | 
    
         
            +
              requirement: &70249603100880 !ruby/object:Gem::Requirement
         
     | 
| 
       107 
119 
     | 
    
         
             
                none: false
         
     | 
| 
       108 
120 
     | 
    
         
             
                requirements:
         
     | 
| 
       109 
121 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -111,10 +123,10 @@ dependencies: 
     | 
|
| 
       111 
123 
     | 
    
         
             
                    version: 1.0.5
         
     | 
| 
       112 
124 
     | 
    
         
             
              type: :development
         
     | 
| 
       113 
125 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       114 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 126 
     | 
    
         
            +
              version_requirements: *70249603100880
         
     | 
| 
       115 
127 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       116 
128 
     | 
    
         
             
              name: rdoc
         
     | 
| 
       117 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 129 
     | 
    
         
            +
              requirement: &70249603100140 !ruby/object:Gem::Requirement
         
     | 
| 
       118 
130 
     | 
    
         
             
                none: false
         
     | 
| 
       119 
131 
     | 
    
         
             
                requirements:
         
     | 
| 
       120 
132 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -122,10 +134,10 @@ dependencies: 
     | 
|
| 
       122 
134 
     | 
    
         
             
                    version: '3.10'
         
     | 
| 
       123 
135 
     | 
    
         
             
              type: :development
         
     | 
| 
       124 
136 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       125 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 137 
     | 
    
         
            +
              version_requirements: *70249603100140
         
     | 
| 
       126 
138 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       127 
139 
     | 
    
         
             
              name: hoe
         
     | 
| 
       128 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 140 
     | 
    
         
            +
              requirement: &70249603099380 !ruby/object:Gem::Requirement
         
     | 
| 
       129 
141 
     | 
    
         
             
                none: false
         
     | 
| 
       130 
142 
     | 
    
         
             
                requirements:
         
     | 
| 
       131 
143 
     | 
    
         
             
                - - ~>
         
     | 
| 
         @@ -133,7 +145,7 @@ dependencies: 
     | 
|
| 
       133 
145 
     | 
    
         
             
                    version: '2.16'
         
     | 
| 
       134 
146 
     | 
    
         
             
              type: :development
         
     | 
| 
       135 
147 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       136 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 148 
     | 
    
         
            +
              version_requirements: *70249603099380
         
     | 
| 
       137 
149 
     | 
    
         
             
            description: ! 'Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser.  Among Nokogiri''s
         
     | 
| 
       138 
150 
     | 
    
         | 
| 
       139 
151 
     | 
    
         
             
              many features is the ability to search documents via XPath or CSS3 selectors.
         
     | 
| 
         @@ -146,6 +158,7 @@ email: 
     | 
|
| 
       146 
158 
     | 
    
         
             
            - aaronp@rubyforge.org
         
     | 
| 
       147 
159 
     | 
    
         
             
            - mike.dalessio@gmail.com
         
     | 
| 
       148 
160 
     | 
    
         
             
            - yokolet@gmail.com
         
     | 
| 
      
 161 
     | 
    
         
            +
            - tle@holymonkey.com
         
     | 
| 
       149 
162 
     | 
    
         
             
            executables:
         
     | 
| 
       150 
163 
     | 
    
         
             
            - nokogiri
         
     | 
| 
       151 
164 
     | 
    
         
             
            extensions:
         
     | 
| 
         @@ -159,19 +172,13 @@ extra_rdoc_files: 
     | 
|
| 
       159 
172 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       160 
173 
     | 
    
         
             
            - ext/nokogiri/html_element_description.c
         
     | 
| 
       161 
174 
     | 
    
         
             
            - ext/nokogiri/html_entity_lookup.c
         
     | 
| 
       162 
     | 
    
         
            -
            - ext/nokogiri/xml_attr.c
         
     | 
| 
       163 
175 
     | 
    
         
             
            - ext/nokogiri/xml_attribute_decl.c
         
     | 
| 
       164 
     | 
    
         
            -
            - ext/nokogiri/xml_cdata.c
         
     | 
| 
       165 
     | 
    
         
            -
            - ext/nokogiri/xml_comment.c
         
     | 
| 
       166 
     | 
    
         
            -
            - ext/nokogiri/xml_document_fragment.c
         
     | 
| 
       167 
176 
     | 
    
         
             
            - ext/nokogiri/xml_dtd.c
         
     | 
| 
       168 
177 
     | 
    
         
             
            - ext/nokogiri/xml_element_content.c
         
     | 
| 
       169 
178 
     | 
    
         
             
            - ext/nokogiri/xml_element_decl.c
         
     | 
| 
       170 
179 
     | 
    
         
             
            - ext/nokogiri/xml_encoding_handler.c
         
     | 
| 
       171 
180 
     | 
    
         
             
            - ext/nokogiri/xml_entity_decl.c
         
     | 
| 
       172 
     | 
    
         
            -
            - ext/nokogiri/xml_entity_reference.c
         
     | 
| 
       173 
181 
     | 
    
         
             
            - ext/nokogiri/xml_libxml2_hacks.c
         
     | 
| 
       174 
     | 
    
         
            -
            - ext/nokogiri/xml_processing_instruction.c
         
     | 
| 
       175 
182 
     | 
    
         
             
            - ext/nokogiri/xml_sax_parser.c
         
     | 
| 
       176 
183 
     | 
    
         
             
            - ext/nokogiri/st.c
         
     | 
| 
       177 
184 
     | 
    
         
             
            - ext/nokogiri/xml_reader.c
         
     | 
| 
         @@ -181,17 +188,23 @@ extra_rdoc_files: 
     | 
|
| 
       181 
188 
     | 
    
         
             
            - ext/nokogiri/xml_syntax_error.c
         
     | 
| 
       182 
189 
     | 
    
         
             
            - ext/nokogiri/html_document.c
         
     | 
| 
       183 
190 
     | 
    
         
             
            - ext/nokogiri/html_sax_push_parser.c
         
     | 
| 
       184 
     | 
    
         
            -
            - ext/nokogiri/nokogiri.c
         
     | 
| 
       185 
191 
     | 
    
         
             
            - ext/nokogiri/xml_io.c
         
     | 
| 
       186 
192 
     | 
    
         
             
            - ext/nokogiri/xml_namespace.c
         
     | 
| 
       187 
     | 
    
         
            -
            - ext/nokogiri/xml_text.c
         
     | 
| 
       188 
193 
     | 
    
         
             
            - ext/nokogiri/xslt_stylesheet.c
         
     | 
| 
       189 
     | 
    
         
            -
            - ext/nokogiri/xml_xpath_context.c
         
     | 
| 
       190 
194 
     | 
    
         
             
            - ext/nokogiri/xml_sax_parser_context.c
         
     | 
| 
       191 
195 
     | 
    
         
             
            - ext/nokogiri/xml_node_set.c
         
     | 
| 
      
 196 
     | 
    
         
            +
            - ext/nokogiri/html_sax_parser_context.c
         
     | 
| 
      
 197 
     | 
    
         
            +
            - ext/nokogiri/xml_attr.c
         
     | 
| 
      
 198 
     | 
    
         
            +
            - ext/nokogiri/xml_cdata.c
         
     | 
| 
      
 199 
     | 
    
         
            +
            - ext/nokogiri/xml_comment.c
         
     | 
| 
      
 200 
     | 
    
         
            +
            - ext/nokogiri/xml_document_fragment.c
         
     | 
| 
      
 201 
     | 
    
         
            +
            - ext/nokogiri/xml_entity_reference.c
         
     | 
| 
      
 202 
     | 
    
         
            +
            - ext/nokogiri/xml_processing_instruction.c
         
     | 
| 
      
 203 
     | 
    
         
            +
            - ext/nokogiri/xml_text.c
         
     | 
| 
      
 204 
     | 
    
         
            +
            - ext/nokogiri/xml_xpath_context.c
         
     | 
| 
       192 
205 
     | 
    
         
             
            - ext/nokogiri/xml_node.c
         
     | 
| 
       193 
206 
     | 
    
         
             
            - ext/nokogiri/xml_document.c
         
     | 
| 
       194 
     | 
    
         
            -
            - ext/nokogiri/ 
     | 
| 
      
 207 
     | 
    
         
            +
            - ext/nokogiri/nokogiri.c
         
     | 
| 
       195 
208 
     | 
    
         
             
            files:
         
     | 
| 
       196 
209 
     | 
    
         
             
            - .autotest
         
     | 
| 
       197 
210 
     | 
    
         
             
            - .gemtest
         
     | 
| 
         @@ -451,7 +464,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       451 
464 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       452 
465 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       453 
466 
     | 
    
         
             
            requirements: []
         
     | 
| 
       454 
     | 
    
         
            -
            rubyforge_project: maglev- 
     | 
| 
      
 467 
     | 
    
         
            +
            rubyforge_project: nokogiri-maglev-
         
     | 
| 
       455 
468 
     | 
    
         
             
            rubygems_version: 1.8.11
         
     | 
| 
       456 
469 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       457 
470 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
         @@ -490,7 +503,6 @@ test_files: 
     | 
|
| 
       490 
503 
     | 
    
         
             
            - test/xml/test_entity_decl.rb
         
     | 
| 
       491 
504 
     | 
    
         
             
            - test/xml/test_entity_reference.rb
         
     | 
| 
       492 
505 
     | 
    
         
             
            - test/xml/test_node_encoding.rb
         
     | 
| 
       493 
     | 
    
         
            -
            - test/xml/test_parse_options.rb
         
     | 
| 
       494 
506 
     | 
    
         
             
            - test/xml/test_processing_instruction.rb
         
     | 
| 
       495 
507 
     | 
    
         
             
            - test/xml/test_relax_ng.rb
         
     | 
| 
       496 
508 
     | 
    
         
             
            - test/xml/test_schema.rb
         
     | 
| 
         @@ -500,19 +512,20 @@ test_files: 
     | 
|
| 
       500 
512 
     | 
    
         
             
            - test/xml/test_c14n.rb
         
     | 
| 
       501 
513 
     | 
    
         
             
            - test/xml/test_cdata.rb
         
     | 
| 
       502 
514 
     | 
    
         
             
            - test/xml/test_document_encoding.rb
         
     | 
| 
       503 
     | 
    
         
            -
            - test/xml/test_document_fragment.rb
         
     | 
| 
       504 
515 
     | 
    
         
             
            - test/xml/test_namespace.rb
         
     | 
| 
       505 
516 
     | 
    
         
             
            - test/xml/test_node_attributes.rb
         
     | 
| 
       506 
517 
     | 
    
         
             
            - test/xml/test_node_inheritance.rb
         
     | 
| 
       507 
518 
     | 
    
         
             
            - test/xml/test_node_reparenting.rb
         
     | 
| 
       508 
     | 
    
         
            -
            - test/xml/test_node_set.rb
         
     | 
| 
       509 
519 
     | 
    
         
             
            - test/xml/test_reader_encoding.rb
         
     | 
| 
       510 
520 
     | 
    
         
             
            - test/xml/test_text.rb
         
     | 
| 
       511 
521 
     | 
    
         
             
            - test/xml/test_unparented_node.rb
         
     | 
| 
       512 
522 
     | 
    
         
             
            - test/xml/test_xinclude.rb
         
     | 
| 
       513 
523 
     | 
    
         
             
            - test/xml/test_xpath.rb
         
     | 
| 
       514 
     | 
    
         
            -
            - test/xml/test_node.rb
         
     | 
| 
       515 
524 
     | 
    
         
             
            - test/xml/test_document.rb
         
     | 
| 
      
 525 
     | 
    
         
            +
            - test/xml/test_document_fragment.rb
         
     | 
| 
      
 526 
     | 
    
         
            +
            - test/xml/test_node_set.rb
         
     | 
| 
      
 527 
     | 
    
         
            +
            - test/xml/test_parse_options.rb
         
     | 
| 
      
 528 
     | 
    
         
            +
            - test/xml/test_node.rb
         
     | 
| 
       516 
529 
     | 
    
         
             
            - test/xslt/test_exception_handling.rb
         
     | 
| 
       517 
530 
     | 
    
         
             
            - test/xslt/test_custom_functions.rb
         
     | 
| 
       518 
531 
     | 
    
         
             
            - test/test_nokogiri.rb
         
     |