- src/markdown.{h,cpp}: convertitore minimale, due funzioni:
* toRichText() -> HTML per QML Text.RichText: grassetti (**x**/__x__),
corsivi (*x*/_x_ con confini di parola per non toccare snake_case),
titoli (#), liste (-/1.), citazioni (>), codice (`x` e blocchi ```,
in monospace), link [t](u) -> solo testo, barrato ~~x~~; escape di
< & > contro injection nel rich text
* toSpeech() -> testo piatto per il TTS: via recinti di codice, marcatori
di titoli/liste/citazioni, enfasi, backtick; link/immagini -> testo;
tabelle | a | b | -> "a, b"; righe vuote compattate
- ChatModel: nuovo ruolo contentRich (calcolato in C++, testabile);
incluso nei dataChanged dello streaming
- ChatPage: le bolle dell'assistente usano contentRich con
textFormat: Text.RichText; i messaggi utente restano testo semplice
- ApiClient::speak(): il testo passa da Markdown::toSpeech (niente più
simboli di formattazione letti ad alta voce)
- core-test: 19 casi nuovi per il convertitore (tutti locali, senza device)
Verificato: build zero warning + unit test completi.
40 lines
888 B
Prolog
40 lines
888 B
Prolog
TEMPLATE = app
|
|
TARGET = core-test
|
|
CONFIG += console c++11
|
|
QT += core network multimedia
|
|
|
|
# Workaround per la build locale su desktop senza libGL.so di sviluppo:
|
|
# se esiste lo stub dir con il symlink a libGL.so.1, usalo.
|
|
GLSTUB = /tmp/hh-test/gl
|
|
exists($$GLSTUB/libGL.so) {
|
|
LIBS += -L$$GLSTUB
|
|
}
|
|
|
|
SRC = $$PWD/../src
|
|
INCLUDEPATH += $$SRC
|
|
|
|
SOURCES += \
|
|
$$SRC/sseparser.cpp \
|
|
$$SRC/cookiejar.cpp \
|
|
$$SRC/settings.cpp \
|
|
$$SRC/apiclient.cpp \
|
|
$$SRC/chatmodel.cpp \
|
|
$$SRC/sessionsmodel.cpp \
|
|
$$SRC/recorder.cpp \
|
|
$$SRC/voicerecorder.cpp \
|
|
$$SRC/player.cpp \
|
|
$$SRC/markdown.cpp \
|
|
core_test.cpp
|
|
|
|
HEADERS += \
|
|
$$SRC/sseparser.h \
|
|
$$SRC/cookiejar.h \
|
|
$$SRC/settings.h \
|
|
$$SRC/apiclient.h \
|
|
$$SRC/chatmodel.h \
|
|
$$SRC/sessionsmodel.h \
|
|
$$SRC/recorder.h \
|
|
$$SRC/markdown.h \
|
|
$$SRC/voicerecorder.h \
|
|
$$SRC/player.h
|