package org.objectstyle.wolips.templateeditor;
import jp.aonir.fuzzyxml.FuzzyXMLDocument;
import jp.aonir.fuzzyxml.FuzzyXMLElement;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.Region;
import org.objectstyle.wolips.bindings.wod.IWodBinding;
import org.objectstyle.wolips.bindings.wod.SimpleWodElement;
import org.objectstyle.wolips.variables.BuildProperties;
import org.objectstyle.wolips.wodclipse.core.completion.WodParserCache;
import org.objectstyle.wolips.wodclipse.core.document.WodBindingValueHyperlink;
import org.objectstyle.wolips.wodclipse.core.document.WodElementTypeHyperlink;
import org.objectstyle.wolips.wodclipse.core.util.FuzzyXMLWodElement;
import org.objectstyle.wolips.wodclipse.core.util.WodHtmlUtils;
import tk.eclipse.plugin.htmleditor.IHyperlinkProvider;
import tk.eclipse.plugin.htmleditor.editors.HTMLHyperlinkInfo;
public class InlineWodElementHyperlinkProvider implements IHyperlinkProvider {
public HTMLHyperlinkInfo getHyperlinkInfo(IFile file, FuzzyXMLDocument doc, FuzzyXMLElement element, String attrName, String attrValue, int offset) {
HTMLHyperlinkInfo hyperlinkInfo = null;
try {
if (WodHtmlUtils.isWOTag(element.getName()) && WodHtmlUtils.isInline(element.getName())) {
BuildProperties buildProperties = (BuildProperties)file.getProject().getAdapter(BuildProperties.class);
if (attrName == null) {
WodParserCache cache = WodParserCache.parser(file);
SimpleWodElement wodElement = new FuzzyXMLWodElement(element, buildProperties);
if (wodElement.isTypeWithin(new Region(offset, 0))) {
hyperlinkInfo = new HTMLHyperlinkInfo();
hyperlinkInfo.setOffset(wodElement.getElementTypePosition().getOffset());
hyperlinkInfo.setLength(wodElement.getElementTypePosition().getLength());
hyperlinkInfo.setObject(WodElementTypeHyperlink.toElementTypeHyperlink(wodElement, cache));
}
}
else {
WodParserCache cache;
cache = WodParserCache.parser(file);
SimpleWodElement wodElement = new FuzzyXMLWodElement(element, buildProperties);
IWodBinding wodBinding = wodElement.getBindingNamed(attrName);
if (wodBinding != null) {
Position valuePosition = wodBinding.getValuePosition();
if (valuePosition != null) {
hyperlinkInfo = new HTMLHyperlinkInfo();
hyperlinkInfo.setOffset(valuePosition.getOffset());
hyperlinkInfo.setLength(valuePosition.getLength());
hyperlinkInfo.setObject(WodBindingValueHyperlink.toBindingValueHyperlink(wodElement, attrName, cache));
}
}
}
}
}
catch (Exception e) {
e.printStackTrace();
}
return hyperlinkInfo;
}
}