package org.exoplatform.wiki.rendering.macro.anchor;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.xwiki.component.annotation.Component;
import org.xwiki.rendering.block.Block;
import org.xwiki.rendering.block.LinkBlock;
import org.xwiki.rendering.block.WordBlock;
import org.xwiki.rendering.listener.reference.DocumentResourceReference;
import org.xwiki.rendering.macro.AbstractMacro;
import org.xwiki.rendering.macro.MacroExecutionException;
import org.xwiki.rendering.transformation.MacroTransformationContext;
@Component("anchor")
public class AnchorMacro extends AbstractMacro<AnchorMacroParameters> {
/**
* The description of the macro.
*/
private static final String DESCRIPTION = "Render an anchor. By access a anchor link, user can go to its position";
public AnchorMacro() {
super("Anchor", DESCRIPTION, AnchorMacroParameters.class);
setDefaultCategory(DEFAULT_CATEGORY_NAVIGATION);
}
@Override
public List<Block> execute(AnchorMacroParameters parameters,
String content,
MacroTransformationContext context) throws MacroExecutionException {
String anchorName = parameters.getName();
String anchor = "H" + anchorName;
DocumentResourceReference documentReference = new DocumentResourceReference(null);
documentReference.setAnchor(anchor);
Map<String, String> params = new HashMap<String, String>();
params.put("name", anchor);
List<Block> inner = new ArrayList<Block>();
inner.add(new WordBlock(anchorName));
Block anchorBlock = new LinkBlock(inner, documentReference, false, params);
return Collections.singletonList(anchorBlock);
}
@Override
public boolean supportsInlineMode() {
return true;
}
}