mirror of
https://github.com/nomic-ai/gpt4all.git
synced 2024-10-01 01:06:10 -04:00
Markdown support.
Signed-off-by: Adam Treat <treat.adam@gmail.com>
This commit is contained in:
parent
23e8f43c5a
commit
d4494602e2
@ -15,6 +15,7 @@
|
|||||||
#include <QTextCharFormat>
|
#include <QTextCharFormat>
|
||||||
#include <QTextCursor>
|
#include <QTextCursor>
|
||||||
#include <QTextDocument>
|
#include <QTextDocument>
|
||||||
|
#include <QTextDocumentFragment>
|
||||||
#include <QTextFrame>
|
#include <QTextFrame>
|
||||||
#include <QTextFrameFormat>
|
#include <QTextFrameFormat>
|
||||||
#include <QTextTableCell>
|
#include <QTextTableCell>
|
||||||
@ -925,6 +926,17 @@ void ResponseText::handleTextChanged()
|
|||||||
m_isProcessingText = false;
|
m_isProcessingText = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void replaceAndInsertMarkdown(int startIndex, int endIndex, QTextDocument *doc)
|
||||||
|
{
|
||||||
|
QTextCursor cursor(doc);
|
||||||
|
cursor.setPosition(startIndex);
|
||||||
|
cursor.setPosition(endIndex, QTextCursor::KeepAnchor);
|
||||||
|
QTextDocumentFragment fragment(cursor);
|
||||||
|
const QString plainText = fragment.toPlainText();
|
||||||
|
cursor.removeSelectedText();
|
||||||
|
cursor.insertMarkdown(plainText);
|
||||||
|
}
|
||||||
|
|
||||||
void ResponseText::handleCodeBlocks()
|
void ResponseText::handleCodeBlocks()
|
||||||
{
|
{
|
||||||
QTextDocument* doc = m_textDocument->textDocument();
|
QTextDocument* doc = m_textDocument->textDocument();
|
||||||
@ -986,7 +998,16 @@ void ResponseText::handleCodeBlocks()
|
|||||||
|
|
||||||
QVector<CodeCopy> newCopies;
|
QVector<CodeCopy> newCopies;
|
||||||
|
|
||||||
|
// Track the position in the document to handle non-code blocks
|
||||||
|
int lastIndex = 0;
|
||||||
|
|
||||||
for(int index = matchesCode.count() - 1; index >= 0; --index) {
|
for(int index = matchesCode.count() - 1; index >= 0; --index) {
|
||||||
|
|
||||||
|
int nonCodeStart = lastIndex;
|
||||||
|
int nonCodeEnd = matchesCode[index].capturedStart();
|
||||||
|
if (nonCodeEnd > nonCodeStart)
|
||||||
|
replaceAndInsertMarkdown(nonCodeStart, nonCodeEnd, doc);
|
||||||
|
|
||||||
cursor.setPosition(matchesCode[index].capturedStart());
|
cursor.setPosition(matchesCode[index].capturedStart());
|
||||||
cursor.setPosition(matchesCode[index].capturedEnd(), QTextCursor::KeepAnchor);
|
cursor.setPosition(matchesCode[index].capturedEnd(), QTextCursor::KeepAnchor);
|
||||||
cursor.removeSelectedText();
|
cursor.removeSelectedText();
|
||||||
@ -1079,7 +1100,12 @@ void ResponseText::handleCodeBlocks()
|
|||||||
|
|
||||||
cursor = mainFrame->lastCursorPosition();
|
cursor = mainFrame->lastCursorPosition();
|
||||||
cursor.setCharFormat(QTextCharFormat());
|
cursor.setCharFormat(QTextCharFormat());
|
||||||
|
|
||||||
|
lastIndex = matchesCode[index].capturedEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lastIndex < doc->characterCount())
|
||||||
|
replaceAndInsertMarkdown(lastIndex, doc->characterCount() - 1, doc);
|
||||||
|
|
||||||
m_copies = newCopies;
|
m_copies = newCopies;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user