use of com.intellij.lang.PairedBraceMatcher in project intellij-community by JetBrains.
the class BraceMatchingUtil method getBraceMatcher.
@NotNull
public static BraceMatcher getBraceMatcher(@NotNull FileType fileType, @NotNull Language lang) {
PairedBraceMatcher matcher = LanguageBraceMatching.INSTANCE.forLanguage(lang);
if (matcher != null) {
if (matcher instanceof XmlAwareBraceMatcher) {
return (XmlAwareBraceMatcher) matcher;
} else if (matcher instanceof PairedBraceMatcherAdapter) {
return (BraceMatcher) matcher;
} else {
return new PairedBraceMatcherAdapter(matcher, lang);
}
}
final BraceMatcher byFileType = getBraceMatcherByFileType(fileType);
if (byFileType != null)
return byFileType;
if (fileType instanceof LanguageFileType) {
final Language language = ((LanguageFileType) fileType).getLanguage();
if (lang != language) {
final FileType type1 = lang.getAssociatedFileType();
if (type1 != null) {
final BraceMatcher braceMatcher = getBraceMatcherByFileType(type1);
if (braceMatcher != null) {
return braceMatcher;
}
}
matcher = LanguageBraceMatching.INSTANCE.forLanguage(language);
if (matcher != null) {
return new PairedBraceMatcherAdapter(matcher, language);
}
}
}
return BraceMatcherHolder.ourDefaultBraceMatcher;
}
use of com.intellij.lang.PairedBraceMatcher in project intellij-community by JetBrains.
the class XmlBraceMatcher method isStructuralBrace.
@Override
public boolean isStructuralBrace(HighlighterIterator iterator, CharSequence text, FileType fileType) {
IElementType tokenType = iterator.getTokenType();
PairedBraceMatcher matcher = LanguageBraceMatching.INSTANCE.forLanguage(tokenType.getLanguage());
if (matcher != null) {
BracePair[] pairs = matcher.getPairs();
for (BracePair pair : pairs) {
if ((pair.getLeftBraceType() == tokenType || pair.getRightBraceType() == tokenType) && pair.isStructural())
return true;
}
}
if (fileType instanceof XmlLikeFileType) {
return isXmlStructuralBrace(iterator, text, fileType, tokenType);
}
return false;
}
use of com.intellij.lang.PairedBraceMatcher in project intellij-community by JetBrains.
the class XmlBraceMatcher method getBraceTokenGroupId.
@Override
public int getBraceTokenGroupId(IElementType tokenType) {
final Language l = tokenType.getLanguage();
PairedBraceMatcher matcher = LanguageBraceMatching.INSTANCE.forLanguage(l);
if (matcher != null) {
BracePair[] pairs = matcher.getPairs();
for (BracePair pair : pairs) {
if (pair.getLeftBraceType() == tokenType || pair.getRightBraceType() == tokenType) {
return l.hashCode();
}
}
}
if (tokenType instanceof IXmlLeafElementType) {
return tokenType == XmlTokenType.XML_ATTRIBUTE_VALUE_START_DELIMITER || tokenType == XmlTokenType.XML_ATTRIBUTE_VALUE_END_DELIMITER ? XML_VALUE_DELIMITER_GROUP : XML_TAG_TOKEN_GROUP;
} else {
return BraceMatchingUtil.UNDEFINED_TOKEN_GROUP;
}
}
use of com.intellij.lang.PairedBraceMatcher in project intellij-community by JetBrains.
the class XmlBraceMatcher method isPairBraces.
@Override
public boolean isPairBraces(IElementType tokenType1, IElementType tokenType2) {
PairedBraceMatcher matcher = LanguageBraceMatching.INSTANCE.forLanguage(tokenType1.getLanguage());
if (matcher != null) {
BracePair[] pairs = matcher.getPairs();
for (BracePair pair : pairs) {
if (pair.getLeftBraceType() == tokenType1)
return pair.getRightBraceType() == tokenType2;
if (pair.getRightBraceType() == tokenType1)
return pair.getLeftBraceType() == tokenType2;
}
}
if (tokenType2.equals(PAIRING_TOKENS.get(tokenType1)))
return true;
List<IElementType> keys = PAIRING_TOKENS.getKeysByValue(tokenType1);
return keys != null && keys.contains(tokenType2);
}
Aggregations