blob: 6b70a644daaa4be5199952e658df8f8e52f39ba6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2016 David Green 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
* Max Rydahl Andersen - Bug 474084
* Patrik Suzzi <psuzzi@gmail.com> - Bug 474084
*******************************************************************************/
package org.eclipse.mylyn.wikitext.asciidoc.internal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.mylyn.wikitext.asciidoc.internal.util.LanguageSupport;
import org.eclipse.mylyn.wikitext.parser.markup.Block;
import org.eclipse.mylyn.wikitext.parser.markup.ContentState;
import org.eclipse.mylyn.wikitext.parser.markup.IdGenerationStrategy;
import org.eclipse.mylyn.wikitext.parser.markup.Processor;
/**
* Extended {@link ContentState content state} to provide additional AsciiDoc information to {@link Block blocks} and
* other {@link Processor processors}
*/
public class AsciiDocContentState extends ContentState {
public static final String ATTRIBUTE_IDPREFIX = "idprefix"; //$NON-NLS-1$
public static final String IDPREFIX_DEFAULT_VALUE = "_"; //$NON-NLS-1$
public static final String ATTRIBUTE_IDSEPARATOR = "idseparator"; //$NON-NLS-1$
public static final String IDSEPARATOR_DEFAULT_VALUE = "_";//$NON-NLS-1$
public static final String ATTRIBUTE_IMAGESDIR = "imagesdir"; //$NON-NLS-1$
public static final String ATTRIBUTE_LEVELOFFSET = "leveloffset"; //$NON-NLS-1$
// latest title provided via .<optional title> syntax
private String lastTitle;
private String lastPropertiesText;
private final Map<String, String> attributes = new HashMap<>();
public void setLastTitle(String text) {
this.lastTitle = text;
}
/**
* @return last title provided via [{@code .<optional title>} syntax
*/
public String getLastTitle() {
return lastTitle;
}
public void setLastPropertiesText(String text) {
this.lastPropertiesText = text;
}
public Map<String, String> getLastProperties(List<String> positionalParameters) {
return LanguageSupport.parseFormattingProperties(lastPropertiesText, positionalParameters);
}
public boolean isAttributeDefined(String attrName) {
return attributes.containsKey(attrName);
}
public String getAttribute(String attrName) {
return attributes.get(attrName);
}
public String getAttributeOrValue(String attrName, String valueIfNull) {
String value = getAttribute(attrName);
if (value != null) {
return value;
}
return valueIfNull;
}
public void putAttribute(String attrName, String value) {
attributes.put(attrName, value);
IdGenerationStrategy generationStrategy = getIdGenerator().getGenerationStrategy();
if (generationStrategy instanceof AsciiDocIdGenerationStrategy) {
if (ATTRIBUTE_IDPREFIX.equals(attrName)) {
((AsciiDocIdGenerationStrategy) generationStrategy).setIdPrefix(value);
} else if (ATTRIBUTE_IDSEPARATOR.equals(attrName)) {
((AsciiDocIdGenerationStrategy) generationStrategy).setIdSeparator(value);
}
}
}
public void removeAttribute(String attrName) {
attributes.remove(attrName);
IdGenerationStrategy generationStrategy = getIdGenerator().getGenerationStrategy();
if (generationStrategy instanceof AsciiDocIdGenerationStrategy) {
if (ATTRIBUTE_IDPREFIX.equals(attrName)) {
((AsciiDocIdGenerationStrategy) generationStrategy)
.setIdPrefix(AsciiDocContentState.IDPREFIX_DEFAULT_VALUE);
} else if (ATTRIBUTE_IDSEPARATOR.equals(attrName)) {
((AsciiDocIdGenerationStrategy) generationStrategy)
.setIdSeparator(AsciiDocContentState.IDSEPARATOR_DEFAULT_VALUE);
}
}
}
}