mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-14 18:05:27 +07:00
[html] WEB-73790 href urls look weird with soft wrapping enabled.
(cherry picked from commit 30481b92a98ebc199006f881d7a5f20cd140d1db) IJ-CR-167934 GitOrigin-RevId: 2583f80cac80a3f435e7b83aeedf638a0c2c29f4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b3f7c95937
commit
99ba241ed3
@@ -15,18 +15,44 @@
|
||||
*/
|
||||
package com.intellij.psi.formatter;
|
||||
|
||||
import com.intellij.openapi.editor.LineWrapPositionStrategy;
|
||||
import com.intellij.openapi.editor.PsiAwareDefaultLineWrapPositionStrategy;
|
||||
import com.intellij.openapi.editor.*;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.TokenType;
|
||||
import com.intellij.psi.xml.XmlElementType;
|
||||
import com.intellij.psi.xml.XmlTokenType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* {@link LineWrapPositionStrategy} for markup languages like XML, HTML etc.
|
||||
*/
|
||||
public class MarkupLineWrapPositionStrategy extends PsiAwareDefaultLineWrapPositionStrategy {
|
||||
|
||||
private final DefaultLineWrapPositionStrategy myDefaultStrategy = new DefaultLineWrapPositionStrategy();
|
||||
|
||||
public MarkupLineWrapPositionStrategy() {
|
||||
super(true, XmlElementType.XML_TEXT, XmlElementType.HTML_RAW_TEXT, XmlTokenType.XML_COMMENT_CHARACTERS, TokenType.WHITE_SPACE);
|
||||
|
||||
myDefaultStrategy.addRule(new GenericLineWrapPositionStrategy.Rule('<', GenericLineWrapPositionStrategy.WrapCondition.BEFORE));
|
||||
myDefaultStrategy.addRule(new GenericLineWrapPositionStrategy.Rule('/', GenericLineWrapPositionStrategy.WrapCondition.AFTER,
|
||||
GenericLineWrapPositionStrategy.Rule.DEFAULT_WEIGHT - 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int calculateWrapPosition(@NotNull Document document,
|
||||
@Nullable Project project,
|
||||
int startOffset,
|
||||
int endOffset,
|
||||
int maxPreferredOffset,
|
||||
boolean allowToBeyondMaxPreferredOffset,
|
||||
boolean isSoftWrap) {
|
||||
if (isSoftWrap) {
|
||||
return myDefaultStrategy.calculateWrapPosition(
|
||||
document, project, startOffset, endOffset, maxPreferredOffset, allowToBeyondMaxPreferredOffset, isSoftWrap);
|
||||
}
|
||||
else {
|
||||
return super.calculateWrapPosition(
|
||||
document, project, startOffset, endOffset, maxPreferredOffset, allowToBeyondMaxPreferredOffset, isSoftWrap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.psi.formatter
|
||||
|
||||
import com.intellij.openapi.editor.AbstractLineWrapPositionStrategyTest
|
||||
import com.intellij.openapi.editor.LineWrapPositionStrategy
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
class HtmlLineWrapPositionStrategyTest : AbstractLineWrapPositionStrategyTest() {
|
||||
|
||||
private lateinit var myStrategy: LineWrapPositionStrategy
|
||||
|
||||
@Before
|
||||
override fun prepare() {
|
||||
super.prepare()
|
||||
myStrategy = MarkupLineWrapPositionStrategy()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun doNotWrapWithinClosingTagStart1() {
|
||||
doTest(myStrategy,
|
||||
"<a href=\"https://e3bfa38b.sibforms.com/served/MUIFAHGA2fUufYYM4ynBfdgdfgdsfffffffffffffff5Bc\"><WRAP></a<EDGE>>")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun doNotWrapWithinClosingTagStart2() {
|
||||
doTest(myStrategy,
|
||||
"<a href=\"https://e3bfa38b.sibforms.com/served/MUIFAHGA2fUufYYM4ynBfdgdfgdsfffffffffffffff5Bc\"><WRAP></<EDGE>a>")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun doNotWrapWithinClosingTagStart3() {
|
||||
doTest(myStrategy,
|
||||
"<a href=\"https://e3bfa38b.sibforms.com/served/MUIFAHGA2fUufYYM4ynBfdgdfgdsfffffffffffffff5Bc\"><WRAP><<EDGE>/a>")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun doNotWrapWithinClosingTagStart4() {
|
||||
doTest(myStrategy,
|
||||
"<a href=\"https://e3bfa38b.sibforms.com/served/MUIFAHGA2fUufYYM4ynBfdgdfgdsfffffffffffffff5Bc\"><WRAP><EDGE></a>")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun wrapAfterSlash() {
|
||||
val document =
|
||||
"<a href=\"https://e3bfa38b.sibforms.com/served/<WRAP>MUIFAHGA2fUufYYM4ynBfdgdfgdsfffffffffffffff<EDGE>5Bc\"></a>"
|
||||
doTest(myStrategy, document)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user