#include "ctai_parsestring.h"
namespace ctai_parse {
QString parseMathInline(const QString& text) {
QString result = text;
QRegularExpression regex("\\$([^\\$]+)\\$");
result.replace(regex, "\\1");
return result;
}
QString parseMathBlock(const QString& text) {
QString result = text;
QRegularExpression regex("\\$\\$([^\\$]+)\\$\\$");
result.replace(regex, "
\\1
");
return result;
}
QString parseMathSymbols(const QString& text) {
QString result = text;
// 希腊字母
result.replace("\\alpha", "α");
result.replace("\\beta", "β");
result.replace("\\gamma", "γ");
result.replace("\\delta", "δ");
result.replace("\\theta", "θ");
result.replace("\\sigma", "σ");
// 数学运算符
result.replace("\\sum", "∑");
result.replace("\\prod", "∏");
result.replace("\\int", "∫");
result.replace("\\times", "×");
result.replace("\\div", "÷");
result.replace("\\pm", "±");
// 比较符号
result.replace("\\leq", "≤");
result.replace("\\geq", "≥");
result.replace("\\neq", "≠");
result.replace("\\approx", "≈");
// 常用常数
result.replace("\\infty", "∞");
result.replace("\\pi", "π");
return result;
}
QString parseSubSuper(const QString& text) {
QString result = text;
result.replace(QRegularExpression("\\^\\{([^\\}]+)\\}"), "\\1");
result.replace(QRegularExpression("\\_\\{([^\\}]+)\\}"), "\\1");
return result;
}
QString parseFraction(const QString& text) {
QString result = text;
QRegularExpression regex("\\\\frac\\{([^\\}]+)\\}\\{([^\\}]+)\\}");
result.replace(regex,
""
"\\1"
"\\2"
"");
return result;
}
QString parseCodeBlockPython(const QString& text) {
QString result = text;
QRegularExpression regex("```python\n([^`]+)```");
result.replace(regex,
""
"\\1"
"");
return result;
}
QString parseCodeBlock(const QString& text) {
QString result = text;
QRegularExpression regex("```([^\\n]*)\n([^`]+)```");
result.replace(regex,
""
"\\2"
"");
return result;
}
QString parseInlineCode(const QString& text) {
QString result = text;
result.replace(QRegularExpression("`([^`]+)`"), "\\1");
return result;
}
QString parseHeaders(const QString& text) {
QString result = text;
result.replace(QRegularExpression("^# (.+)$", QRegularExpression::MultilineOption),
"\\1
");
result.replace(QRegularExpression("^## (.+)$", QRegularExpression::MultilineOption),
"\\1
");
result.replace(QRegularExpression("^### (.+)$", QRegularExpression::MultilineOption),
"\\1
");
return result;
}
QString parseEmphasis(const QString& text) {
QString result = text;
result.replace(QRegularExpression("\\*\\*([^\\*]+)\\*\\*"), "\\1");
result.replace(QRegularExpression("\\*([^\\*]+)\\*"), "\\1");
return result;
}
QString parseLinks(const QString& text) {
QString result = text;
result.replace(QRegularExpression("\\[([^\\]]+)\\]\\(([^\\)]+)\\)"),
"\\1");
return result;
}
QString parseLists(const QString& text) {
QString result = text;
result.replace(QRegularExpression("^- (.+)$", QRegularExpression::MultilineOption),
"\\1");
return result;
}
QString parseLineBreaks(const QString& text) {
QString result = text;
result.replace(QRegularExpression("\n"), "
");
return result;
}
QString parseMarkdown(const QString& text) {
QString result = text;
// 处理数学相关
result = parseMathBlock(result);
result = parseMathInline(result);
result = parseMathSymbols(result);
result = parseSubSuper(result);
result = parseFraction(result);
// 处理代码块
result = parseCodeBlockPython(result);
result = parseCodeBlock(result);
result = parseInlineCode(result);
// 处理Markdown基本语法
result = parseHeaders(result);
result = parseEmphasis(result);
result = parseLinks(result);
result = parseLists(result);
result = parseLineBreaks(result);
return result;
}
} // namespace ctai_parse