001package com.monochromeroad.grails.plugins.xwiki; 002 003import org.xwiki.rendering.block.XDOM; 004import org.xwiki.rendering.renderer.printer.DefaultWikiPrinter; 005import org.xwiki.rendering.syntax.Syntax; 006import org.xwiki.rendering.transformation.Transformation; 007 008import java.io.*; 009import java.util.Collections; 010 011/** 012 * XWiki Rendering System -- XDOM based 013 * 014 * <p> 015 * It needs to create a XDOM that represents the whole document structure in a memory. 016 * </p> 017 * 018 * <dl> 019 * <dt>Default Syntax</dt> 020 * <dd>xwiki/2.1</dd> 021 * <dt>Output</dt> 022 * <dd>xhtml/1.0</dd> 023 * </dl> 024 * 025 * @author Masatoshi Hayashi 026 */ 027public class XWikiRenderer extends XWikiRenderingSystem { 028 029 public XWikiRenderer(XWikiComponentManager componentManager, XWikiConfigurationProvider configuration) { 030 super(componentManager, configuration); 031 } 032 033 /** 034 * For the Grails Default XWiki Rendering System. 035 * It need to be initialized after construction. 036 */ 037 XWikiRenderer() {} 038 039 /** 040 * XWiki rendering 041 * 042 * @param source source text reader 043 * @param inputSyntax inputSyntax 044 * @param outputSyntax outputSyntax 045 * @return a rendered result 046 */ 047 public String render(Reader source, Syntax inputSyntax, Syntax outputSyntax) { 048 return render(source, inputSyntax, outputSyntax, Collections.<Transformation>emptyList(), Collections.<Transformation>emptyList()); 049 } 050 051 /** 052 * XWiki rendering 053 * 054 * @param source source text reader 055 * @param inputSyntax inputSyntax 056 * @param outputSyntax outputSyntax 057 * @param transformations transforms applied after macros 058 * @return a rendered result 059 */ 060 public String render(Reader source, Syntax inputSyntax, Syntax outputSyntax, Iterable<Transformation> transformations) { 061 return render(source, inputSyntax, outputSyntax, Collections.<Transformation>emptyList(), transformations); 062 } 063 064 /** 065 * XWiki rendering 066 * 067 * @param source source text reader 068 * @param inputSyntax inputSyntax 069 * @param outputSyntax outputSyntax 070 * @param preTransformations transforms applied before macros 071 * @param postTransformations transforms applied after macros 072 * @return a rendered result 073 */ 074 public String render(Reader source, Syntax inputSyntax, Syntax outputSyntax, Iterable<Transformation> preTransformations, Iterable<Transformation> postTransformations) { 075 XDOM xdom = buildXDOM(source, inputSyntax); 076 transform(xdom, inputSyntax, preTransformations, postTransformations); 077 return convertToString(xdom, outputSyntax); 078 } 079 080 /** 081 * XWiki XHTML rendering 082 * 083 * @param source a source text 084 * @param inputSyntax input syntax 085 * @return a rendered result 086 */ 087 public String render(Reader source, Syntax inputSyntax) { 088 Syntax outputSyntax = configurationProvider.getDefaultOutputSyntax(); 089 return render(source, inputSyntax, outputSyntax); 090 } 091 092 /** 093 * XWiki XHTML rendering 094 * 095 * @param source a source text 096 * @param inputSyntax input syntax 097 * @param transformations transforms applied after macros 098 * @return a rendered result 099 */ 100 public String render(Reader source, Syntax inputSyntax, Iterable<Transformation> transformations) { 101 Syntax outputSyntax = configurationProvider.getDefaultOutputSyntax(); 102 return render(source, inputSyntax, outputSyntax, transformations); 103 } 104 105 /** 106 * XWiki XHTML rendering 107 * 108 * @param source a source text 109 * @param inputSyntax input syntax 110 * @param preTransformations transforms applied before macros 111 * @param postTransformations transforms applied after macros 112 * @return a rendered result 113 */ 114 public String render(Reader source, Syntax inputSyntax, Iterable<Transformation> preTransformations, Iterable<Transformation> postTransformations) { 115 Syntax outputSyntax = configurationProvider.getDefaultOutputSyntax(); 116 return render(source, inputSyntax, outputSyntax, preTransformations, postTransformations); 117 } 118 119 /** 120 * XWiki XHTML rendering using default syntax. 121 * 122 * @param source a source text 123 * @return a rendered result 124 */ 125 public String render(Reader source) { 126 Syntax inputSyntax = configurationProvider.getDefaultInputSyntax(); 127 Syntax outputSyntax = configurationProvider.getDefaultOutputSyntax(); 128 return render(source, inputSyntax, outputSyntax); 129 } 130 131 /** 132 * XWiki XHTML rendering using default syntax. 133 * 134 * @param source a source text 135 * @param transformations transforms applied after macros 136 * @return a rendered result 137 */ 138 public String render(Reader source, Iterable<Transformation> transformations) { 139 Syntax inputSyntax = configurationProvider.getDefaultInputSyntax(); 140 Syntax outputSyntax = configurationProvider.getDefaultOutputSyntax(); 141 return render(source, inputSyntax, outputSyntax, transformations); 142 } 143 144 /** 145 * XWiki XHTML rendering using default syntax. 146 * 147 * @param source a source text 148 * @param preTransformations transforms applied before macros 149 * @param postTransformations transforms applied after macros 150 * @return a rendered result 151 */ 152 public String render(Reader source, Iterable<Transformation> preTransformations, Iterable<Transformation> postTransformations) { 153 Syntax inputSyntax = configurationProvider.getDefaultInputSyntax(); 154 Syntax outputSyntax = configurationProvider.getDefaultOutputSyntax(); 155 return render(source, inputSyntax, outputSyntax, preTransformations, postTransformations); 156 } 157 158 /** 159 * XWiki rendering 160 * 161 * @param source a source text 162 * @param inputSyntax inputSyntax 163 * @param outputSyntax outputSyntax 164 * @return a rendered result 165 */ 166 public String render(String source, Syntax inputSyntax, Syntax outputSyntax) { 167 return render(new StringReader(source), inputSyntax, outputSyntax); 168 } 169 170 /** 171 * XWiki rendering 172 * 173 * @param source a source text 174 * @param inputSyntax inputSyntax 175 * @param outputSyntax outputSyntax 176 * @param transformations transforms applied after macros 177 * @return a rendered result 178 */ 179 public String render(String source, Syntax inputSyntax, Syntax outputSyntax, Iterable<Transformation> transformations) { 180 return render(new StringReader(source), inputSyntax, outputSyntax, transformations); 181 } 182 183 /** 184 * XWiki rendering 185 * 186 * @param source a source text 187 * @param inputSyntax inputSyntax 188 * @param outputSyntax outputSyntax 189 * @param preTransformations transforms applied before macros 190 * @param postTransformations transforms applied after macros 191 * @return a rendered result 192 */ 193 public String render(String source, Syntax inputSyntax, Syntax outputSyntax, Iterable<Transformation> preTransformations, Iterable<Transformation> postTransformations) { 194 return render(new StringReader(source), inputSyntax, outputSyntax, preTransformations, postTransformations); 195 } 196 197 /** 198 * XWiki XHTML rendering 199 * 200 * @param source a source text 201 * @param inputSyntax inputSyntax 202 * @return a rendered result 203 */ 204 public String render(String source, Syntax inputSyntax) { 205 return render(new StringReader(source), inputSyntax); 206 } 207 208 /** 209 * XWiki XHTML rendering 210 * 211 * @param source a source text 212 * @param inputSyntax inputSyntax 213 * @param transformations transforms applied after macros 214 * @return a rendered result 215 */ 216 public String render(String source, Syntax inputSyntax, Iterable<Transformation> transformations) { 217 return render(new StringReader(source), inputSyntax, transformations); 218 } 219 220 /** 221 * XWiki XHTML rendering 222 * 223 * @param source a source text 224 * @param inputSyntax inputSyntax 225 * @param preTransformations transforms applied before macros 226 * @param postTransformations transforms applied after macros 227 * @return a rendered result 228 */ 229 public String render(String source, Syntax inputSyntax, Iterable<Transformation> preTransformations, Iterable<Transformation> postTransformations) { 230 return render(new StringReader(source), inputSyntax, preTransformations, postTransformations); 231 } 232 233 /** 234 * XWiki XHTML rendering using default syntax 235 * 236 * @param source a source text 237 * @return a rendered result 238 */ 239 public String render(String source) { 240 return render(new StringReader(source)); 241 } 242 243 /** 244 * XWiki XHTML rendering using default syntax 245 * 246 * @param source a source text 247 * @param transformations transforms applied after macros 248 * @return a rendered result 249 */ 250 public String render(String source, Iterable<Transformation> transformations) { 251 return render(new StringReader(source), transformations); 252 } 253 254 /** 255 * XWiki XHTML rendering using default syntax 256 * 257 * @param source a source text 258 * @param preTransformations transforms applied before macros 259 * @param postTransformations transforms applied after macros 260 * @return a rendered result 261 */ 262 public String render(String source, Iterable<Transformation> preTransformations, Iterable<Transformation> postTransformations) { 263 return render(new StringReader(source), preTransformations, postTransformations); 264 } 265 266 private String convertToString(XDOM xdom, Syntax syntax) { 267 DefaultWikiPrinter printer = new DefaultWikiPrinter(); 268 applyRenderer(xdom, syntax, printer); 269 return printer.toString(); 270 } 271} 272