HEX
Server: Apache
System: Windows NT MAGNETO-ARM 10.0 build 22000 (Windows 10) AMD64
User: Michel (0)
PHP: 7.4.7
Disabled: NONE
Upload Files
File: C:/Ruby27-x64/share/doc/ruby/html/REXML/Parsers/XPathParser.html
<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">

<title>class REXML::Parsers::XPathParser - RDoc Documentation</title>

<script type="text/javascript">
  var rdoc_rel_prefix = "../../";
  var index_rel_prefix = "../../";
</script>

<script src="../../js/navigation.js" defer></script>
<script src="../../js/search.js" defer></script>
<script src="../../js/search_index.js" defer></script>
<script src="../../js/searcher.js" defer></script>
<script src="../../js/darkfish.js" defer></script>

<link href="../../css/fonts.css" rel="stylesheet">
<link href="../../css/rdoc.css" rel="stylesheet">




<body id="top" role="document" class="class">
<nav role="navigation">
  <div id="project-navigation">
    <div id="home-section" role="region" title="Quick navigation" class="nav-section">
  <h2>
    <a href="../../index.html" rel="home">Home</a>
  </h2>

  <div id="table-of-contents-navigation">
    <a href="../../table_of_contents.html#pages">Pages</a>
    <a href="../../table_of_contents.html#classes">Classes</a>
    <a href="../../table_of_contents.html#methods">Methods</a>
  </div>
</div>

    <div id="search-section" role="search" class="project-section initially-hidden">
  <form action="#" method="get" accept-charset="utf-8">
    <div id="search-field-wrapper">
      <input id="search-field" role="combobox" aria-label="Search"
             aria-autocomplete="list" aria-controls="search-results"
             type="text" name="search" placeholder="Search" spellcheck="false"
             title="Type to search, Up and Down to navigate, Enter to load">
    </div>

    <ul id="search-results" aria-label="Search Results"
        aria-busy="false" aria-expanded="false"
        aria-atomic="false" class="initially-hidden"></ul>
  </form>
</div>

  </div>

  

  <div id="class-metadata">
    
    <div id="parent-class-section" class="nav-section">
  <h3>Parent</h3>

  
  <p class="link"><a href="../../Object.html">Object</a>
  
</div>

    <div id="includes-section" class="nav-section">
  <h3>Included Modules</h3>

  <ul class="link-list">
  
  
    <li><a class="include" href="../XMLTokens.html">REXML::XMLTokens</a>
  
  
  </ul>
</div>

    
    <!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
  <h3>Methods</h3>

  <ul class="link-list" role="directory">
    
    <li ><a href="#method-i-AdditiveExpr">#AdditiveExpr</a>
    
    <li ><a href="#method-i-AndExpr">#AndExpr</a>
    
    <li ><a href="#method-i-EqualityExpr">#EqualityExpr</a>
    
    <li ><a href="#method-i-FilterExpr">#FilterExpr</a>
    
    <li ><a href="#method-i-FunctionCall">#FunctionCall</a>
    
    <li ><a href="#method-i-LocationPath">#LocationPath</a>
    
    <li ><a href="#method-i-MultiplicativeExpr">#MultiplicativeExpr</a>
    
    <li ><a href="#method-i-NodeTest">#NodeTest</a>
    
    <li ><a href="#method-i-OrExpr">#OrExpr</a>
    
    <li ><a href="#method-i-PathExpr">#PathExpr</a>
    
    <li ><a href="#method-i-Predicate">#Predicate</a>
    
    <li ><a href="#method-i-PrimaryExpr">#PrimaryExpr</a>
    
    <li ><a href="#method-i-RelationalExpr">#RelationalExpr</a>
    
    <li ><a href="#method-i-RelativeLocationPath">#RelativeLocationPath</a>
    
    <li ><a href="#method-i-UnaryExpr">#UnaryExpr</a>
    
    <li ><a href="#method-i-UnionExpr">#UnionExpr</a>
    
    <li ><a href="#method-i-abbreviate">#abbreviate</a>
    
    <li ><a href="#method-i-expand">#expand</a>
    
    <li ><a href="#method-i-get_group">#get_group</a>
    
    <li ><a href="#method-i-namespaces-3D">#namespaces=</a>
    
    <li ><a href="#method-i-parse">#parse</a>
    
    <li ><a href="#method-i-parse_args">#parse_args</a>
    
    <li ><a href="#method-i-predicate">#predicate</a>
    
    <li ><a href="#method-i-predicate_to_string">#predicate_to_string</a>
    
  </ul>
</div>

  </div>
</nav>

<main role="main" aria-labelledby="class-REXML::Parsers::XPathParser">
  <h1 id="class-REXML::Parsers::XPathParser" class="class">
    class REXML::Parsers::XPathParser
  </h1>

  <section class="description">
    
<p>You don&#39;t want to use this class.  Really.  Use <a href="../XPath.html"><code>XPath</code></a>, which is a wrapper for this class.  Believe me.  You don&#39;t want to poke around in here. There is strange, dark magic at work in this code.  Beware.  Go back!  Go back while you still can!</p>

  </section>

  
  <section id="5Buntitled-5D" class="documentation-section">
    

    

    
    <section class="constants-list">
      <header>
        <h3>Constants</h3>
      </header>
      <dl>
      
        <dt id="AXIS">AXIS
        
        <dd><p><a href="XPathParser.html#method-i-RelativeLocationPath"><code>RelativeLocationPath</code></a></p>

<pre>|                                                    Step
  | (AXIS_NAME &#39;::&#39; | &#39;@&#39; | &#39;&#39;)                     AxisSpecifier
    NodeTest
      Predicate
  | &#39;.&#39; | &#39;..&#39;                                      AbbreviatedStep
|  RelativeLocationPath &#39;/&#39; Step
| RelativeLocationPath &#39;//&#39; Step</pre>
        
      
        <dt id="LITERAL">LITERAL
        
        <dd>
        
      
        <dt id="LOCAL_NAME_WILDCARD">LOCAL_NAME_WILDCARD
        
        <dd>
        
      
        <dt id="NODE_TYPE">NODE_TYPE
        
        <dd>
        
      
        <dt id="NT">NT
        
        <dd>
        
      
        <dt id="NUMBER">NUMBER
        
        <dd>
        
      
        <dt id="PI">PI
        
        <dd>
        
      
        <dt id="PREFIX_WILDCARD">PREFIX_WILDCARD
        
        <dd><pre>Returns a 1-1 map of the nodeset
The contents of the resulting array are either:
  true/false, if a positive match
  String, if a name match</pre>

<p><a href="XPathParser.html#method-i-NodeTest"><code>NodeTest</code></a></p>

<pre>| (&#39;*&#39; | NCNAME &#39;:&#39; &#39;*&#39; | QNAME)                NameTest
| &#39;*&#39; &#39;:&#39; NCNAME                                NameTest since XPath 2.0
| NODE_TYPE &#39;(&#39; &#39;)&#39;                             NodeType
| PI &#39;(&#39; LITERAL &#39;)&#39;                            PI
  | &#39;[&#39; expr &#39;]&#39;                                Predicate</pre>
        
      
        <dt id="QNAME">QNAME
        
        <dd>
        
      
        <dt id="VARIABLE_REFERENCE">VARIABLE_REFERENCE
        
        <dd><p>| <a href="XPathParser.html#VARIABLE_REFERENCE"><code>VARIABLE_REFERENCE</code></a> | &#39;(&#39; expr &#39;)&#39; | <a href="XPathParser.html#LITERAL"><code>LITERAL</code></a> | <a href="XPathParser.html#NUMBER"><code>NUMBER</code></a> | <a href="XPathParser.html#method-i-FunctionCall"><code>FunctionCall</code></a></p>
        
      
      </dl>
    </section>
    

    

    
     <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
       <header>
         <h3>Public Instance Methods</h3>
       </header>

    
      <div id="method-i-abbreviate" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">abbreviate</span><span
            class="method-args">( path )</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="abbreviate-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 35</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">abbreviate</span>( <span class="ruby-identifier">path</span> )
  <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">String</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">parse</span>( <span class="ruby-identifier">path</span> ) <span class="ruby-operator">:</span> <span class="ruby-identifier">path</span>
  <span class="ruby-identifier">string</span> = <span class="ruby-string">&quot;&quot;</span>
  <span class="ruby-identifier">document</span> = <span class="ruby-keyword">false</span>
  <span class="ruby-keyword">while</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">op</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
    <span class="ruby-keyword">case</span> <span class="ruby-identifier">op</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:node</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:attribute</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;@&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:child</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:descendant_or_self</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;/&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:self</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;.&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:parent</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;..&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:any</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;*&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:text</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;text()&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:following</span>, <span class="ruby-value">:following_sibling</span>,
          <span class="ruby-value">:ancestor</span>, <span class="ruby-value">:ancestor_or_self</span>, <span class="ruby-value">:descendant</span>,
          <span class="ruby-value">:namespace</span>, <span class="ruby-value">:preceding</span>, <span class="ruby-value">:preceding_sibling</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">op</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">tr</span>(<span class="ruby-string">&quot;_&quot;</span>, <span class="ruby-string">&quot;-&quot;</span>)
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;::&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:qname</span>
      <span class="ruby-identifier">prefix</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
      <span class="ruby-identifier">name</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">prefix</span><span class="ruby-string">+&quot;:&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">prefix</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">name</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:predicate</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;[&#39;</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">predicate_to_string</span>( <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span> ) {<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">abbreviate</span>( <span class="ruby-identifier">x</span> ) }
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;]&#39;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:document</span>
      <span class="ruby-identifier">document</span> = <span class="ruby-keyword">true</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:function</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;( &quot;</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">predicate_to_string</span>( <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>[<span class="ruby-value">0</span>] ) {<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">abbreviate</span>( <span class="ruby-identifier">x</span> )}
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; )&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:literal</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">%Q{ &quot;#{path.shift}&quot; }</span>
    <span class="ruby-keyword">else</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;UNKNOWN(&quot;</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">op</span>.<span class="ruby-identifier">inspect</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;)&quot;</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">string</span> = <span class="ruby-string">&quot;/&quot;</span><span class="ruby-operator">+</span><span class="ruby-identifier">string</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">document</span>
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">string</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-expand" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">expand</span><span
            class="method-args">( path )</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="expand-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 93</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">expand</span>( <span class="ruby-identifier">path</span> )
  <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">String</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">parse</span>( <span class="ruby-identifier">path</span> ) <span class="ruby-operator">:</span> <span class="ruby-identifier">path</span>
  <span class="ruby-identifier">string</span> = <span class="ruby-string">&quot;&quot;</span>
  <span class="ruby-identifier">document</span> = <span class="ruby-keyword">false</span>
  <span class="ruby-keyword">while</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">op</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
    <span class="ruby-keyword">case</span> <span class="ruby-identifier">op</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:node</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;node()&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:attribute</span>, <span class="ruby-value">:child</span>, <span class="ruby-value">:following</span>, <span class="ruby-value">:following_sibling</span>,
          <span class="ruby-value">:ancestor</span>, <span class="ruby-value">:ancestor_or_self</span>, <span class="ruby-value">:descendant</span>, <span class="ruby-value">:descendant_or_self</span>,
          <span class="ruby-value">:namespace</span>, <span class="ruby-value">:preceding</span>, <span class="ruby-value">:preceding_sibling</span>, <span class="ruby-value">:self</span>, <span class="ruby-value">:parent</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">op</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">tr</span>(<span class="ruby-string">&quot;_&quot;</span>, <span class="ruby-string">&quot;-&quot;</span>)
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;::&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:any</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;*&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:qname</span>
      <span class="ruby-identifier">prefix</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
      <span class="ruby-identifier">name</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">prefix</span><span class="ruby-string">+&quot;:&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">prefix</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">name</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:predicate</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;[&#39;</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">predicate_to_string</span>( <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> <span class="ruby-identifier">expand</span>(<span class="ruby-identifier">x</span>) }
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;]&#39;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:document</span>
      <span class="ruby-identifier">document</span> = <span class="ruby-keyword">true</span>
    <span class="ruby-keyword">else</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;UNKNOWN(&quot;</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">op</span>.<span class="ruby-identifier">inspect</span>
      <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;)&quot;</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">string</span> = <span class="ruby-string">&quot;/&quot;</span><span class="ruby-operator">+</span><span class="ruby-identifier">string</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">document</span>
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">string</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-namespaces-3D" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">namespaces=</span><span
            class="method-args">( namespaces )</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="namespaces-3D-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 15</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">namespaces=</span>( <span class="ruby-identifier">namespaces</span> )
  <span class="ruby-constant">Functions</span><span class="ruby-operator">::</span><span class="ruby-identifier">namespace_context</span> = <span class="ruby-identifier">namespaces</span>
  <span class="ruby-ivar">@namespaces</span> = <span class="ruby-identifier">namespaces</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-parse" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">parse</span><span
            class="method-args">(path)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="parse-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 20</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">parse</span> <span class="ruby-identifier">path</span>
  <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">dup</span>
  <span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp">/([\(\[])\s+/</span>, <span class="ruby-string">&#39;\1&#39;</span>) <span class="ruby-comment"># Strip ignorable spaces</span>
  <span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub!</span>( <span class="ruby-regexp">/\s+([\]\)])/</span>, <span class="ruby-string">&#39;\1&#39;</span>)
  <span class="ruby-identifier">parsed</span> = []
  <span class="ruby-constant">OrExpr</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">parsed</span>)
  <span class="ruby-identifier">parsed</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-predicate" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">predicate</span><span
            class="method-args">(path)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="predicate-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 29</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">predicate</span> <span class="ruby-identifier">path</span>
  <span class="ruby-identifier">parsed</span> = []
  <span class="ruby-constant">Predicate</span>( <span class="ruby-node">&quot;[#{path}]&quot;</span>, <span class="ruby-identifier">parsed</span> )
  <span class="ruby-identifier">parsed</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-predicate_to_string" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">predicate_to_string</span><span
            class="method-args">( path ) { |path| ... }</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="predicate_to_string-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 132</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">predicate_to_string</span>( <span class="ruby-identifier">path</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span> )
  <span class="ruby-identifier">string</span> = <span class="ruby-string">&quot;&quot;</span>
  <span class="ruby-keyword">case</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">0</span>]
  <span class="ruby-keyword">when</span> <span class="ruby-value">:and</span>, <span class="ruby-value">:or</span>, <span class="ruby-value">:mult</span>, <span class="ruby-value">:plus</span>, <span class="ruby-value">:minus</span>, <span class="ruby-value">:neq</span>, <span class="ruby-value">:eq</span>, <span class="ruby-value">:lt</span>, <span class="ruby-value">:gt</span>, <span class="ruby-value">:lteq</span>, <span class="ruby-value">:gteq</span>, <span class="ruby-value">:div</span>, <span class="ruby-value">:mod</span>, <span class="ruby-value">:union</span>
    <span class="ruby-identifier">op</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
    <span class="ruby-keyword">case</span> <span class="ruby-identifier">op</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:eq</span>
      <span class="ruby-identifier">op</span> = <span class="ruby-string">&quot;=&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:lt</span>
      <span class="ruby-identifier">op</span> = <span class="ruby-string">&quot;&lt;&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:gt</span>
      <span class="ruby-identifier">op</span> = <span class="ruby-string">&quot;&gt;&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:lteq</span>
      <span class="ruby-identifier">op</span> = <span class="ruby-string">&quot;&lt;=&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:gteq</span>
      <span class="ruby-identifier">op</span> = <span class="ruby-string">&quot;&gt;=&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:neq</span>
      <span class="ruby-identifier">op</span> = <span class="ruby-string">&quot;!=&quot;</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">:union</span>
      <span class="ruby-identifier">op</span> = <span class="ruby-string">&quot;|&quot;</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">left</span> = <span class="ruby-identifier">predicate_to_string</span>( <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span> )
    <span class="ruby-identifier">right</span> = <span class="ruby-identifier">predicate_to_string</span>( <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span> )
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; &quot;</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">left</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; &quot;</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">op</span>.<span class="ruby-identifier">to_s</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; &quot;</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">right</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; &quot;</span>
  <span class="ruby-keyword">when</span> <span class="ruby-value">:function</span>
    <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
    <span class="ruby-identifier">name</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">name</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;( &quot;</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">predicate_to_string</span>( <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span> )
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; )&quot;</span>
  <span class="ruby-keyword">when</span> <span class="ruby-value">:literal</span>
    <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; &quot;</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">shift</span>.<span class="ruby-identifier">inspect</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; &quot;</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; &quot;</span>
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword">yield</span>( <span class="ruby-identifier">path</span> )
    <span class="ruby-identifier">string</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; &quot;</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">squeeze</span>(<span class="ruby-string">&quot; &quot;</span>)
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
    </section>
  
     <section id="private-instance-5Buntitled-5D-method-details" class="method-section">
       <header>
         <h3>Private Instance Methods</h3>
       </header>

    
      <div id="method-i-AdditiveExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">AdditiveExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| <a href="XPathParser.html#method-i-AdditiveExpr"><code>AdditiveExpr</code></a> (&#39;+&#39; | &#39;-&#39;) <a href="XPathParser.html#method-i-MultiplicativeExpr"><code>MultiplicativeExpr</code></a> | <a href="XPathParser.html#method-i-MultiplicativeExpr"><code>MultiplicativeExpr</code></a></p>
          
          

          
          <div class="method-source-code" id="AdditiveExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 443</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">AdditiveExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">n</span> = []
  <span class="ruby-identifier">rest</span> = <span class="ruby-constant">MultiplicativeExpr</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">path</span>
    <span class="ruby-keyword">while</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^\s*(\+|-)\s*/</span>
      <span class="ruby-keyword">if</span> <span class="ruby-node">$1</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?+</span>
        <span class="ruby-identifier">n</span> = [ <span class="ruby-value">:plus</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-keyword">else</span>
        <span class="ruby-identifier">n</span> = [ <span class="ruby-value">:minus</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-keyword">end</span>
      <span class="ruby-identifier">rest</span> = <span class="ruby-constant">MultiplicativeExpr</span>( <span class="ruby-node">$&#39;</span>, <span class="ruby-identifier">n</span>[<span class="ruby-value">-1</span>] )
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-identifier">n</span>)
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">n</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">rest</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-AndExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">AndExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| <a href="XPathParser.html#method-i-AndExpr"><code>AndExpr</code></a> S &#39;and&#39; S <a href="XPathParser.html#method-i-EqualityExpr"><code>EqualityExpr</code></a> | <a href="XPathParser.html#method-i-EqualityExpr"><code>EqualityExpr</code></a></p>
          
          

          
          <div class="method-source-code" id="AndExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 376</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">AndExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">n</span> = []
  <span class="ruby-identifier">rest</span> = <span class="ruby-constant">EqualityExpr</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">path</span>
    <span class="ruby-keyword">while</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^\s*( and )/</span>
      <span class="ruby-identifier">n</span> = [ <span class="ruby-value">:and</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-identifier">rest</span> = <span class="ruby-constant">EqualityExpr</span>( <span class="ruby-node">$&#39;</span>, <span class="ruby-identifier">n</span>[<span class="ruby-value">-1</span>] )
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-identifier">n</span>)
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">n</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">rest</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-EqualityExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">EqualityExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| <a href="XPathParser.html#method-i-EqualityExpr"><code>EqualityExpr</code></a> (&#39;=&#39; | &#39;!=&#39;)  <a href="XPathParser.html#method-i-RelationalExpr"><code>RelationalExpr</code></a> | <a href="XPathParser.html#method-i-RelationalExpr"><code>RelationalExpr</code></a></p>
          
          

          
          <div class="method-source-code" id="EqualityExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 395</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">EqualityExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">n</span> = []
  <span class="ruby-identifier">rest</span> = <span class="ruby-constant">RelationalExpr</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">path</span>
    <span class="ruby-keyword">while</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^\s*(!?=)\s*/</span>
      <span class="ruby-keyword">if</span> <span class="ruby-node">$1</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?!</span>
        <span class="ruby-identifier">n</span> = [ <span class="ruby-value">:neq</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-keyword">else</span>
        <span class="ruby-identifier">n</span> = [ <span class="ruby-value">:eq</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-keyword">end</span>
      <span class="ruby-identifier">rest</span> = <span class="ruby-constant">RelationalExpr</span>( <span class="ruby-node">$&#39;</span>, <span class="ruby-identifier">n</span>[<span class="ruby-value">-1</span>] )
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-identifier">n</span>)
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">n</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">rest</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-FilterExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">FilterExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| <a href="XPathParser.html#method-i-FilterExpr"><code>FilterExpr</code></a> <a href="XPathParser.html#method-i-Predicate"><code>Predicate</code></a> | <a href="XPathParser.html#method-i-PrimaryExpr"><code>PrimaryExpr</code></a></p>
          
          

          
          <div class="method-source-code" id="FilterExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 546</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">FilterExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">n</span> = []
  <span class="ruby-identifier">path</span> = <span class="ruby-constant">PrimaryExpr</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )
  <span class="ruby-identifier">path</span> = <span class="ruby-constant">Predicate</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span>)
  <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">n</span>)
  <span class="ruby-identifier">path</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-FunctionCall" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">FunctionCall</span><span
            class="method-args">(rest, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| FUNCTION_NAME &#39;(&#39; ( expr ( &#39;,&#39; expr )* )? &#39;)&#39;</p>
          
          

          
          <div class="method-source-code" id="FunctionCall-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 599</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">FunctionCall</span> <span class="ruby-identifier ruby-title">rest</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">path</span>, <span class="ruby-identifier">arguments</span> = <span class="ruby-identifier">parse_args</span>(<span class="ruby-identifier">rest</span>)
  <span class="ruby-identifier">argset</span> = []
  <span class="ruby-keyword">for</span> <span class="ruby-identifier">argument</span> <span class="ruby-keyword">in</span> <span class="ruby-identifier">arguments</span>
    <span class="ruby-identifier">args</span> = []
    <span class="ruby-constant">OrExpr</span>( <span class="ruby-identifier">argument</span>, <span class="ruby-identifier">args</span> )
    <span class="ruby-identifier">argset</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">args</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">argset</span>
  <span class="ruby-identifier">path</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-LocationPath" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">LocationPath</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p><a href="XPathParser.html#method-i-LocationPath"><code>LocationPath</code></a></p>

<pre>| RelativeLocationPath
| &#39;/&#39; RelativeLocationPath?
| &#39;//&#39; RelativeLocationPath</pre>
          
          

          
          <div class="method-source-code" id="LocationPath-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 187</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">LocationPath</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">lstrip</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?/</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:document</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?/</span>
      <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:descendant_or_self</span>
      <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:node</span>
      <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>[<span class="ruby-value">2</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
    <span class="ruby-keyword">else</span>
      <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">return</span> <span class="ruby-constant">RelativeLocationPath</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">parsed</span> ) <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-MultiplicativeExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">MultiplicativeExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| <a href="XPathParser.html#method-i-MultiplicativeExpr"><code>MultiplicativeExpr</code></a> (&#39;*&#39; | S (&#39;div&#39; | &#39;mod&#39;) S) <a href="XPathParser.html#method-i-UnaryExpr"><code>UnaryExpr</code></a> | <a href="XPathParser.html#method-i-UnaryExpr"><code>UnaryExpr</code></a></p>
          
          

          
          <div class="method-source-code" id="MultiplicativeExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 466</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">MultiplicativeExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">n</span> = []
  <span class="ruby-identifier">rest</span> = <span class="ruby-constant">UnaryExpr</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">path</span>
    <span class="ruby-keyword">while</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^\s*(\*| div | mod )\s*/</span>
      <span class="ruby-keyword">if</span> <span class="ruby-node">$1</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?*</span>
        <span class="ruby-identifier">n</span> = [ <span class="ruby-value">:mult</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-keyword">elsif</span> <span class="ruby-node">$1</span>.<span class="ruby-identifier">include?</span>( <span class="ruby-string">&quot;div&quot;</span> )
        <span class="ruby-identifier">n</span> = [ <span class="ruby-value">:div</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-keyword">else</span>
        <span class="ruby-identifier">n</span> = [ <span class="ruby-value">:mod</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-keyword">end</span>
      <span class="ruby-identifier">rest</span> = <span class="ruby-constant">UnaryExpr</span>( <span class="ruby-node">$&#39;</span>, <span class="ruby-identifier">n</span>[<span class="ruby-value">-1</span>] )
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-identifier">n</span>)
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">n</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">rest</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-NodeTest" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">NodeTest</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="NodeTest-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 283</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">NodeTest</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">original_path</span> = <span class="ruby-identifier">path</span>
  <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">lstrip</span>
  <span class="ruby-keyword">case</span> <span class="ruby-identifier">path</span>
  <span class="ruby-keyword">when</span> <span class="ruby-constant">PREFIX_WILDCARD</span>
    <span class="ruby-identifier">prefix</span> = <span class="ruby-keyword">nil</span>
    <span class="ruby-identifier">name</span> = <span class="ruby-node">$1</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:qname</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">prefix</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">name</span>
  <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^\*/</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:any</span>
  <span class="ruby-keyword">when</span> <span class="ruby-constant">NODE_TYPE</span>
    <span class="ruby-identifier">type</span> = <span class="ruby-node">$1</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">type</span>.<span class="ruby-identifier">tr</span>(<span class="ruby-string">&#39;-&#39;</span>, <span class="ruby-string">&#39;_&#39;</span>).<span class="ruby-identifier">intern</span>
  <span class="ruby-keyword">when</span> <span class="ruby-constant">PI</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
    <span class="ruby-identifier">literal</span> = <span class="ruby-keyword">nil</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span> <span class="ruby-operator">!~</span> <span class="ruby-regexp">/^\s*\)/</span>
      <span class="ruby-identifier">path</span> <span class="ruby-operator">=~</span> <span class="ruby-constant">LITERAL</span>
      <span class="ruby-identifier">literal</span> = <span class="ruby-node">$1</span>
      <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
      <span class="ruby-identifier">raise</span> <span class="ruby-constant">ParseException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;Missing &#39;)&#39; after processing instruction&quot;</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value">?)</span>
      <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:processing_instruction</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">literal</span> <span class="ruby-operator">||</span> <span class="ruby-string">&#39;&#39;</span>)
  <span class="ruby-keyword">when</span> <span class="ruby-constant">LOCAL_NAME_WILDCARD</span>
    <span class="ruby-identifier">prefix</span> = <span class="ruby-node">$1</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:namespace</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">prefix</span>
  <span class="ruby-keyword">when</span> <span class="ruby-constant">QNAME</span>
    <span class="ruby-identifier">prefix</span> = <span class="ruby-node">$1</span>
    <span class="ruby-identifier">name</span> = <span class="ruby-node">$2</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
    <span class="ruby-identifier">prefix</span> = <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">prefix</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:qname</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">prefix</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">name</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-identifier">original_path</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">path</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-OrExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">OrExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| <a href="XPathParser.html#method-i-OrExpr"><code>OrExpr</code></a> S &#39;or&#39; S <a href="XPathParser.html#method-i-AndExpr"><code>AndExpr</code></a> | <a href="XPathParser.html#method-i-AndExpr"><code>AndExpr</code></a></p>
          
          

          
          <div class="method-source-code" id="OrExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 357</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">OrExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">n</span> = []
  <span class="ruby-identifier">rest</span> = <span class="ruby-constant">AndExpr</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">path</span>
    <span class="ruby-keyword">while</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^\s*( or )/</span>
      <span class="ruby-identifier">n</span> = [ <span class="ruby-value">:or</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-identifier">rest</span> = <span class="ruby-constant">AndExpr</span>( <span class="ruby-node">$&#39;</span>, <span class="ruby-identifier">n</span>[<span class="ruby-value">-1</span>] )
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-identifier">n</span>)
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">n</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">rest</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-PathExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">PathExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| <a href="XPathParser.html#method-i-LocationPath"><code>LocationPath</code></a> | <a href="XPathParser.html#method-i-FilterExpr"><code>FilterExpr</code></a> (&#39;/&#39; | &#39;//&#39;) <a href="XPathParser.html#method-i-RelativeLocationPath"><code>RelativeLocationPath</code></a></p>
          
          

          
          <div class="method-source-code" id="PathExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 528</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">PathExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">lstrip</span>
  <span class="ruby-identifier">n</span> = []
  <span class="ruby-identifier">rest</span> = <span class="ruby-constant">FilterExpr</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">path</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">rest</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">rest</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?/</span>
      <span class="ruby-identifier">rest</span> = <span class="ruby-constant">RelativeLocationPath</span>(<span class="ruby-identifier">rest</span>, <span class="ruby-identifier">n</span>)
      <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">n</span>)
      <span class="ruby-keyword">return</span> <span class="ruby-identifier">rest</span>
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">rest</span> = <span class="ruby-constant">LocationPath</span>(<span class="ruby-identifier">rest</span>, <span class="ruby-identifier">n</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/\A[\/\.\@\[\w*]/</span>
  <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">n</span>)
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">rest</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-Predicate" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">Predicate</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>Filters the supplied nodeset on the predicate(s)</p>
          
          

          
          <div class="method-source-code" id="Predicate-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 333</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">Predicate</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">original_path</span> = <span class="ruby-identifier">path</span>
  <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">lstrip</span>
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">original_path</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?[</span>
  <span class="ruby-identifier">predicates</span> = []
  <span class="ruby-keyword">while</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?[</span>
    <span class="ruby-identifier">path</span>, <span class="ruby-identifier">expr</span> = <span class="ruby-identifier">get_group</span>(<span class="ruby-identifier">path</span>)
    <span class="ruby-identifier">predicates</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">expr</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-2</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">expr</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">predicates</span>.<span class="ruby-identifier">each</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">pred</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">preds</span> = []
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:predicate</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">preds</span>
    <span class="ruby-constant">OrExpr</span>(<span class="ruby-identifier">pred</span>, <span class="ruby-identifier">preds</span>)
  }
  <span class="ruby-identifier">path</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-PrimaryExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">PrimaryExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="PrimaryExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 562</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">PrimaryExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-keyword">case</span> <span class="ruby-identifier">path</span>
  <span class="ruby-keyword">when</span> <span class="ruby-constant">VARIABLE_REFERENCE</span>
    <span class="ruby-identifier">varname</span> = <span class="ruby-node">$1</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:variable</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">varname</span>
    <span class="ruby-comment">#arry &lt;&lt; @variables[ varname ]</span>
  <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^(\w[-\w]*)(?:\()/</span>
    <span class="ruby-identifier">fname</span> = <span class="ruby-node">$1</span>
    <span class="ruby-identifier">tmp</span> = <span class="ruby-node">$&#39;</span>
    <span class="ruby-keyword">return</span> <span class="ruby-identifier">path</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">fname</span> <span class="ruby-operator">=~</span> <span class="ruby-constant">NT</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-identifier">tmp</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:function</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">fname</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-constant">FunctionCall</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">parsed</span>)
  <span class="ruby-keyword">when</span> <span class="ruby-constant">NUMBER</span>
    <span class="ruby-identifier">varname</span> = <span class="ruby-node">$1</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-node">$2</span> <span class="ruby-operator">:</span> <span class="ruby-node">$1</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:literal</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">varname</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-string">&#39;.&#39;</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">varname</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">varname</span>.<span class="ruby-identifier">to_i</span>)
  <span class="ruby-keyword">when</span> <span class="ruby-constant">LITERAL</span>
    <span class="ruby-identifier">varname</span> = <span class="ruby-node">$1</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-node">$2</span> <span class="ruby-operator">:</span> <span class="ruby-node">$1</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:literal</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">varname</span>
  <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^\(/</span>                                               <span class="ruby-comment">#/</span>
    <span class="ruby-identifier">path</span>, <span class="ruby-identifier">contents</span> = <span class="ruby-identifier">get_group</span>(<span class="ruby-identifier">path</span>)
    <span class="ruby-identifier">contents</span> = <span class="ruby-identifier">contents</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-2</span>]
    <span class="ruby-identifier">n</span> = []
    <span class="ruby-constant">OrExpr</span>( <span class="ruby-identifier">contents</span>, <span class="ruby-identifier">n</span> )
    <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">n</span>)
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">path</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-RelationalExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">RelationalExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| <a href="XPathParser.html#method-i-RelationalExpr"><code>RelationalExpr</code></a> (&#39;&lt;&#39; | &#39;&gt;&#39; | &#39;&lt;=&#39; | &#39;&gt;=&#39;) <a href="XPathParser.html#method-i-AdditiveExpr"><code>AdditiveExpr</code></a> | <a href="XPathParser.html#method-i-AdditiveExpr"><code>AdditiveExpr</code></a></p>
          
          

          
          <div class="method-source-code" id="RelationalExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 418</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">RelationalExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">n</span> = []
  <span class="ruby-identifier">rest</span> = <span class="ruby-constant">AdditiveExpr</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">path</span>
    <span class="ruby-keyword">while</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^\s*([&lt;&gt;]=?)\s*/</span>
      <span class="ruby-keyword">if</span> <span class="ruby-node">$1</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?&lt;</span>
        <span class="ruby-identifier">sym</span> = <span class="ruby-string">&quot;lt&quot;</span>
      <span class="ruby-keyword">else</span>
        <span class="ruby-identifier">sym</span> = <span class="ruby-string">&quot;gt&quot;</span>
      <span class="ruby-keyword">end</span>
      <span class="ruby-identifier">sym</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;eq&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-node">$1</span>[<span class="ruby-value">-1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?=</span>
      <span class="ruby-identifier">n</span> = [ <span class="ruby-identifier">sym</span>.<span class="ruby-identifier">intern</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-identifier">rest</span> = <span class="ruby-constant">AdditiveExpr</span>( <span class="ruby-node">$&#39;</span>, <span class="ruby-identifier">n</span>[<span class="ruby-value">-1</span>] )
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-identifier">n</span>)
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">n</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">rest</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-RelativeLocationPath" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">RelativeLocationPath</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="RelativeLocationPath-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 211</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">RelativeLocationPath</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">loop</span> <span class="ruby-keyword">do</span>
    <span class="ruby-identifier">original_path</span> = <span class="ruby-identifier">path</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">lstrip</span>

    <span class="ruby-keyword">return</span> <span class="ruby-identifier">original_path</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">empty?</span>

    <span class="ruby-comment"># (axis or @ or &lt;child::&gt;) nodetest predicate  &gt;</span>
    <span class="ruby-comment"># OR                                          &gt;  / Step</span>
    <span class="ruby-comment"># (. or ..)                                    &gt;</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?.</span>
      <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?.</span>
        <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:parent</span>
        <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:node</span>
        <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>[<span class="ruby-value">2</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
      <span class="ruby-keyword">else</span>
        <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:self</span>
        <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:node</span>
        <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
      <span class="ruby-keyword">end</span>
    <span class="ruby-keyword">else</span>
      <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?@</span>
        <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:attribute</span>
        <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
        <span class="ruby-comment"># Goto Nodetest</span>
      <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">path</span> <span class="ruby-operator">=~</span> <span class="ruby-constant">AXIS</span>
        <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">$1</span>.<span class="ruby-identifier">tr</span>(<span class="ruby-string">&#39;-&#39;</span>,<span class="ruby-string">&#39;_&#39;</span>).<span class="ruby-identifier">intern</span>
        <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
        <span class="ruby-comment"># Goto Nodetest</span>
      <span class="ruby-keyword">else</span>
        <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:child</span>
      <span class="ruby-keyword">end</span>

      <span class="ruby-identifier">n</span> = []
      <span class="ruby-identifier">path</span> = <span class="ruby-constant">NodeTest</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span>)

      <span class="ruby-identifier">path</span> = <span class="ruby-constant">Predicate</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )

      <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">n</span>)
    <span class="ruby-keyword">end</span>

    <span class="ruby-identifier">original_path</span> = <span class="ruby-identifier">path</span>
    <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">lstrip</span>
    <span class="ruby-keyword">return</span> <span class="ruby-identifier">original_path</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>.<span class="ruby-identifier">empty?</span>

    <span class="ruby-keyword">return</span> <span class="ruby-identifier">original_path</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value">?/</span>

    <span class="ruby-keyword">if</span> <span class="ruby-identifier">path</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?/</span>
      <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:descendant_or_self</span>
      <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:node</span>
      <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>[<span class="ruby-value">2</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
    <span class="ruby-keyword">else</span>
      <span class="ruby-identifier">path</span> = <span class="ruby-identifier">path</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-UnaryExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">UnaryExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| &#39;-&#39; <a href="XPathParser.html#method-i-UnaryExpr"><code>UnaryExpr</code></a> | <a href="XPathParser.html#method-i-UnionExpr"><code>UnionExpr</code></a></p>
          
          

          
          <div class="method-source-code" id="UnaryExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 491</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">UnaryExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">path</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^(\-*)/</span>
  <span class="ruby-identifier">path</span> = <span class="ruby-node">$&#39;</span>
  <span class="ruby-keyword">if</span> <span class="ruby-node">$1</span> <span class="ruby-keyword">and</span> ((<span class="ruby-node">$1</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">%</span> <span class="ruby-value">2</span>) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>)
    <span class="ruby-identifier">mult</span> = <span class="ruby-value">-1</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-identifier">mult</span> = <span class="ruby-value">1</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:neg</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mult</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>

  <span class="ruby-identifier">n</span> = []
  <span class="ruby-identifier">path</span> = <span class="ruby-constant">UnionExpr</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )
  <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">concat</span>( <span class="ruby-identifier">n</span> )
  <span class="ruby-identifier">path</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-UnionExpr" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">UnionExpr</span><span
            class="method-args">(path, parsed)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p>| <a href="XPathParser.html#method-i-UnionExpr"><code>UnionExpr</code></a> &#39;|&#39; <a href="XPathParser.html#method-i-PathExpr"><code>PathExpr</code></a> | <a href="XPathParser.html#method-i-PathExpr"><code>PathExpr</code></a></p>
          
          

          
          <div class="method-source-code" id="UnionExpr-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 509</span>
<span class="ruby-keyword">def</span> <span class="ruby-constant">UnionExpr</span> <span class="ruby-identifier ruby-title">path</span>, <span class="ruby-identifier">parsed</span>
  <span class="ruby-identifier">n</span> = []
  <span class="ruby-identifier">rest</span> = <span class="ruby-constant">PathExpr</span>( <span class="ruby-identifier">path</span>, <span class="ruby-identifier">n</span> )
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">path</span>
    <span class="ruby-keyword">while</span> <span class="ruby-identifier">rest</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^\s*(\|)\s*/</span>
      <span class="ruby-identifier">n</span> = [ <span class="ruby-value">:union</span>, <span class="ruby-identifier">n</span>, [] ]
      <span class="ruby-identifier">rest</span> = <span class="ruby-constant">PathExpr</span>( <span class="ruby-node">$&#39;</span>, <span class="ruby-identifier">n</span>[<span class="ruby-value">-1</span>] )
    <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span>.<span class="ruby-identifier">replace</span>( <span class="ruby-identifier">n</span> )
  <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
    <span class="ruby-identifier">parsed</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">n</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-identifier">rest</span>
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-get_group" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">get_group</span><span
            class="method-args">(string)</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          <p><a href="XPathParser.html#method-i-get_group"><code>get_group</code></a>( &#39;[foo]bar&#39; ) -&gt; [&#39;bar&#39;, &#39;[foo]&#39;]</p>
          
          

          
          <div class="method-source-code" id="get_group-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 612</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_group</span> <span class="ruby-identifier">string</span>
  <span class="ruby-identifier">ind</span> = <span class="ruby-value">0</span>
  <span class="ruby-identifier">depth</span> = <span class="ruby-value">0</span>
  <span class="ruby-identifier">st</span> = <span class="ruby-identifier">string</span>[<span class="ruby-value">0</span>,<span class="ruby-value">1</span>]
  <span class="ruby-identifier">en</span> = (<span class="ruby-identifier">st</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;(&quot;</span> <span class="ruby-operator">?</span> <span class="ruby-string">&quot;)&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;]&quot;</span>)
  <span class="ruby-keyword">begin</span>
    <span class="ruby-keyword">case</span> <span class="ruby-identifier">string</span>[<span class="ruby-identifier">ind</span>,<span class="ruby-value">1</span>]
    <span class="ruby-keyword">when</span> <span class="ruby-identifier">st</span>
      <span class="ruby-identifier">depth</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
    <span class="ruby-keyword">when</span> <span class="ruby-identifier">en</span>
      <span class="ruby-identifier">depth</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">ind</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
  <span class="ruby-keyword">end</span> <span class="ruby-keyword">while</span> <span class="ruby-identifier">depth</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">ind</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">length</span>
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">depth</span><span class="ruby-operator">==</span><span class="ruby-value">0</span>
  [<span class="ruby-identifier">string</span>[<span class="ruby-identifier">ind</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>], <span class="ruby-identifier">string</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-identifier">ind</span><span class="ruby-value">-1</span>]]
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
      <div id="method-i-parse_args" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">parse_args</span><span
            class="method-args">( string )</span>
          
          <span class="method-click-advice">click to toggle source</span>
          
        </div>
        

        <div class="method-description">
          
          
          
          

          
          <div class="method-source-code" id="parse_args-source">
            <pre><span class="ruby-comment"># File lib/rexml/parsers/xpathparser.rb, line 630</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">parse_args</span>( <span class="ruby-identifier">string</span> )
  <span class="ruby-identifier">arguments</span> = []
  <span class="ruby-identifier">ind</span> = <span class="ruby-value">0</span>
  <span class="ruby-identifier">inquot</span> = <span class="ruby-keyword">false</span>
  <span class="ruby-identifier">inapos</span> = <span class="ruby-keyword">false</span>
  <span class="ruby-identifier">depth</span> = <span class="ruby-value">1</span>
  <span class="ruby-keyword">begin</span>
    <span class="ruby-keyword">case</span> <span class="ruby-identifier">string</span>[<span class="ruby-identifier">ind</span>]
    <span class="ruby-keyword">when</span> <span class="ruby-value">?&quot;</span>
      <span class="ruby-identifier">inquot</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">inquot</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">inapos</span>
    <span class="ruby-keyword">when</span> <span class="ruby-value">?&#39;</span>
      <span class="ruby-identifier">inapos</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">inapos</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">inquot</span>
    <span class="ruby-keyword">else</span>
      <span class="ruby-keyword">unless</span> <span class="ruby-identifier">inquot</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">inapos</span>
        <span class="ruby-keyword">case</span> <span class="ruby-identifier">string</span>[<span class="ruby-identifier">ind</span>]
        <span class="ruby-keyword">when</span> <span class="ruby-value">?(</span>
          <span class="ruby-identifier">depth</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
          <span class="ruby-keyword">if</span> <span class="ruby-identifier">depth</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
            <span class="ruby-identifier">string</span> = <span class="ruby-identifier">string</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
            <span class="ruby-identifier">ind</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
          <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">when</span> <span class="ruby-value">?)</span>
          <span class="ruby-identifier">depth</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
          <span class="ruby-keyword">if</span> <span class="ruby-identifier">depth</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
            <span class="ruby-identifier">s</span> = <span class="ruby-identifier">string</span>[<span class="ruby-value">0</span>,<span class="ruby-identifier">ind</span>].<span class="ruby-identifier">strip</span>
            <span class="ruby-identifier">arguments</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">s</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>
            <span class="ruby-identifier">string</span> = <span class="ruby-identifier">string</span>[<span class="ruby-identifier">ind</span><span class="ruby-value">+1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
          <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">when</span> <span class="ruby-value">?,</span>
          <span class="ruby-keyword">if</span> <span class="ruby-identifier">depth</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
            <span class="ruby-identifier">s</span> = <span class="ruby-identifier">string</span>[<span class="ruby-value">0</span>,<span class="ruby-identifier">ind</span>].<span class="ruby-identifier">strip</span>
            <span class="ruby-identifier">arguments</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">s</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>
            <span class="ruby-identifier">string</span> = <span class="ruby-identifier">string</span>[<span class="ruby-identifier">ind</span><span class="ruby-value">+1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
            <span class="ruby-identifier">ind</span> = <span class="ruby-value">-1</span>
          <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">end</span>
      <span class="ruby-keyword">end</span>
    <span class="ruby-keyword">end</span>
    <span class="ruby-identifier">ind</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
  <span class="ruby-keyword">end</span> <span class="ruby-keyword">while</span> <span class="ruby-identifier">depth</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">ind</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">length</span>
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">depth</span><span class="ruby-operator">==</span><span class="ruby-value">0</span>
  [<span class="ruby-identifier">string</span>,<span class="ruby-identifier">arguments</span>]
<span class="ruby-keyword">end</span></pre>
          </div>
          
        </div>

        

        
      </div>

    
    </section>
  
  </section>

</main>


<footer id="validator-badges" role="contentinfo">
  <p><a href="https://validator.w3.org/check/referer">Validate</a>
  <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.1.
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>