/* * Copyright (C) 2003-2010 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.wiki.rendering.render.confluence; import java.util.Map; import org.xwiki.rendering.internal.renderer.ParametersPrinter; /** * Created by The eXo Platform SAS * Author : viet nguyen * viet.nguyen@exoplatform.com * Jul 2, 2010 */ /** * Generates Confluence Syntax for a Macro Block. */ public class ConfluenceSyntaxMacroRenderer { private ParametersPrinter parametersPrinter = new ParametersPrinter(); public String renderMacro(String id, Map<String, String> parameters, String content, boolean isInline) { StringBuffer buffer = new StringBuffer(); // Print begin macro buffer.append("{"); buffer.append(id); // Print parameters if (!parameters.isEmpty()) { buffer.append(':'); buffer.append(renderMacroParameters(parameters)); } buffer.append("}"); // Print content and end macro if (content != null && content.length() > 0) { if (!isInline && !content.startsWith("\n")) { buffer.append("\n"); } buffer.append(content); if (!isInline && !content.endsWith("\n")) { buffer.append("\n"); } //TODO: Confluence parser has bug in some case, ex: // ||What you need to type||What you will get|| // |{color:red}look ma, red text!{color}|{color:red}look ma, red text!{color}| //content is : look ma, red text!{color} if (!content.endsWith("{" + id + "}")) { buffer.append("{").append(id).append("}"); } } return buffer.toString(); } public String renderMacroParameters(Map<String, String> parameters) { return this.parametersPrinter.print(parameters, '~').replace("}", "~}"); } }