Java 类com.intellij.psi.xml.XmlText 实例源码
项目:camel-idea-plugin
文件:XmlIdeaUtils.java
@Override
public Optional<String> extractTextFromElement(PsiElement element, boolean concatString, boolean stripWhitespace) {
// maybe its xml then try that
if (element instanceof XmlAttributeValue) {
return Optional.ofNullable(((XmlAttributeValue) element).getValue());
} else if (element instanceof XmlText) {
return Optional.ofNullable(((XmlText) element).getValue());
} else if (element instanceof XmlToken) {
// it may be a token which is a part of an combined attribute
if (concatString) {
XmlAttributeValue xml = PsiTreeUtil.getParentOfType(element, XmlAttributeValue.class);
if (xml != null) {
return Optional.ofNullable(getInnerText(xml.getValue()));
}
} else {
String returnText = element.getText();
final PsiElement prevSibling = element.getPrevSibling();
if (prevSibling != null && prevSibling.getText().equalsIgnoreCase("&")) {
returnText = prevSibling.getText() + returnText;
}
return Optional.ofNullable(getInnerText(returnText));
}
}
return Optional.empty();
}
项目:intellij-ce-playground
文件:DomElementProblemDescriptorImpl.java
@Nullable
private PsiElement getPsiElement() {
if (myDomElement instanceof DomFileElement) {
return ((DomFileElement)myDomElement).getFile();
}
if (myDomElement instanceof GenericAttributeValue) {
final GenericAttributeValue attributeValue = (GenericAttributeValue)myDomElement;
final XmlAttributeValue value = attributeValue.getXmlAttributeValue();
return value != null && StringUtil.isNotEmpty(value.getText()) ? value : attributeValue.getXmlElement();
}
final XmlTag tag = myDomElement.getXmlTag();
if (myDomElement instanceof GenericValue && tag != null) {
final XmlText[] textElements = tag.getValue().getTextElements();
if (textElements.length > 0) {
return textElements[0];
}
}
return tag;
}
项目:intellij-ce-playground
文件:XmlTagManipulator.java
@Override
@NotNull
public TextRange getRangeInElement(@NotNull final XmlTag tag) {
if (tag.getSubTags().length > 0) {
// Text range in tag with subtags is not supported, return empty range, consider making this function nullable.
return TextRange.EMPTY_RANGE;
}
final XmlTagValue value = tag.getValue();
final XmlText[] texts = value.getTextElements();
switch (texts.length) {
case 0:
return value.getTextRange().shiftRight(-tag.getTextOffset());
case 1:
return getValueRange(texts[0]);
default:
return TextRange.EMPTY_RANGE;
}
}
项目:intellij-ce-playground
文件:XmlTextTest.java
public void testInsertAtOffset() throws Exception {
new WriteCommandAction(getProject()) {
@Override
protected void run(@NotNull final Result result) throws Throwable {
String xml = "<root>0123456789</root>";
XmlFile file = (XmlFile)PsiFileFactory.getInstance(getProject())
.createFileFromText("foo.xml", StdFileTypes.XML, xml, (long)1, true, false);
//System.out.println(DebugUtil.psiToString(file, false));
XmlTag root = file.getDocument().getRootTag();
final XmlText text1 = root.getValue().getTextElements()[0];
assertFalse(CodeEditUtil.isNodeGenerated(root.getNode()));
final XmlText text = text1;
final XmlElement element = text.insertAtOffset(XmlElementFactory.getInstance(getProject()).createTagFromText("<bar/>"), 5);
assertNotNull(element);
assertTrue(element instanceof XmlText);
assertEquals("01234", element.getText());
assertEquals("<root>01234<bar/>56789</root>", text.getContainingFile().getText());
}
}.execute();
}
项目:intellij-ce-playground
文件:HtmlTextCompletionConfidence.java
@NotNull
@Override
public ThreeState shouldSkipAutopopup(@NotNull PsiElement contextElement, @NotNull PsiFile psiFile, int offset) {
ASTNode node = contextElement.getNode();
if (node != null && node.getElementType() == XmlTokenType.XML_DATA_CHARACTERS) {
PsiElement parent = contextElement.getParent();
if (parent instanceof XmlText || parent instanceof XmlDocument) {
String contextElementText = contextElement.getText();
int endOffset = offset - contextElement.getTextRange().getStartOffset();
String prefix = contextElementText.substring(0, Math.min(contextElementText.length(), endOffset));
if (!StringUtil.startsWithChar(prefix, '<') && !StringUtil.startsWithChar(prefix, '&')) {
return ThreeState.YES;
}
}
}
return ThreeState.UNSURE;
}
项目:intellij-ce-playground
文件:XmlTargetElementEvaluator.java
@Nullable
@Override
public PsiElement adjustElement(Editor editor, int flags, @Nullable PsiElement element, @Nullable PsiElement contextElement) {
if (element != null) return element;
if (contextElement == null) return null;
final PsiElement parent = contextElement.getParent();
if (parent instanceof XmlText || parent instanceof XmlAttributeValue) {
final PsiElement gParent = parent.getParent();
if (gParent == null) return null;
return TargetElementUtil.getInstance().findTargetElement(editor, flags, gParent.getTextRange().getStartOffset() + 1);
}
else if (parent instanceof XmlTag || parent instanceof XmlAttribute) {
return TargetElementUtil.getInstance().findTargetElement(editor, flags, parent.getTextRange().getStartOffset() + 1);
}
return null;
}
项目:intellij-ce-playground
文件:HtmlTextContextType.java
public static boolean isInContext(@NotNull PsiElement element) {
if (PsiTreeUtil.getParentOfType(element, XmlComment.class) != null) {
return false;
}
if (PsiTreeUtil.getParentOfType(element, XmlText.class) != null) {
return true;
}
if (element.getNode().getElementType() == XmlTokenType.XML_START_TAG_START) {
return true;
}
PsiElement parent = element.getParent();
if (parent instanceof PsiErrorElement) {
parent = parent.getParent();
}
return parent instanceof XmlDocument;
}
项目:intellij-ce-playground
文件:EmmetEditPointUtil.java
private static boolean checkAndMove(Editor editor, Document doc, int offset, PsiElement current) {
if (current == null) return false;
if (current.getParent() instanceof XmlText) {
final int line = doc.getLineNumber(offset);
final int lineStart = doc.getLineStartOffset(line);
final int lineEnd = doc.getLineEndOffset(line);
final CharSequence text = doc.getCharsSequence().subSequence(lineStart, lineEnd);
if (StringUtil.isEmptyOrSpaces(text) && moveCaret(editor, current, lineEnd)) {
return true;
}
} else if (isEmptyEditPoint(current) && moveCaret(editor, current, current.getTextRange().getStartOffset())) {
return true;
}
return false;
}
项目:intellij-ce-playground
文件:HtmlScriptLanguageInjector.java
@Override
public void getLanguagesToInject(@NotNull MultiHostRegistrar registrar, @NotNull PsiElement host) {
if (!host.isValid() || !(host instanceof XmlText) || !HtmlUtil.isHtmlTagContainingFile(host)) {
return;
}
XmlTag scriptTag = ((XmlText)host).getParentTag();
if (scriptTag == null) {
return;
}
final Language language = getScriptLanguageToInject(scriptTag);
if (language == null || HtmlScriptInjectionBlockerExtension.isInjectionBlocked(scriptTag, language)) {
return;
}
if (LanguageUtil.isInjectableLanguage(language)) {
registrar
.startInjecting(language)
.addPlace(null, null, (PsiLanguageInjectionHost)host, TextRange.create(0, host.getTextLength()))
.doneInjecting();
}
}
项目:intellij-ce-playground
文件:AndroidBaseXmlRefactoringAction.java
@Override
protected boolean isAvailableOnElementInEditorAndFile(@NotNull PsiElement element, @NotNull Editor editor, @NotNull PsiFile file, @NotNull DataContext context) {
final XmlTag[] tags = getXmlTagsFromExternalContext(context);
if (tags.length > 0) {
return AndroidFacet.getInstance(tags[0]) != null && isEnabledForTags(tags);
}
final TextRange range = getNonEmptySelectionRange(editor);
if (range != null) {
final Pair<PsiElement, PsiElement> psiRange = getExtractableRange(
file, range.getStartOffset(), range.getEndOffset());
return psiRange != null && isEnabledForPsiRange(psiRange.getFirst(), psiRange.getSecond());
}
if (element == null ||
AndroidFacet.getInstance(element) == null ||
PsiTreeUtil.getParentOfType(element, XmlText.class) != null) {
return false;
}
final XmlTag tag = PsiTreeUtil.getParentOfType(element, XmlTag.class);
return tag != null && isEnabledForTags(new XmlTag[]{tag});
}
项目:intellij-ce-playground
文件:PsiResourceItem.java
/**
* Returns the text content of a given tag
*/
public static String getTextContent(@NonNull XmlTag tag) {
// We can't just use tag.getValue().getTrimmedText() here because we need to remove
// intermediate elements such as <xliff> text:
// TODO: Make sure I correct handle HTML content for XML items in <string> nodes!
// For example, for the following string we want to compute "Share with %s":
// <string name="share">Share with <xliff:g id="application_name" example="Bluetooth">%s</xliff:g></string>
XmlTag[] subTags = tag.getSubTags();
XmlText[] textElements = tag.getValue().getTextElements();
if (subTags.length == 0) {
if (textElements.length == 1) {
return getXmlTextValue(textElements[0]);
} else if (textElements.length == 0) {
return "";
}
}
StringBuilder sb = new StringBuilder(40);
appendText(sb, tag);
return sb.toString();
}
项目:intellij-ce-playground
文件:MavenPluginConfigurationLanguageInjector.java
@Override
public void getLanguagesToInject(@NotNull final PsiLanguageInjectionHost host, @NotNull final InjectedLanguagePlaces injectionPlacesRegistrar) {
if (!(host instanceof XmlText)) return;
final XmlText xmlText = (XmlText)host;
if (!MavenPluginParamInfo.isSimpleText(xmlText)) return;
MavenPluginParamInfo.ParamInfoList infoList = MavenPluginParamInfo.getParamInfoList(xmlText);
for (MavenPluginParamInfo.ParamInfo info : infoList) {
Language language = info.getLanguage();
if (language == null) {
MavenParamLanguageProvider provider = info.getLanguageProvider();
if (provider != null) {
language = provider.getLanguage(xmlText, infoList.getDomCfg());
}
}
if (language != null) {
injectionPlacesRegistrar.addPlace(language, TextRange.from(0, host.getTextLength()), info.getLanguageInjectionPrefix(), info.getLanguageInjectionSuffix());
return;
}
}
}
项目:intellij-ce-playground
文件:MavenPluginParamReferenceContributor.java
@NotNull
@Override
public PsiReference[] getReferencesByElement(@NotNull final PsiElement element, @NotNull final ProcessingContext context) {
final XmlText xmlText = (XmlText)element.getParent();
if (!MavenPluginParamInfo.isSimpleText(xmlText)) return PsiReference.EMPTY_ARRAY;
MavenPluginParamInfo.ParamInfoList paramInfos = MavenPluginParamInfo.getParamInfoList(xmlText);
for (ParamInfo info : paramInfos) {
MavenParamReferenceProvider providerInstance = info.getProviderInstance();
if (providerInstance != null) {
return providerInstance.getReferencesByElement(xmlText, paramInfos.getDomCfg(), context);
}
}
return PsiReference.EMPTY_ARRAY;
}
项目:intellij-ce-playground
文件:MavenGroovyLanguageProvider.java
@Nullable
@Override
public Language getLanguage(@NotNull XmlText xmlText, @NotNull MavenDomConfiguration configuration) {
// Parameter 'source' of gmaven-plugin can be a peace of groovy code or file path or URL.
String text = xmlText.getText();
if (text.indexOf('\n') >= 0) { // URL or file path can not be multiline so it's a groovy code
return GroovyLanguage.INSTANCE;
}
if (text.indexOf('(') >= 0) { // URL or file path hardly contains '(', but code usually contain '('
return GroovyLanguage.INSTANCE;
}
return null;
}
项目:idea-php-shopware-plugin
文件:XmlGoToHandler.java
@NotNull
private Collection<PsiElement> getControllerActionElements(@NotNull XmlText xmlText) {
PsiElement xmlTag = xmlText.getParent();
if(!(xmlTag instanceof XmlTag)) {
return Collections.emptyList();
}
String controllerName = ShopwareXmlCompletion.getControllerOnScope((XmlTag) xmlTag);
if (controllerName == null) {
return Collections.emptyList();
}
String value = xmlText.getValue();
Collection<PsiElement> targets = new HashSet<>();
ShopwareUtil.collectControllerAction(xmlText.getProject(), controllerName, (method, methodStripped, moduleName, controllerName1) -> {
if(value.equalsIgnoreCase(methodStripped)) {
targets.add(method);
}
}, "Backend");
return targets;
}
项目:tools-idea
文件:TargetElementUtil.java
@Nullable
@Override
public PsiElement adjustElement(final Editor editor, final int flags, final PsiElement element, final PsiElement contextElement) {
if (element != null) {
if (element instanceof PsiAnonymousClass) {
return ((PsiAnonymousClass)element).getBaseClassType().resolve();
}
return element;
}
if (contextElement == null) return null;
final PsiElement parent = contextElement.getParent();
if (parent instanceof XmlText || parent instanceof XmlAttributeValue) {
return TargetElementUtilBase.getInstance().findTargetElement(editor, flags, parent.getParent().getTextRange().getStartOffset() + 1);
}
else if (parent instanceof XmlTag || parent instanceof XmlAttribute) {
return TargetElementUtilBase.getInstance().findTargetElement(editor, flags, parent.getTextRange().getStartOffset() + 1);
}
return null;
}
项目:tools-idea
文件:DomElementProblemDescriptorImpl.java
@Nullable
private PsiElement getPsiElement() {
if (myDomElement instanceof DomFileElement) {
return ((DomFileElement)myDomElement).getFile();
}
if (myDomElement instanceof GenericAttributeValue) {
final GenericAttributeValue attributeValue = (GenericAttributeValue)myDomElement;
final XmlAttributeValue value = attributeValue.getXmlAttributeValue();
return value != null && StringUtil.isNotEmpty(value.getText()) ? value : attributeValue.getXmlElement();
}
final XmlTag tag = myDomElement.getXmlTag();
if (myDomElement instanceof GenericValue && tag != null) {
final XmlText[] textElements = tag.getValue().getTextElements();
if (textElements.length > 0) {
return textElements[0];
}
}
return tag;
}
项目:tools-idea
文件:XmlTextTest.java
public void testInsertAtOffset() throws Exception {
new WriteCommandAction(getProject()) {
@Override
protected void run(final Result result) throws Throwable {
String xml = "<root>0123456789</root>";
XmlFile file = (XmlFile)PsiFileFactory.getInstance(getProject())
.createFileFromText("foo.xml", StdFileTypes.XML, xml, (long)1, true, false);
//System.out.println(DebugUtil.psiToString(file, false));
XmlTag root = file.getDocument().getRootTag();
final XmlText text1 = root.getValue().getTextElements()[0];
assertFalse(CodeEditUtil.isNodeGenerated(root.getNode()));
final XmlText text = text1;
final XmlElement element = text.insertAtOffset(XmlElementFactory.getInstance(getProject()).createTagFromText("<bar/>"), 5);
assertNotNull(element);
assertTrue(element instanceof XmlText);
assertEquals("01234", element.getText());
assertEquals("<root>01234<bar/>56789</root>", text.getContainingFile().getText());
}
}.execute();
}
项目:tools-idea
文件:HtmlTextContextType.java
public static boolean isInContext(@NotNull PsiElement element) {
if (PsiTreeUtil.getParentOfType(element, XmlComment.class) != null) {
return false;
}
if (PsiTreeUtil.getParentOfType(element, XmlText.class) != null) {
return true;
}
if (element.getNode().getElementType() == XmlTokenType.XML_START_TAG_START) {
return true;
}
PsiElement parent = element.getParent();
if (parent instanceof PsiErrorElement) {
parent = parent.getParent();
}
return parent instanceof XmlDocument;
}
项目:tools-idea
文件:XmlTextManipulator.java
public XmlText handleContentChange(XmlText text, TextRange range, String newContent) throws IncorrectOperationException {
final String newValue;
final String value = text.getValue();
if (range.equals(getRangeInElement(text))) {
newValue = newContent;
}
else {
final StringBuilder replacement = new StringBuilder(value);
replacement.replace(
range.getStartOffset(),
range.getEndOffset(),
newContent
);
newValue = replacement.toString();
}
if (Comparing.equal(value, newValue)) return text;
if (newValue.length() > 0) {
text.setValue(newValue);
}
else {
text.deleteChildRange(text.getFirstChild(), text.getLastChild());
}
return text;
}
项目:tools-idea
文件:XmlTagManipulator.java
public TextRange getRangeInElement(final XmlTag tag) {
if (tag.getSubTags().length > 0) {
// Text range in tag with subtags is not supported, return empty range, consider making this function nullable.
return TextRange.EMPTY_RANGE;
}
final XmlTagValue value = tag.getValue();
final XmlText[] texts = value.getTextElements();
switch (texts.length) {
case 0:
return value.getTextRange().shiftRight(-tag.getTextOffset());
case 1:
return getValueRange(texts[0]);
default:
return TextRange.EMPTY_RANGE;
}
}
项目:tools-idea
文件:MavenPluginConfigurationLanguageInjector.java
@Override
public void getLanguagesToInject(@NotNull final PsiLanguageInjectionHost host, @NotNull final InjectedLanguagePlaces injectionPlacesRegistrar) {
if (!(host instanceof XmlText)) return;
final XmlText xmlText = (XmlText)host;
if (!MavenPluginParamInfo.isSimpleText(xmlText)) return;
MavenPluginParamInfo.ParamInfoList infoList = MavenPluginParamInfo.getParamInfoList(xmlText);
for (MavenPluginParamInfo.ParamInfo info : infoList) {
Language language = info.getLanguage();
if (language == null) {
MavenParamLanguageProvider provider = info.getLanguageProvider();
if (provider != null) {
language = provider.getLanguage(xmlText, infoList.getDomCfg());
}
}
if (language != null) {
injectionPlacesRegistrar.addPlace(language, TextRange.from(0, host.getTextLength()), info.getLanguageInjectionPrefix(), info.getLanguageInjectionSuffix());
return;
}
}
}
项目:tools-idea
文件:MavenPluginParamReferenceContributor.java
@NotNull
@Override
public PsiReference[] getReferencesByElement(@NotNull final PsiElement element, @NotNull final ProcessingContext context) {
final XmlText xmlText = (XmlText)element.getParent();
if (!MavenPluginParamInfo.isSimpleText(xmlText)) return PsiReference.EMPTY_ARRAY;
MavenPluginParamInfo.ParamInfoList paramInfos = MavenPluginParamInfo.getParamInfoList(xmlText);
for (ParamInfo info : paramInfos) {
MavenParamReferenceProvider providerInstance = info.getProviderInstance();
if (providerInstance != null) {
return providerInstance.getReferencesByElement(xmlText, paramInfos.getDomCfg(), context);
}
}
return PsiReference.EMPTY_ARRAY;
}
项目:tools-idea
文件:MavenGroovyLanguageProvider.java
@Nullable
@Override
public Language getLanguage(@NotNull XmlText xmlText, @NotNull MavenDomConfiguration configuration) {
// Parameter 'source' of gmaven-plugin can be a peace of groovy code or file path or URL.
String text = xmlText.getText();
if (text.indexOf('\n') >= 0) { // URL or file path can not be multiline so it's a groovy code
return GroovyFileType.GROOVY_LANGUAGE;
}
if (text.indexOf('(') >= 0) { // URL or file path hardly contains '(', but code usually contain '('
return GroovyFileType.GROOVY_LANGUAGE;
}
return null;
}
项目:ibatis-plugin
文件:SymbolInSQLInspection.java
/**
* get all text in xml tag including sub tags
*
* @param xmlTag xml tag
* @return xml text
*/
@SuppressWarnings({"ConstantConditions"})
public static String getAllTextInTag(XmlTag xmlTag) {
StringBuilder sql = new StringBuilder();
PsiElement[] children = xmlTag.getChildren();
for (PsiElement child : children) {
if (child instanceof XmlTag) {
XmlTag tag = (XmlTag) child;
if (tag.getName().equals("include")) { // include element
XmlAttribute refid = tag.getAttribute("refid");
if (refid != null && StringUtil.isNotEmpty(refid.getText())) {
PsiElement psiElement = refid.getValueElement().getReference().resolve();
if (psiElement instanceof XmlTag) {
XmlTag target = (XmlTag) psiElement;
sql.append(" ").append(target.getText());
}
}
} else {
sql.append(getAllTextInTag(tag));
}
} else if (child instanceof XmlText) {
sql.append(" ").append(((XmlText) child).getValue());
}
}
return sql.toString();
}
项目:ibatis-plugin
文件:IbatisUtil.java
/**
* get the SQL code in xml tag
*
* @param xmlTag xml tag
* @return SQL in xml tag
*/
@SuppressWarnings({"ConstantConditions"})
@NotNull
public static String getSQLForXmlTag(XmlTag xmlTag) {
StringBuilder sql = new StringBuilder();
PsiElement[] children = xmlTag.getChildren();
for (PsiElement child : children) {
if (child instanceof XmlTag) {
XmlTag tag = (XmlTag) child;
if (tag.getName().equals("include")) {
XmlAttribute refid = tag.getAttribute("refid");
if (refid != null && StringUtil.isNotEmpty(refid.getText())) {
PsiElement psiElement = refid.getValueElement().getReference().resolve();
if (psiElement != null && psiElement instanceof XmlTag) {
Sql sqlDom = (Sql) DomManager.getDomManager(psiElement.getProject()).getDomElement((XmlTag) psiElement);
if (sqlDom != null)
sql.append(" ").append(sqlDom.getSQL());
}
}
}
} else if (child instanceof XmlText) {
sql.append(" ").append(((XmlText) child).getValue());
}
}
return sql.toString();
}
项目:idea-php-symfony2-plugin
文件:RouteXmlReferenceContributor.java
@NotNull
@Override
public ResolveResult[] multiResolve(boolean b) {
PsiElement element = getElement();
PsiElement parent = element.getParent();
String text = null;
if(parent instanceof XmlText) {
// <route><default key="_controller">Fo<caret>o\Bar</default></route>
text = parent.getText();
} else if(parent instanceof XmlAttribute) {
// <route controller=""/>
text = ((XmlAttribute) parent).getValue();
}
if(text == null || StringUtils.isBlank(text)) {
return new ResolveResult[0];
}
return PsiElementResolveResult.createResults(
RouteHelper.getMethodsOnControllerShortcut(getElement().getProject(), text)
);
}
项目:consulo-xml
文件:XmlTagValueImpl.java
@Override
@NotNull
public XmlText[] getTextElements()
{
XmlText[] textElements = myTextElements;
if(textElements != null)
{
return textElements;
}
final List<XmlText> textElementsList = new ArrayList<XmlText>();
for(final XmlTagChild element : myElements)
{
if(element instanceof XmlText)
{
textElementsList.add((XmlText) element);
}
}
return myTextElements = textElementsList.isEmpty() ? XmlText.EMPTY_ARRAY : ContainerUtil.toArray(textElementsList, new XmlText[textElementsList.size()]);
}
项目:consulo-xml
文件:XmlTagValueImpl.java
@Override
@NotNull
public String getTrimmedText()
{
String trimmedText = myTrimmedText;
if(trimmedText != null)
{
return trimmedText;
}
final StringBuilder consolidatedText = new StringBuilder();
final XmlText[] textElements = getTextElements();
for(final XmlText textElement : textElements)
{
consolidatedText.append(textElement.getValue());
}
return myTrimmedText = consolidatedText.toString().trim();
}
项目:consulo-xml
文件:XmlTagValueImpl.java
@Override
public boolean hasCDATA()
{
for(XmlText xmlText : myTextElements)
{
PsiElement[] children = xmlText.getChildren();
for(PsiElement child : children)
{
if(child.getNode().getElementType() == XmlElementType.XML_CDATA)
{
return true;
}
}
}
return false;
}
项目:consulo-xml
文件:HtmlTextCompletionConfidence.java
public static boolean shouldSkipAutopopupInHtml(@NotNull PsiElement contextElement, int offset)
{
ASTNode node = contextElement.getNode();
if(node != null && node.getElementType() == XmlTokenType.XML_DATA_CHARACTERS)
{
PsiElement parent = contextElement.getParent();
if(parent instanceof XmlText || parent instanceof XmlDocument)
{
String contextElementText = contextElement.getText();
int endOffset = offset - contextElement.getTextRange().getStartOffset();
String prefix = contextElementText.substring(0, Math.min(contextElementText.length(), endOffset));
return !StringUtil.startsWithChar(prefix, '<') && !StringUtil.startsWithChar(prefix, '&');
}
}
return false;
}
项目:consulo-xml
文件:XmlCharFilter.java
public static boolean isWithinTag(Lookup lookup)
{
if(isInXmlContext(lookup))
{
PsiElement psiElement = lookup.getPsiElement();
final PsiElement parentElement = psiElement != null ? psiElement.getParent() : null;
if(parentElement instanceof XmlTag)
{
return true;
}
if(parentElement instanceof PsiErrorElement && parentElement.getParent() instanceof XmlDocument)
{
return true;
}
return (parentElement instanceof XmlDocument || parentElement instanceof XmlText) && (psiElement.textMatches("<") || psiElement.textMatches("\""));
}
return false;
}
项目:consulo-xml
文件:HtmlTextContextType.java
public static boolean isInContext(@NotNull PsiElement element) {
if (PsiTreeUtil.getParentOfType(element, XmlComment.class) != null) {
return false;
}
if (PsiTreeUtil.getParentOfType(element, XmlText.class) != null) {
return true;
}
if (element.getNode().getElementType() == XmlTokenType.XML_START_TAG_START) {
return true;
}
PsiElement parent = element.getParent();
if (parent instanceof PsiErrorElement) {
parent = parent.getParent();
}
return parent instanceof XmlDocument;
}
项目:consulo-xml
文件:XmlTextManipulator.java
public XmlText handleContentChange(XmlText text, TextRange range, String newContent) throws IncorrectOperationException {
final String newValue;
final String value = text.getValue();
if (range.equals(getRangeInElement(text))) {
newValue = newContent;
}
else {
final StringBuilder replacement = new StringBuilder(value);
replacement.replace(
range.getStartOffset(),
range.getEndOffset(),
newContent
);
newValue = replacement.toString();
}
if (Comparing.equal(value, newValue)) return text;
if (newValue.length() > 0) {
text.setValue(newValue);
}
else {
text.deleteChildRange(text.getFirstChild(), text.getLastChild());
}
return text;
}
项目:consulo-xml
文件:XmlTagManipulator.java
@Override
@NotNull
public TextRange getRangeInElement(@NotNull final XmlTag tag)
{
if(tag.getSubTags().length > 0)
{
// Text range in tag with subtags is not supported, return empty range, consider making this function nullable.
return TextRange.EMPTY_RANGE;
}
final XmlTagValue value = tag.getValue();
final XmlText[] texts = value.getTextElements();
switch(texts.length)
{
case 0:
return value.getTextRange().shiftRight(-tag.getTextOffset());
case 1:
return getValueRange(texts[0]);
default:
return TextRange.EMPTY_RANGE;
}
}
项目:consulo-xml
文件:XmlTagManipulator.java
public static TextRange[] getValueRanges(@NotNull final XmlTag tag)
{
final XmlTagValue value = tag.getValue();
final XmlText[] texts = value.getTextElements();
if(texts.length == 0)
{
return new TextRange[]{value.getTextRange().shiftRight(-tag.getTextOffset())};
}
else
{
final TextRange[] ranges = new TextRange[texts.length];
for(int i = 0; i < texts.length; i++)
{
ranges[i] = getValueRange(texts[i]);
}
return ranges;
}
}
项目:consulo-xml
文件:HtmlScriptLanguageInjector.java
@Override
public void injectLanguages(@NotNull MultiHostRegistrar registrar, @NotNull PsiElement host) {
if (!(host instanceof XmlText)) {
return;
}
XmlTag scriptTag = ((XmlText)host).getParentTag();
if (!"script".equalsIgnoreCase(scriptTag.getLocalName())) {
return;
}
String mimeType = scriptTag.getAttributeValue("type");
Collection<Language> languages = Language.findInstancesByMimeType(mimeType);
Language language = languages.isEmpty() ? null : languages.iterator().next();
if (language != null && LanguageUtil.isInjectableLanguage(language)) {
registrar
.startInjecting(language)
.addPlace(null, null, (PsiLanguageInjectionHost)host, TextRange.create(0, host.getTextLength()))
.doneInjecting();
}
}
项目:mule-intellij-plugins
文件:MuleConfigLiveTemplateContextType.java
public boolean isInContext(@NotNull final PsiFile file, final int offset)
{
if (!MuleConfigUtils.isMuleFile(file))
{
return false;
}
PsiElement element = file.findElementAt(offset);
return element != null && PsiTreeUtil.getParentOfType(element, XmlText.class) != null;
}
项目:mule-intellij-plugins
文件:MuleLanguageInjector.java
@Override
public void getLanguagesToInject(@NotNull PsiLanguageInjectionHost host,
@NotNull InjectedLanguagePlaces injectedLanguagePlaces) {
if (MuleConfigUtils.isMuleFile(host.getContainingFile())) {
if (host instanceof XmlAttributeValue) {
// Try to inject a language, somewhat abusing the lazy evaluation of predicates :(
for (Pair<String, String> language : languages) {
if (tryInjectLanguage(language.getFirst(), language.getSecond(), host, injectedLanguagePlaces)) {
break;
}
}
} else if (host instanceof XmlText) {
final XmlTag tag = ((XmlText) host).getParentTag();
if (tag != null) {
final QName tagName = MuleConfigUtils.getQName(tag);
if (tagName.equals(globalFunctions) || tagName.equals(expressionComponent) || tagName.equals(expressionTransformer)) {
final String scriptingName = MelLanguage.MEL_LANGUAGE_ID;
injectLanguage(host, injectedLanguagePlaces, scriptingName);
} else if (tagName.equals(scriptingScript)) {
final String engine = tag.getAttributeValue("engine");
if (engine != null) {
injectLanguage(host, injectedLanguagePlaces, StringUtil.capitalize(engine));
}
} else if (tagName.equals(dwSetPayload) || tagName.equals(dwSetProperty) || tagName.equals(dwSetVariable) || tagName.equals(dwSetSessionVar)) {
injectLanguage(host, injectedLanguagePlaces, WEAVE_LANGUAGE_ID);
}
}
}
}
}
项目:weex-language-support
文件:TagTextIntention.java
private boolean available(PsiElement element) {
PsiElement context = element.getContext();
return context instanceof JSBlockStatement
|| context instanceof CssDeclaration
|| context instanceof XmlAttributeValue
|| context instanceof XmlText;
}