WEB-6592 Schemeless (protocol-relative) URLs in HTML documents are not recognized

This commit is contained in:
Fedor Korotkov
2013-04-11 11:28:06 +04:00
parent 31375c4d81
commit 02b8f9c71a
3 changed files with 11 additions and 10 deletions
@@ -37,6 +37,7 @@ import com.intellij.psi.xml.XmlFile;
import com.intellij.psi.xml.XmlTag;
import com.intellij.util.PairFunction;
import com.intellij.util.text.StringTokenizer;
import com.intellij.xml.util.HtmlUtil;
import gnu.trove.THashMap;
import gnu.trove.THashSet;
import org.jetbrains.annotations.Nls;
@@ -56,9 +57,6 @@ public class MicrodataUtil {
public static final String ITEM_PROP = "itemprop";
public static final String ITEM_ID = "itemid";
@NonNls private static final String HTTP = "http://";
@NonNls private static final String HTTPS = "https://";
public static boolean hasScopeTag(@Nullable XmlTag tag) {
return findScopeTag(tag) != null;
}
@@ -130,7 +128,7 @@ public class MicrodataUtil {
@Nullable
@Override
public PsiReference fun(String token, Integer offset) {
if (isUrl(token)) {
if (HtmlUtil.hasHtmlPrefix(token)) {
final TextRange range = TextRange.from(offset, token.length());
final URLReference urlReference = new URLReference(element, range, true);
return new URIReferenceProvider.DependentNSReference(element, range, urlReference) {
@@ -167,10 +165,6 @@ public class MicrodataUtil {
return result.toArray(new PsiReference[result.size()]);
}
private static boolean isUrl(String url) {
return url.startsWith(HTTP) || url.startsWith(HTTPS);
}
@Nullable
public static String getStripedAttributeValue(@Nullable XmlTag tag, @Nls String attributeName) {
String value = tag != null ? tag.getAttributeValue(attributeName) : null;
@@ -34,6 +34,7 @@ import com.intellij.psi.xml.XmlAttribute;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ProcessingContext;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.xml.util.HtmlUtil;
import com.intellij.xml.util.XmlUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -62,7 +63,6 @@ public class URIReferenceProvider extends PsiReferenceProvider {
return true;
}
};
@NonNls private static final String HTTP = "http://";
@NonNls private static final String URN = "urn:";
@NonNls private static final String FILE = "file:";
@NonNls private static final String CLASSPATH = "classpath:/";
@@ -162,7 +162,7 @@ public class URIReferenceProvider extends PsiReferenceProvider {
}
static boolean isUrlText(final String s, Project project) {
final boolean surelyUrl = s.startsWith(HTTP) || s.startsWith(URN);
final boolean surelyUrl = HtmlUtil.hasHtmlPrefix(s) || s.startsWith(URN);
if (surelyUrl) return surelyUrl;
int protocolIndex = s.indexOf(":/");
if (protocolIndex > 1 && !s.regionMatches(0,"classpath",0,protocolIndex)) return true;
@@ -597,6 +597,13 @@ public class HtmlUtil {
return isHtmlFile(file) || file.getViewProvider() instanceof TemplateLanguageFileViewProvider;
}
public static boolean hasHtmlPrefix(@NotNull String url) {
return url.startsWith("http://") ||
url.startsWith("https://") ||
url.startsWith("//") || //Protocol-relative URL
url.startsWith("ftp://");
}
public static boolean isHtmlFile(PsiElement element) {
Language language = element.getLanguage();
return language == HTMLLanguage.INSTANCE || language == XHTMLLanguage.INSTANCE;