<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,5 @@
+* Allow lowercased namespaces. [#2 state:resolved] (tobie)
+
 * Remove trailing whitespaces. Outdent descriptions. [#1 state:resolved, #3 state:resolved] (tobie)
 
 * Switch argument type selector from `,` to `|`. (tobie)
@@ -28,7 +30,7 @@
 
 * Refactor PDoc::Generators::Html::Helpers (tobie)
 
-* Rename rakefile as Rakefile. [savetheclocktower]
+* Rename rakefile as Rakefile. (savetheclocktower)
 
 * Add PDoc::Runner. (tobie)
 </diff>
      <filename>CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -44,8 +44,16 @@ module EbnfExpression
   end
   
   class KlassMethod &lt; Method
-    def full_name
-      &quot;#{super}.#{name}&quot;
+    def klass_name
+      js_namespace.to_a.slice(-2)
+    end
+    
+    def name
+      js_namespace.to_a.last
+    end
+
+    def namespace
+      js_namespace.to_a.slice(0..-2).join(&quot;.&quot;)
     end
   end
   
@@ -84,8 +92,16 @@ module EbnfExpression
   end
   
   class KlassProperty &lt; Base
-    def full_name
-      &quot;#{super}.#{name}&quot;
+    def klass_name
+      js_namespace.to_a.slice(-2)
+    end
+    
+    def name
+      js_namespace.to_a.last
+    end
+
+    def namespace
+      js_namespace.to_a.slice(0..-2).join(&quot;.&quot;)
     end
   end
   </diff>
      <filename>lib/pdoc/parser/ebnf_expression_nodes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -21,7 +21,7 @@ grammar EbnfExpression
   end
 
   rule klass_method
-    space* js_namespace '.' js_variable args return_value &lt;KlassMethod&gt;
+    space* js_namespace args return_value &lt;KlassMethod&gt;
   end
   
   rule instance_method
@@ -29,7 +29,7 @@ grammar EbnfExpression
   end
   
   rule klass_property
-    space* js_namespace '.' js_variable return_value &lt;KlassProperty&gt;
+    space* js_namespace return_value &lt;KlassProperty&gt;
   end
   
   rule instance_property</diff>
      <filename>lib/pdoc/parser/treetop_files/ebnf_expression.treetop</filename>
    </modified>
    <modified>
      <diff>@@ -33,7 +33,7 @@ grammar EbnfJavascript
   end
   
   rule js_namespace
-    js_constant ('.' js_constant)* {
+    (js_constant / js_variable) ('.' (js_constant / js_variable))* {
       def namespace
         to_a.slice(0..-2).join(&quot;.&quot;)
       end</diff>
      <filename>lib/pdoc/parser/treetop_files/ebnf_javascript.treetop</filename>
    </modified>
    <modified>
      <diff>@@ -35,6 +35,16 @@ class EbnfExpressionTest &lt; Test::Unit::TestCase
     assert_equal &quot;Responders&quot;,                 parse(ebnf).klass_name
     assert_equal &quot;Array&quot;,                      parse(ebnf).returns
     assert_equal ebnf,                         parse(ebnf).to_s
+    
+    ebnf = &quot;document.viewport.foo -&gt; Bar&quot;
+    assert_parsed ebnf
+    assert_equal KlassProperty,                parse(ebnf).class
+    assert_equal &quot;document.viewport&quot;,          parse(ebnf).namespace
+    assert_equal &quot;foo&quot;,                        parse(ebnf).name
+    assert_equal &quot;document.viewport.foo&quot;,      parse(ebnf).full_name
+    assert_equal &quot;viewport&quot;,                   parse(ebnf).klass_name
+    assert_equal &quot;Bar&quot;,                        parse(ebnf).returns
+    assert_equal ebnf,                         parse(ebnf).to_s
   end
   
   def test_utility
@@ -64,6 +74,17 @@ class EbnfExpressionTest &lt; Test::Unit::TestCase
     assert_equal %w[element content],          parse(ebnf).arguments.map(&amp;:name)
     assert_equal &quot;Element&quot;,                    parse(ebnf).returns
     assert_equal ebnf,                         parse(ebnf).to_s
+    
+    ebnf = &quot;document.viewport.getWidth() -&gt; Number&quot;
+    assert_parsed ebnf
+    assert_equal KlassMethod,                  parse(ebnf).class
+    assert_equal &quot;document.viewport&quot;,          parse(ebnf).namespace
+    assert_equal &quot;getWidth&quot;,                   parse(ebnf).name
+    assert_equal &quot;document.viewport.getWidth&quot;, parse(ebnf).full_name
+    assert_equal &quot;viewport&quot;,                   parse(ebnf).klass_name
+    assert_equal [],                           parse(ebnf).arguments
+    assert_equal &quot;Number&quot;,                     parse(ebnf).returns
+    assert_equal ebnf,                         parse(ebnf).to_s
   end
   
   def test_instance_method
@@ -181,6 +202,26 @@ class EbnfExpressionTest &lt; Test::Unit::TestCase
     assert_equal %w[Enumerable],               parse(ebnf).mixins.map(&amp;:name)
     assert_equal [&quot;&quot;],                         parse(ebnf).mixins.map(&amp;:namespace)
     assert_equal ebnf,                         parse(ebnf).to_s
+    
+    ebnf = &quot;document&quot;
+    assert_parsed ebnf
+    assert_equal Namespace,                    parse(ebnf).class
+    assert_equal &quot;&quot;,                           parse(ebnf).namespace
+    assert_equal &quot;document&quot;,                   parse(ebnf).name
+    assert_equal &quot;document&quot;,                   parse(ebnf).full_name
+    assert_equal nil,                          parse(ebnf).klass_name
+    assert_equal [],                           parse(ebnf).mixins
+    assert_equal ebnf,                         parse(ebnf).to_s
+    
+    ebnf = &quot;document.viewport&quot;
+    assert_parsed ebnf
+    assert_equal Namespace,                    parse(ebnf).class
+    assert_equal &quot;document&quot;,                   parse(ebnf).namespace
+    assert_equal &quot;viewport&quot;,                   parse(ebnf).name
+    assert_equal &quot;document.viewport&quot;,          parse(ebnf).full_name
+    assert_equal nil,                          parse(ebnf).klass_name
+    assert_equal [],                           parse(ebnf).mixins
+    assert_equal ebnf,                         parse(ebnf).to_s
   end
   
   def test_mixin</diff>
      <filename>test/unit/parser/ebnf_expression_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -30,5 +30,8 @@ class EbnfJavascriptTest &lt; Test::Unit::TestCase
   
   def test_namespace # basic and non-recursive
     assert_parsed &quot;Foo.Bar&quot;
+    assert_parsed &quot;foo.bar&quot;
+    assert_parsed &quot;foo.Bar&quot;
+    assert_parsed &quot;Foo.bar&quot;
   end
 end</diff>
      <filename>test/unit/parser/ebnf_javascript_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>68ee9266c6ffb9c8f198c8dc152aedf7c11df24f</id>
    </parent>
  </parents>
  <author>
    <name>Tobie Langel</name>
    <email>tobie.langel@gmail.com</email>
  </author>
  <url>http://github.com/tobie/pdoc/commit/f46ae6877af6fd02125f8d61bf953413ae115fbf</url>
  <id>f46ae6877af6fd02125f8d61bf953413ae115fbf</id>
  <committed-date>2008-05-04T16:38:05-07:00</committed-date>
  <authored-date>2008-05-04T16:38:05-07:00</authored-date>
  <message>Allow lowercased namespaces.</message>
  <tree>70761405769b03ed567ec7daebdbb33972ae5fb2</tree>
  <committer>
    <name>Tobie Langel</name>
    <email>tobie.langel@gmail.com</email>
  </committer>
</commit>
