diff --git a/src/markdown/MdParser.cpp b/src/markdown/MdParser.cpp
index d9e281b..8645c27 100644
--- a/src/markdown/MdParser.cpp
+++ b/src/markdown/MdParser.cpp
@@ -459,6 +459,16 @@ QString vaultFileForCell(Database *db, const QString &cell)
return QString();
}
+// Путь для показа: вставляем zero-width space после '/' — движок rich text
+// умеет переносить только по пробелам, длинные пути иначе рвут пузырь.
+// На href/копирование не влияет (только отображаемый текст).
+QString breakablePath(const QString &cell)
+{
+ QString d = esc(cell);
+ d.replace(QLatin1Char('/'), QStringLiteral("/\u200b"));
+ return d;
+}
+
// ~sql-блок → результат в пузыре кодоблока (как в Telegram).
// Имена файлов — ссылки flora://open (новая вкладка), пути — flora://copycode
// (клик копирует путь). codeId — кнопка «скопировать запрос».
@@ -488,10 +498,13 @@ QString renderSqlBlock(Database *db, MdParser::Impl *impl, const QString &sql, c
const QVariantList rows = res.value("rows").toList();
const bool truncated = res.value("truncated").toBool();
const int colCount = cols.size();
- inner = QStringLiteral("
");
+ // th не используем: Qt рисует заголовкам свою чёрную плашку поверх стилей.
+ // width=100% тоже нельзя: такая таблица в Qt игнорирует padding'и
+ // родительских div'ов и вылезает за панель.
+ inner = QStringLiteral("");
inner += QStringLiteral("");
for (int c = 0; c < colCount; ++c) {
- inner += QStringLiteral("| %1 | ")
+ inner += QStringLiteral("%1 | ")
.arg(esc(cols[c]));
}
inner += QStringLiteral("
");
@@ -508,7 +521,7 @@ QString renderSqlBlock(Database *db, MdParser::Impl *impl, const QString &sql, c
inner += QStringLiteral("");
for (int c = 0; c < colCount; ++c) {
const QString cell = c < row.size() ? row[c].toString() : QString();
- const QString cs = QStringLiteral("padding:6px 10px;text-align:left;color:#ffffff;border-top:1px solid rgba(255,255,255,0.12);word-break:break-word");
+ const QString cs = QStringLiteral("padding:8px 12px;text-align:left;color:#ffffff;border-top:1px solid rgba(255,255,255,0.12)");
QString body;
if (cell == QLatin1String("NULL")) {
body = QStringLiteral("NULL");
@@ -521,9 +534,9 @@ QString renderSqlBlock(Database *db, MdParser::Impl *impl, const QString &sql, c
impl->codeBlocks.insert(pid, abs);
}
body = pid.isEmpty()
- ? esc(cell)
+ ? breakablePath(cell)
: QStringLiteral("%2")
- .arg(pid, esc(cell));
+ .arg(pid, breakablePath(cell));
} else if (c < cols.size()
&& cols[c].trimmed().compare(QLatin1String("title"), Qt::CaseInsensitive) == 0) {
// Имя: клик открывает файл в соседней вкладке
@@ -550,7 +563,7 @@ QString renderSqlBlock(Database *db, MdParser::Impl *impl, const QString &sql, c
QString out = QStringLiteral(
""
- ""
+ "
"
"
%2
"
"
%3
")
.arg(bubbleBg, copyLink, inner);
@@ -808,7 +821,7 @@ private:
return QStringLiteral(
""
- "