LINUX.ORG.RU

Обработка перевода строки после тега quote

 


0

2

Приветствую.

[quote]foo
bar
[/quote]

Рендерится в

foo
bar


а

[quote]
foo
bar
[/quote]

рендерится в

foo
bar



Меня одного раздражает пустая строка вначале второго примера? Мне это кажется ошибкой в коде. Не при помню, чтобы я встречал где-то еще такое поведение. Плюс, тег code себя ведет более предсказуемо. Может быть нам починить это?

Я погрепал и, кажется, это можно починить как-то так

diff --git a/src/main/java/ru/org/linux/util/bbcode/tags/QuoteTag.java b/src/main/java/ru/org/linux/util/bbcode/tags/QuoteTag.java
index 036710806..5950c361b 100644
--- a/src/main/java/ru/org/linux/util/bbcode/tags/QuoteTag.java
+++ b/src/main/java/ru/org/linux/util/bbcode/tags/QuoteTag.java
@@ -125,9 +125,9 @@ public class QuoteTag extends Tag {
       }
       ret.append("<p><cite>");
       if (formatter != null) {
-        ret.append(formatter.simpleFormat(node.getParameter().replaceAll("\"", "")));
+        ret.append(formatter.simpleFormat(node.getParameter().replaceFirst("^\n", "").replaceAll("\"", "")));
       } else {
-        ret.append(Parser.escape(node.getParameter().replaceAll("\"", "")));
+        ret.append(Parser.escape(node.getParameter().replaceFirst("^\n", "").replaceAll("\"", "")));
       }
       ret.append("</cite></p>");
       ret.append(node.renderChildrenXHtml());

★★★★★

Меня одного раздражает

нет

Kolins ★★★★★
()
Ответ на: комментарий от maxcom

Хорошо. Я не тестировал, чисто так в коде порылся. Я попробую сейчас это локально завести и отладить.

urxvt ★★★★★
() автор топика
Ответ на: комментарий от maxcom

Да, то решение не работает. Я поднял lorsource и нашел рабочий вариант. Потестировал и для lorcode, и для user line break — вроде все работает, ничего не сломалось.

Есть нюанс, что оно съедает \n сразу после [quote] в режиме lorcode, но, я так понимаю, это не проблема и на отображение никак не влияет. В БД сохраняется оригинальный текст.

$ git diff
diff --git a/src/main/java/ru/org/linux/util/formatter/ToLorCodeTexFormatter.java b/src/main/java/ru/org/linux/util/formatter/ToLorCodeTexFormatter.java
index f3b82b40e..60a530e93 100644
--- a/src/main/java/ru/org/linux/util/formatter/ToLorCodeTexFormatter.java
+++ b/src/main/java/ru/org/linux/util/formatter/ToLorCodeTexFormatter.java
@@ -98,7 +98,9 @@ public class ToLorCodeTexFormatter {
           if (isCode) {
             buf.append('\n');
           } else {
-            buf.append(newLine);
+            if (!line.endsWith("[quote]")) {
+              buf.append(newLine);
+            }
           }
         }
       }
diff --git a/src/test/java/ru/org/linux/util/formatter/ToLorCodeFormatterTest.java b/src/test/java/ru/org/linux/util/formatter/ToLorCodeFormatterTest.java
index 86d2a02b9..d0b5fc148 100644
--- a/src/test/java/ru/org/linux/util/formatter/ToLorCodeFormatterTest.java
+++ b/src/test/java/ru/org/linux/util/formatter/ToLorCodeFormatterTest.java
@@ -150,4 +150,10 @@ public class ToLorCodeFormatterTest {
     assertEquals("[quote]one[br][quote]two[br][/quote]one[br][quote][quote]three[/quote][/quote][/quote]",
             prepareLorcode(">one\n>>two\n>one\n>>>three"));
   }
+
+  @Test
+  public void ignoreFirstQuoteNl() {
+    assertEquals("text[quote]one[br]two[br]three[br][/quote]text",
+            prepareUlb("text[quote]\none\ntwo\nthree\n[/quote]text"));
+  }
 }

urxvt ★★★★★
() автор топика
Ответ на: комментарий от maxcom

Применил патч.


Работает! Спасибо.

urxvt ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.