История: 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:
@@ -9,6 +9,9 @@ Item {
|
||||
property string vaultRoot: ""
|
||||
property string fileDir: ""
|
||||
property string emptyText: qsTr("Пустой файл — начните писать в режиме редактирования")
|
||||
// Если задан — markdown считается старой версией и подсвечиваются отличия от него
|
||||
// (блоки del — только в markdown, add — только в compareMarkdown)
|
||||
property string compareMarkdown: ""
|
||||
implicitHeight: column.implicitHeight + 24
|
||||
|
||||
signal linkActivated(string href)
|
||||
@@ -17,7 +20,9 @@ Item {
|
||||
function update() {
|
||||
// Триггерим пересборку блоков
|
||||
blocksModel.clear()
|
||||
const blocks = mdParser.parseBlocks(markdown, vaultRoot, fileDir)
|
||||
const blocks = compareMarkdown.length > 0
|
||||
? mdParser.parseBlocksWithDiff(markdown, compareMarkdown, vaultRoot, fileDir)
|
||||
: mdParser.parseBlocks(markdown, vaultRoot, fileDir)
|
||||
for (let i = 0; i < blocks.length; i++) {
|
||||
blocksModel.append(blocks[i])
|
||||
}
|
||||
@@ -26,6 +31,7 @@ Item {
|
||||
}
|
||||
|
||||
onMarkdownChanged: update()
|
||||
onCompareMarkdownChanged: update()
|
||||
onVaultRootChanged: update()
|
||||
onFileDirChanged: update()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user