/* * Copyright (C) 2003-2011 eXo Platform SAS. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.exoplatform.wiki.rendering.macro.span; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.exoplatform.wiki.rendering.macro.MacroUtils; import org.xwiki.component.annotation.Component; import org.xwiki.component.annotation.Requirement; import org.xwiki.component.manager.ComponentManager; import org.xwiki.rendering.block.Block; import org.xwiki.rendering.block.FormatBlock; import org.xwiki.rendering.listener.Format; import org.xwiki.rendering.macro.AbstractMacro; import org.xwiki.rendering.macro.MacroExecutionException; import org.xwiki.rendering.macro.descriptor.DefaultContentDescriptor; import org.xwiki.rendering.transformation.MacroTransformationContext; import org.xwiki.rendering.util.ParserUtils; /** * Created by The eXo Platform SAS * Author : Lai Trung Hieu * hieult@exoplatform.com * Jul 13, 2011 */ @Component("span") public class SpanMacro extends AbstractMacro<SpanParameters> { private static final String CLASS_ATT = "class"; private static final String STYLE_ATT = "style"; /** * The description of the macro */ private static final String DESCRIPTION = "Decorate text line"; /** * Used to get the current syntax parser. */ @Requirement private ComponentManager componentManager; public SpanMacro() { super("Span", DESCRIPTION, new DefaultContentDescriptor(), SpanParameters.class); setDefaultCategory(DEFAULT_CATEGORY_FORMATTING); } @Override public List<Block> execute(SpanParameters parameters, String content, MacroTransformationContext context) throws MacroExecutionException { if (content != null) { String cssClass = parameters.getCssClass(); String cssContent = parameters.getStyle(); Map<String, String> params = new HashMap<String, String>(); if (!StringUtils.isEmpty(cssClass)) { if (!StringUtils.isEmpty(cssClass)) params.put(CLASS_ATT, cssClass); } if (!StringUtils.isEmpty(cssContent)) { params.put(STYLE_ATT, cssContent); } List<Block> contentBlocks = MacroUtils.parseSourceSyntax(getComponentManager(), content, context); (new ParserUtils()).removeTopLevelParagraph(contentBlocks); Block spanBlock = new FormatBlock(contentBlocks, Format.NONE, params); return Collections.singletonList(spanBlock); } else { return Collections.emptyList(); } } @Override public boolean supportsInlineMode() { return true; } /** * @return the component manager. */ public ComponentManager getComponentManager() { return this.componentManager; } }