1 /* 2 * Copyright 2010 - org.tinyjee.maven 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.tinyjee.maven.dim; 18 19 /** 20 * Defines the signature of the include macro. 21 * 22 * @author Juergen_Kellerer, 2010-09-06 23 * @version 1.1 24 */ 25 public interface IncludeMacroSignature { 26 /** 27 * Sets the content to include using a source path, source URL or the fully qualified java class name. 28 * <p/> 29 * Examples: <code><pre> 30 * source=path/to/file 31 * source=my.package.MyClass 32 * source=/absolute/path/to/file 33 * source=http://somehost/someservice#.xml 34 * source=classpath:/bundled/template.vm 35 * </pre></code> 36 * <p/> 37 * Relative source paths are resolved against multiple base locations including <b>site</b>, <b>java (test)source</b> and 38 * <b>resource</b> directories. Non existing absolute paths starting with the project's base directory are stripped and retried 39 * using the relative paths resolver. 40 * <br/> 41 * When remote content is specified using URLs with schemes like <b>http</b> or <b>ftp</b>, the content is downloaded 42 * using a network connection and cached locally for the time of a single build (= subsequent requests to the same remote 43 * source will not download the source again). 44 * <p/> 45 * Executing the goal "{@code initialize}" within the maven build enables the following additional syntax for referencing a 46 * module file location: <code><pre> 47 * [artifactId]:path/to/file 48 * [groupId:artifactId]:path/to/file 49 * [top]:path/to/file/in/project/root 50 * </pre></code> 51 * <p/> 52 * Finally sources can also be loaded from the module's or the site building <b>classpath</b> using "{@code classpath:/path/to/file}". 53 * <br/> 54 * The classpath is constructed out of the module <code>sources</code> and <code>test-sources</code> folder with the parent 55 * classloader being defined by the dependency list of the <code>maven-site-plugin</code>. 56 * When the goal "{@code initialize}" is executed the classpath includes all dependencies that are defined inside 57 * the <code>pom.xml</code>. 58 */ 59 String PARAM_SOURCE = "source"; 60 61 /** 62 * Sets a class to use as dynamic source for content, request parameters or both. 63 * <p/> 64 * A class that is set using this parameter must implement the interface <code>java.util.Map</code> 65 * (or derive from a Map implementation like <code>java.util.HashMap</code>). 66 * All entries of this map are treated as if they had been specified as request parameters, 67 * on the macro call (therefore all parameters except 'source-class' can be set dynamically). 68 * <p/> 69 * The source class may choose to use one of the 4 constructor signatures: <code>Default</code>, 70 * <code>Constructor(java.io.File basePath)</code>, <code>Constructor(java.util.Map requestProperties)</code> 71 * or <code>Constructor(java.io.File basePath, java.util.Map requestProperties)</code>. 72 * <p/> 73 * The default behaviour of a source class should be to provide properties for a velocity template that is specified by 74 * either setting the "source" key to a bundled template or require the user to set the parameter when using the macro with 75 * this class.<br/> 76 * Alternatively it can also directly provide the content to include (instead of loading the template specified with 77 * <code>"source"</code>). To do so the map key <code>"source-content"</code> must either return a <code>String</code> or 78 * <code>Map<Integer, List<String>></code> (firstLine=>lines) containing the content to include. 79 * <p/> 80 * The classpath that is used to load the class is similar to the classpath used when loading sources. 81 * (see <code>"source"</code> parameter for more information) 82 * <p/> 83 * Simple Example:<code><pre> 84 * package my.package; 85 * public class MySource extends HashMap<String, Object> { 86 * public MySource(java.io.File basePath, java.util.Map requestProperties) { 87 * putAll(requestProperties); 88 * put("verbatim", false); 89 * put("source-content", "<b>Hello World!</b>"); 90 * } 91 * } 92 * </pre></code> 93 * Macro Call:<code><pre> 94 * %{include|source-class=my.package.MySource} 95 * </pre></code> 96 */ 97 String PARAM_SOURCE_CLASS = "source-class"; 98 99 /** 100 * Sets the source content inline with the macro call. (This feature may become more useful when 101 * <a href="http://jira.codehaus.org/browse/DOXIA-445">DOXIA-445</a> gets implemented. Voting for it may help.) 102 * <p/> 103 * The purpose of this parameter is to allow the inline definition of templates used to render output of source classes. 104 * Unless specified, "<code>source-is-template</code>" is set to "<code>true</code>" when this parameter is set with the 105 * macro call (it is not implicitly set when the parameter was set by a source class). 106 * <p/> 107 * Example: Including the main java doc comment of a class (using the JavaSourceLoader extension)<code><pre> 108 * %{include|source-content=$comment|source-java=my.package.MyClass} 109 * </pre></code> 110 */ 111 String PARAM_SOURCE_CONTENT = "source-content"; 112 113 /** 114 * Sets the source path using <code>java.io.File</code> instead of evaluating it against URL 115 * or File paths. 116 * <p/> 117 * Under normal conditions it's easier to set the <code>"source"</code> parameter instead. 118 * However there may be occasions where it's necessary to force that the path is treated 119 * as a file path. 120 */ 121 String PARAM_FILE = "file"; 122 123 /** 124 * Toggles whether the source content is treated as a Velocity template. 125 * (<i>Default: auto (= true if file extension ends with ".vm")</i>) 126 */ 127 String PARAM_SOURCE_IS_TEMPLATE = "source-is-template"; 128 129 /** 130 * Sets the content type of the source. 131 * (<i>Default: auto (= detected by file extensions ".apt", ".fml", ".xdoc")</i>) 132 * <p/> 133 * Setting this property has no effect for verbatim content. With non-verbatim 134 * content this information is used to select a doxia parser that transcodes the 135 * the content when including it into the site. Using a parser allows to use <i>xdoc</i> 136 * templates inside <i>apt</i> documents and vice versa. 137 * <p/> 138 * Values that will select a parser are "<b>apt</b>", "<b>fml</b>", "<b>xdoc</b>", 139 * any other values will have no effect. 140 */ 141 String PARAM_SOURCE_CONTENT_TYPE = "source-content-type"; 142 143 /** 144 * Defines the charset to use when loading the source content. 145 * (<i>Default: context specific</i>, used to be <i>"UTF-8" in pre 1-1-alpha</i>) 146 * <p/> 147 * When no charset is specified the following actions apply:<ul> 148 * <li>If auto detection is enabled, the detected charset is used.</li> 149 * <li>If source is using the HTTP protocol, any given charset is used.</li> 150 * <li>The build charset is used when the goal {@code initialize} was executed.</li> 151 * <li>The systems default charset is used if nothing else is defined.</li> 152 * </ul> 153 */ 154 String PARAM_CHARSET = "charset"; 155 156 /** 157 * Toggles whether charset detection is used when loading source content. 158 * (<i>Default: true</i>) 159 * <p/> 160 * This value can have multiple values:<ul> 161 * <li>false: Disable any auto detection.</li> 162 * <li>true: Enable auto detection, externally specified charsets override detected values.</li> 163 * <li>force: Use auto detection result even if confidence is low.</li> 164 * </ul> 165 */ 166 String PARAM_CHARSET_AUTODETECT = "charset-autodetect"; 167 168 /** 169 * Toggles whether the content is verbatim (included as source) or non-verbatim (included 170 * as markup and interpreted). 171 * (<i>Default: auto</i>) 172 */ 173 String PARAM_VERBATIM = "verbatim"; 174 175 /** 176 * Sets the snippet-id to use for extracting snippets out of the specified source. 177 * <p/> 178 * Snippets are processed on a line by line basis and multiple snippets with the same 179 * name may appear in one file. In order to define a section using a snippet id, 180 * surround a block with:<br/> 181 * <code> 182 * // START SNIPPET: snippet-id<br/> 183 * ... code to include ...<br/> 184 * // END SNIPPET: snippet-id<br/> 185 * </code> 186 * <p/> 187 * Note: From version 1.1 this parameter is deprecated, use {@code snippet} instead. 188 * Calls like "{@code %{include|id=SnippetId|..}}" translate to {@code %{include|snippet=#SnippetId|..}} 189 */ 190 @Deprecated 191 String PARAM_SNIPPET_ID = "id"; 192 193 /** 194 * Sets one or more comma separated expression to select the content snippets to include. 195 * <p/> 196 * Snippet selection allows to define what content is included or excluded from the loaded or generated source. 197 * This operation is always the last thing to happen before including and highlighting content and can therefore be 198 * combined with any other options that the macro offers. 199 * <p/> 200 * The general format of this parameter is "{@code prefix:expression1, prefix:expression2}, .." to <b>include</b> 201 * matching content and "{@code !prefix:expression1, !prefix:expression2}, .." to <b>exclude</b> matching content. 202 * <p/> 203 * <span id="START-SNIPPET: snippet-selection-examples"> 204 * <b>Examples</b>:<ul> 205 * <li>Include snippet by ID: '{@code snippet=#SnippetId}'</li> 206 * <li>Exclude all snippet id definitions: '{@code snippet=!snippet-ids}'</li> 207 * <li>Include by ID, exclude any definitions: '{@code snippet=#SnippetId, !snippet-ids}'</li> 208 * <li>'grep' like syntax: '{@code snippet=grep:Token,!grep:NotToken}'</li> 209 * <li>'<a href="http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html">Regular Expression</a>' 210 * syntax: '{@code snippet=re:([0-9,.;\s]+)$}' (all lines ending with numeric expressions)</li> 211 * <li>'<a href="http://www.w3.org/TR/xpath/">XPath</a>' syntax: '{@code snippet=xp:/html/head/title}'</li> 212 * <li>'AOP'-like syntax: '{@code snippet=aj:..InnerClass, !aj:..toString()}'</li> 213 * <li>'Token & Brace' syntax: '<code>snippet=tb:"json-key"{, !tb:"inner-array"[</code>'</li> 214 * <li>Line range: '{@code snippet=lines:50-100}'</li> 215 * </ul> 216 * </span><span id="END-SNIPPET: snippet-selection-examples"/> 217 * <p/> 218 * Some snippet selectors (e.g. XPath or AOP) require that the source content is well formed (XML/JSON or Java in this example) 219 * and may fail if applied to other content. 220 * <br/> 221 * A complete overview on available expressions can be seen by looking after implementations of 222 * {@link org.tinyjee.maven.dim.spi.SnippetSelector}. 223 * 224 * @since 1.1-alpha 225 */ 226 String PARAM_SNIPPET = "snippet"; 227 228 /** 229 * Optional parameter that can be used to grow snippet selections by the given amount of lines. 230 * 231 * @since 1.1-alpha 232 */ 233 String PARAM_SNIPPET_GROW_OFFSET = "snippet-grow-offset"; 234 235 /** 236 * Optional parameter that can be used to grow the start of snippet selections by the given amount of lines. 237 * 238 * @since 1.1-alpha 239 */ 240 String PARAM_SNIPPET_START_OFFSET = "snippet-start-offset"; 241 242 /** 243 * Optional parameter that can be used to grow the end of snippet selections by the given amount of lines. 244 * 245 * @since 1.1-alpha 246 */ 247 String PARAM_SNIPPET_END_OFFSET = "snippet-end-offset"; 248 249 /** 250 * Optional boolean parameter that toggles whether growing is applied to exclusions as well. 251 * (<i>Default: false</i>) 252 * 253 * @since 1.1-alpha 254 */ 255 String PARAM_SNIPPET_GROW_EXCLUDES = "snippet-grow-excludes"; 256 257 /** 258 * Toggles whether the gutter including line numbers is shown for verbatim content. 259 * (<i>Default: true</i>) 260 */ 261 String PARAM_SHOW_GUTTER = "show-gutter"; 262 263 /** 264 * Sets the line number to use for the first line (if gutter is shown). 265 * (<i>Default: auto</i>) 266 */ 267 String PARAM_SET_FIRST_LINE = "set-first-line"; 268 269 /** 270 * Pads all line numbers by the specified amount of zeros (if gutter is shown). 271 */ 272 String PARAM_PAD_LINE_NUMBERS = "pad-line-numbers"; 273 274 /** 275 * Sets a list of lines to highlight inside verbatim content. 276 * <p/> 277 * Lines can be specified as a comma separated list of line numbers, as a range 278 * using x-y or as a mixture of the 2.<br/> 279 * Example usage: <code>highlight=1,5,10,20-25</code> 280 * <p/> 281 * As of version <i>1.1-beta</i> this option is deprecated and was replaced by "{@code highlight-lines}". 282 * The example usage from above translates to "{@code highlight-lines=lines:1,5,10,20-25}" 283 */ 284 @Deprecated 285 String PARAM_HIGHLIGHT = "highlight"; 286 287 /** 288 * Defines lines to highlight inside verbatim content using the same selection logic as used within the "{@code snippet}" parameter. 289 * Selected lines are highlighted by the use of a background color. 290 * <p/> 291 * Examples:<ul> 292 * <li>"{@code highlight-lines=grep:org.tinyjee.dim+3}"</li> 293 * <li>"{@code highlight-lines=xp://license}"</li> 294 * <li>"{@code highlight-lines=lines:1,5,10,20-25}"</li> 295 * </ul> 296 * 297 * @since 1.1-beta 298 */ 299 String PARAM_HIGHLIGHT_LINES = "highlight-lines"; 300 301 /** 302 * Sets the highlighter (brush) to use when highlighting verbatim content. 303 * (<i>Default: auto ; uses source content or extension to detect</i>) 304 * <p/> 305 * DIM bundles the brushes <b>bat</b>, <b>properties</b>, <b>clojure</b> and <b>velocity</b> in 306 * <b>addition</b> to what is available by <b>default</b> inside the syntax highlighting library. 307 * A set of known brushes includes: <b>java</b>, <b>js</b>, <b>jsp</b>, <b>cpp</b>, <b>csharp</b>, 308 * <b>sql</b>, <b>xml</b>, <b>html</b>, etc. Check the documentation of SyntaxHighlighter to get a complete list. 309 * <p/> 310 * Highlighting of verbatim content can be disabled by setting this property to <b>none</b>. 311 * <p/> 312 * Specifying the highlight type as "<code>html/[brushname]</code>" allows to highlight HTML with embedded scripts. 313 * A common use case is "<code>html/js</code>" which highlights any HTML-like code with embedded javascript (Note: files with 314 * an extension of ".xhtml" or ".html" default to this highlighting type). 315 */ 316 String PARAM_HIGHLIGHT_TYPE = "highlight-type"; 317 318 /** 319 * Sets the highlighting color theme to use. 320 * (<i>Default: default</i>) 321 * <p/> 322 * Possible values: "<code>default</code>", "<code>django</code>", "<code>eclipse</code>", 323 * "<code>emacs</code>", "<code>fadeToGrey</code>", "<code>MDUltra</code>", 324 * "<code>midnight</code>", "<code>RDark</code>". 325 * (See: <a href="http://alexgorbatchev.com/SyntaxHighlighter/manual/themes/"> 326 * http://alexgorbatchev.com/SyntaxHighlighter/manual/themes/</a>) 327 * <br/> 328 * The theme can be set only once per page. The first highlighted inclusion will set the theme for all others. 329 */ 330 String PARAM_HIGHLIGHT_THEME = "highlight-theme"; 331 332 /** 333 * Forces the re-loading of source content when set to <code>true</code>. 334 * <p/> 335 * Content is cached for the lifetime of the build to avoid double 336 * downloads of remote resources. 337 */ 338 String PARAM_NO_CACHE = "no-cache"; 339 340 /** 341 * Sets the path of the site source directory. 342 * <p/> 343 * Setting this property is not required if the site directory uses standard paths or is located directly below the 344 * module's base directory. 345 * <p/> 346 * As of version <b>1.1-beta</b> this option is deprecated and was replaced by running the "initialize" goal 347 * using the macro as build plugin. 348 */ 349 @Deprecated 350 String PARAM_SITE_DIRECTORY = "site-directory"; 351 }