/******************************************************************************* * Copyright (c) 2011 Tasktop Technologies and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * David Green - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.wikitext.parser.markup; import java.util.Locale; import org.eclipse.mylyn.wikitext.parser.markup.block.EclipseErrorDetailsBlock; import org.eclipse.mylyn.wikitext.parser.markup.block.JavaStackTraceBlock; /** * A builder for creating {@link MarkupLanguageConfiguration} * * @author David Green * @since 3.0 */ public class ConfigurationBuilder { private final MarkupLanguageConfiguration configuration = new MarkupLanguageConfiguration(); /** * create an instance of the builder */ public static ConfigurationBuilder create() { return new ConfigurationBuilder(); } /** * causes builder to have repository-optimal settings * * @see #disableUnwrappedParagraphs() * @see #escapingHtmlAndXml() * @see #newlinesMustCauseLineBreak() * @see #optimizeForRepositoryUsage() * @see EclipseErrorDetailsBlock * @see JavaStackTraceBlock */ public ConfigurationBuilder repositorySettings() { ConfigurationBuilder builder = create(); builder.disableUnwrappedParagraphs() .escapingHtmlAndXml() .newlinesMustCauseLineBreak() .optimizeForRepositoryUsage() .block(new EclipseErrorDetailsBlock()) .block(new JavaStackTraceBlock()); return builder; } /** * create an instance of a {@link MarkupLanguageConfiguration configuration}. */ public MarkupLanguageConfiguration configuration() { // clone to avoid side-effects if the builder is used again after a call to this method return configuration.clone(); } /** * @see MarkupLanguageConfiguration#setEscapingHtmlAndXml(boolean) */ public ConfigurationBuilder escapingHtmlAndXml() { configuration.setEscapingHtmlAndXml(true); return this; } /** * @see MarkupLanguageConfiguration#setNewlinesMustCauseLineBreak(boolean) */ public ConfigurationBuilder newlinesMustCauseLineBreak() { configuration.setNewlinesMustCauseLineBreak(true); return this; } /** * @see MarkupLanguageConfiguration#setOptimizeForRepositoryUsage(boolean) * @see #repositorySettings() */ public ConfigurationBuilder optimizeForRepositoryUsage() { configuration.setOptimizeForRepositoryUsage(true); return this; } /** * @see MarkupLanguageConfiguration#setWikiWordLinking(Boolean) */ public ConfigurationBuilder disableWikiWordLinking() { configuration.setWikiWordLinking(false); return this; } /** * @see MarkupLanguageConfiguration#setLocale(Locale) */ public ConfigurationBuilder locale(Locale locale) { configuration.setLocale(locale); return this; } /** * @see MarkupLanguageConfiguration#setEnableUnwrappedParagraphs(boolean) */ public ConfigurationBuilder disableUnwrappedParagraphs() { configuration.setEnableUnwrappedParagraphs(false); return this; } /** * @see MarkupLanguageConfiguration#getPhraseModifiers() */ public ConfigurationBuilder phraseModifier(PatternBasedElement phraseModifier) { configuration.getPhraseModifiers().add(phraseModifier); return this; } /** * @see MarkupLanguageConfiguration#getBlocks() */ public ConfigurationBuilder block(Block block) { configuration.getBlocks().add(block); return this; } /** * @see MarkupLanguageConfiguration#getTokens() */ public ConfigurationBuilder token(PatternBasedElement tokenSyntax) { configuration.getTokens().add(tokenSyntax); return this; } }