/*******************************************************************************
* Copyright (c) 2016 Jeremie Bresson 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:
* Jeremie Bresson - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.wikitext.asciidoc.internal.token;
import org.eclipse.mylyn.wikitext.parser.markup.PatternBasedElementProcessor;
/**
* Element processor for {@link XrefReplacementToken} and {@link XrefMacroReplacementToken}
*/
class XrefReplacementTokenProcessor extends PatternBasedElementProcessor {
private final int linkTextOffset;
public XrefReplacementTokenProcessor(int linkTextOffset) {
this.linkTextOffset = linkTextOffset;
}
@Override
public void emit() {
builder.link(linkTarget(), linkText());
}
private String linkTarget() {
String target = linkTargetCaptureGroup();
if (!target.contains("#")) { //$NON-NLS-1$
target = "#" + target; //$NON-NLS-1$
} else if (target.charAt(target.length() - 1) == '#') {
target = target.substring(0, target.length() - 1);
}
return target;
}
private String linkText() {
String linkText = linkTextCaptureGroup();
StringBuilder buffer = new StringBuilder();
if (linkText != null && linkText.length() > linkTextOffset) {
buffer.append(linkText.substring(linkTextOffset).trim());
} else {
buffer.append("["); //$NON-NLS-1$
String target = linkTargetCaptureGroup();
int hashPosition = target.indexOf("#"); //$NON-NLS-1$
if (hashPosition > 0) {
int extStart = target.substring(0, hashPosition).lastIndexOf("."); //$NON-NLS-1$
if (extStart > 0) {
buffer.append(target.substring(0, extStart));
} else {
buffer.append(target.substring(0, hashPosition));
}
if (hashPosition != target.length() - 1) {
buffer.append(target.substring(hashPosition));
}
} else {
buffer.append(target);
}
buffer.append("]"); //$NON-NLS-1$
}
return buffer.toString();
}
private String linkTargetCaptureGroup() {
return group(1);
}
private String linkTextCaptureGroup() {
return group(2);
}
}