content: package rabbitescape.engine.textworld;
  
  import static rabbitescape.engine.util.Util.*;
  
  import java.util.HashMap;
  import java.util.Map;
  
  import rabbitescape.engine.Thing;
  import rabbitescape.engine.util.Util;
  import rabbitescape.engine.util.VariantGenerator;
  
  public class ItemsLineProcessor
  {
      private final LineProcessor lineProcessor;
      private final int x;
      private final int y;
      private final String value;
  
      private String stateString;
      private Thing currentThing;
  
      public ItemsLineProcessor(
          LineProcessor lineProcessor,
          int x,
          int y,
          String value
      )
      {
          this.lineProcessor = lineProcessor;
          this.x = x;
          this.y = y;
          this.value = value;
          this.currentThing = null;
          this.stateString = null;
      }
  
      public void process( VariantGenerator variantGen )
      {
          for ( char c : asChars( value ) )
          {
              if ( stateString != null )
              {
                  if ( c == '}' )
                  {
                      Map<String, String> mp = stateMap( stateString );
                      if ( mp == null )
                      {
                          throw new BadStateMap(
                              stateString,
                              lineProcessor.lines,
                              lineProcessor.lineNum
                          );
                      }
                      currentThing.restoreFromState( mp );
                      stateString = null;
                  }
                  else
                  {
                      stateString += c;
                  }
              }
              else if ( c == '{' )
              {
                  stateString = "";
              }
              else
              {
                  currentThing = lineProcessor.processChar( c, x, y, variantGen );
              }
          }
      }
  
      public static Map<String, String> stateMap( String str )
      {
          Map<String, String> ret = new HashMap<String, String>();
  
          if ( Util.isEmpty( str ) )
          {
              return ret;
          }
  
          for ( String pair : split( str, "," ) )
          {
              String[] spl = split( pair, ":" );
              if ( spl.length != 2 )
              {
                  return null;
              }
              ret.put( spl[0], spl[1] );
          }
  
          return ret;
      }
  }
  