/**
 * @license
 * Copyright 2017 The FOAM Authors. All Rights Reserved.
 * http://www.apache.org/licenses/LICENSE-2.0
 */

package foam.lib.json;

import foam.lib.parse.*;

public class MapParser
  extends ProxyParser
{
  public MapParser() {
    super(
      new Seq1(1,
         new Whitespace(),
            new Seq1(2, new Literal("{"),
                new Whitespace(),
                new Repeat(
                    new Seq2(1, 5,
                        new Whitespace(),
                        new AnyKeyParser(),
                        new Whitespace(),
                        new Literal(":"),
                        new Whitespace(),
                        AnyParser.instance()),
                    new Seq0(new Whitespace(), new Literal(","), new Whitespace())),
                new Whitespace(),
                new Literal("}")),
        new Whitespace())
    );
  }

  public PStream parse(PStream ps, ParserContext x) {
    ps = super.parse(ps, x);

    if ( ps != null ) {
      Object[] values = (Object[]) ps.value();
      java.util.Map map = new java.util.HashMap(values.length);

      for ( int i = 0 ; i < values.length ; i++ ) {
        Object[] item = (Object[]) values[i];

        map.put(item[0], item[1]);
      }

      return ps.setValue(map);
    }

    return ps;
  }
}

@@ -247,23 +247,16 @@
   super(
-%0A      
 new Seq1
@@ -260,11 +260,21 @@
 eq1(
-1
+3
 ,%0A
+          
     
@@ -312,19 +312,14 @@
     
-new Seq1(2,
+      
  new
@@ -329,24 +329,27 @@
 teral(%22%7B%22),%0A
+   
             
@@ -382,24 +382,27 @@
             
+   
 new Repeat(%0A
@@ -400,18 +400,31 @@
  Repeat(
+new Seq2(1, 5,
 %0A
- 
         
@@ -434,27 +434,8 @@
     
-    new Seq2(1, 5,%0A
     
@@ -492,24 +492,39 @@
             
+               
 new AnyKeyPa
@@ -547,32 +547,47 @@
                 
+            
+   
 new Whitespace()
@@ -604,32 +604,47 @@
                 
+              
+ 
 new Literal(%22:%22)
@@ -641,24 +641,39 @@
 teral(%22:%22),%0A
+               
             
@@ -726,16 +726,31 @@
         
+               
 AnyParse
@@ -760,24 +760,34 @@
 nstance()),%0A
+          
             
@@ -841,30 +841,15 @@
 %22,%22)
-, new Whitespace()
 )),%0A
+   
     
@@ -886,32 +886,35 @@
                 
+   
 new Literal(%22%7D%22)
@@ -918,40 +918,8 @@
 %7D%22))
-,%0A        new Whitespace())%0A    
 );%0A 
@@ -1005,17 +1005,16 @@
 ps, x);%0A
-%0A
     if (
@@ -1021,9 +1021,9 @@
  ps 
-!
+=
 = nu
@@ -1027,20 +1027,28 @@
  null ) 
-%7B%0A  
+return ps;%0A%0A
     Obje
@@ -1088,18 +1088,16 @@
 ();%0A    
- 
- 
 java.uti
@@ -1151,18 +1151,16 @@
 );%0A%0A    
-  
 for ( in
@@ -1197,18 +1197,16 @@
 i++ ) %7B%0A
-  
       Ob
@@ -1248,18 +1248,16 @@
 %0A%0A      
-  
 map.put(
@@ -1275,18 +1275,16 @@
 em%5B1%5D);%0A
-  
     %7D%0A%0A 
@@ -1286,18 +1286,16 @@
  %7D%0A%0A    
-  
 return p
@@ -1315,30 +1315,8 @@
 p);%0A
-    %7D%0A%0A    return ps;%0A
   %7D%0A

Simplify MapParser, don't require trailing whitespace.