diff options
Diffstat (limited to 'xml/impl/src/com/intellij/codeInsight/editorActions/HtmlSelectioner.java')
-rw-r--r-- | xml/impl/src/com/intellij/codeInsight/editorActions/HtmlSelectioner.java | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/HtmlSelectioner.java b/xml/impl/src/com/intellij/codeInsight/editorActions/HtmlSelectioner.java index 8cc670ecc513..cae403a9d85a 100644 --- a/xml/impl/src/com/intellij/codeInsight/editorActions/HtmlSelectioner.java +++ b/xml/impl/src/com/intellij/codeInsight/editorActions/HtmlSelectioner.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -41,11 +41,21 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.xml.*; import com.intellij.util.containers.ContainerUtil; import com.intellij.xml.util.HtmlUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.LinkedList; import java.util.List; public class HtmlSelectioner extends AbstractWordSelectioner { + private static final SelectWordUtil.CharCondition JAVA_IDENTIFIER_AND_HYPHEN_CONDITION = new SelectWordUtil.CharCondition() { + @Override + public boolean value(char ch) { + return Character.isJavaIdentifierPart(ch) || ch == '-'; + } + }; + public boolean canSelect(PsiElement e) { return canSelectElement(e); } @@ -57,7 +67,7 @@ public class HtmlSelectioner extends AbstractWordSelectioner { return false; } - public List<TextRange> select(PsiElement e, CharSequence editorText, int cursorOffset, Editor editor) { + public List<TextRange> select(PsiElement e, @NotNull CharSequence editorText, int cursorOffset, @NotNull Editor editor) { List<TextRange> result; if (!(e instanceof XmlToken) || @@ -77,11 +87,11 @@ public class HtmlSelectioner extends AbstractWordSelectioner { PsiFile psiFile = e.getContainingFile(); FileType fileType = psiFile.getVirtualFile().getFileType(); - addAttributeSelection(result, e); + addAttributeSelection(result, editor, editorText, e); final FileViewProvider fileViewProvider = psiFile.getViewProvider(); for (Language lang : fileViewProvider.getLanguages()) { final PsiFile langFile = fileViewProvider.getPsi(lang); - if (langFile != psiFile) addAttributeSelection(result, fileViewProvider.findElementAt(cursorOffset, lang)); + if (langFile != psiFile) addAttributeSelection(result, editor, editorText, fileViewProvider.findElementAt(cursorOffset, lang)); } EditorHighlighter highlighter = HighlighterFactory.createHighlighter(e.getProject(), psiFile.getVirtualFile()); @@ -92,11 +102,8 @@ public class HtmlSelectioner extends AbstractWordSelectioner { return result; } - private static void addTagSelection(CharSequence editorText, - int cursorOffset, - FileType fileType, - EditorHighlighter highlighter, - List<TextRange> result) { + private static void addTagSelection(CharSequence editorText, int cursorOffset, FileType fileType, + @NotNull EditorHighlighter highlighter, @NotNull List<TextRange> result) { int start = cursorOffset; while (true) { @@ -136,7 +143,8 @@ public class HtmlSelectioner extends AbstractWordSelectioner { } } - private static void addAttributeSelection(List<TextRange> result, PsiElement e) { + private static void addAttributeSelection(@NotNull List<TextRange> result, @NotNull Editor editor, + @NotNull CharSequence editorText, @Nullable PsiElement e) { final XmlAttribute attribute = PsiTreeUtil.getParentOfType(e, XmlAttribute.class); if (attribute != null) { @@ -144,6 +152,9 @@ public class HtmlSelectioner extends AbstractWordSelectioner { final XmlAttributeValue value = attribute.getValueElement(); if (value != null) { + if ("class".equalsIgnoreCase(attribute.getName())) { + addClassAttributeRanges(result, editor, editorText, value); + } final TextRange range = value.getTextRange(); result.add(range); if (value.getFirstChild() != null && @@ -153,4 +164,17 @@ public class HtmlSelectioner extends AbstractWordSelectioner { } } } + + private static void addClassAttributeRanges(@NotNull List<TextRange> result, @NotNull Editor editor, + @NotNull CharSequence editorText, @NotNull XmlAttributeValue attributeValue) { + final TextRange attributeValueTextRange = attributeValue.getTextRange(); + final LinkedList<TextRange> wordRanges = ContainerUtil.newLinkedList(); + SelectWordUtil.addWordSelection(editor.getSettings().isCamelWords(), editorText, editor.getCaretModel().getOffset(), wordRanges, + JAVA_IDENTIFIER_AND_HYPHEN_CONDITION); + for (TextRange range : wordRanges) { + if (attributeValueTextRange.contains(range)) { + result.add(range); + } + } + } } |