Package net.asfun.jangod.lib.macro

Source Code of net.asfun.jangod.lib.macro.BlockMacro

package net.asfun.jangod.lib.macro;

import net.asfun.jangod.lib.Macro;
import net.asfun.jangod.parse.ParseException;
import net.asfun.jangod.tree.Node;
import net.asfun.jangod.tree.TreeRebuilder;
import net.asfun.jangod.util.HelperStringTokenizer;

public class BlockMacro implements Macro{

  final String MACRONAME = "block";
  final String ENDMACRONAME = "endblock";
  final String BLK_NAME_PREFIX = "'BLK\"NAME:";
 
  @Override
  public String getEndMacroName() {
    return ENDMACRONAME;
  }

  @Override
  public void refactor(Node current, String helpers, TreeRebuilder rebuilder)
      throws ParseException {
    String[] helper = new HelperStringTokenizer(helpers).allTokens();
    if( helper.length != 1) {
      throw new ParseException("Macro 'block' expects 1 helper >>> " + helper.length);
    }
    String blockName = rebuilder.resolveString(helper[0]);
    //if is parent
    if ( rebuilder.parent == null ) {
      rebuilder.assignNode(BLK_NAME_PREFIX + blockName, current);
    } else {
      Node parentBlock = rebuilder.fetchNode(BLK_NAME_PREFIX + blockName);
      if ( parentBlock == null ) {
        throw new ParseException("Dosen't define block in extends parent with name >>> " + blockName);
      }
//      current.replaceWithChildren(parentBlock);
      rebuilder.nodeReplace(parentBlock, current.children());
    }
  }

  @Override
  public String getName() {
    return MACRONAME;
  }

}
TOP

Related Classes of net.asfun.jangod.lib.macro.BlockMacro

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.