История: diff прямо в Просмотре версии + код не в одну строку

- Подсветка: highlight() отдаёт <br/> вместо сырых \n (RichText их схлопывал — код был одной строкой); plainToRich для fallback-путей
- MdParser.parseBlocksWithDiff(old,new): поблочный LCS-diff с fence-aware разбивкой, change same/del/add, изменённые блоки в цветном div (красный/зелёный как в diff), codeId для копирования сохранены
- MarkdownView.compareMarkdown: при задании рендерит версию с подсветкой отличий
- История: Просмотр версии сравнивается со свежим содержимым с диска (workdirContent), легенда на обеих вкладках
- Тесты: <br/>, порядок del/add, тинты, identical без подсветки
This commit is contained in:
2026-09-06 19:26:53 +03:00
parent 3d04ac0095
commit beb1eb2956
7 changed files with 307 additions and 12 deletions
+8
View File
@@ -28,6 +28,14 @@ public:
const QString &vaultRoot,
const QString &fileDir);
// Те же блоки, но версия oldMd с подсветкой отличий от newMd (для «Истории»).
// Каждый блок дополнительно имеет change:"same"/"del"/"add" (del — только в old,
// add — только в new); изменённые блоки обёрнуты в цветной div прямо в html/highlighted.
Q_INVOKABLE QVariantList parseBlocksWithDiff(const QString &oldMd,
const QString &newMd,
const QString &vaultRoot,
const QString &fileDir);
Q_INVOKABLE QString getCodeBlock(const QString &id) const;
Q_INVOKABLE void copyToClipboard(const QString &text) const;
Q_INVOKABLE QString highlightedCode(const QString &code, const QString &language) const;