12,788
回編集
502行目: | 502行目: | ||
return a.exec(); | return a.exec(); | ||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== HTMLファイルへ変換 ==== | |||
<syntaxhighlight lang="c++"> | |||
// MarkdownConverter.hファイル | |||
#include <QCoreApplication> | |||
#include <QFile> | |||
#include <QTextStream> | |||
#include <cmark.h> | |||
#include <QDebug> | |||
class MarkdownConverter | |||
{ | |||
public: | |||
MarkdownConverter() = default; | |||
bool convertFile(const QString &inputPath, const QString &outputPath) | |||
{ | |||
// Markdownファイルの読み込み | |||
QFile inputFile(inputPath); | |||
if (!inputFile.open(QIODevice::ReadOnly | QIODevice::Text)) { | |||
qDebug() << "Markdownファイルのオープンに失敗: " << inputPath; | |||
return false; | |||
} | |||
QTextStream in(&inputFile); | |||
QString markdownContent = in.readAll(); | |||
inputFile.close(); | |||
// MarkdownファイルをHTMLファイルへ変換 | |||
QString htmlContent = convertMarkdownToHtml(markdownContent); | |||
// HTMLファイルへ書き込み | |||
QFile outputFile(outputPath); | |||
if (!outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) { | |||
qDebug() << "HTMLファイルの書き込みに失敗: " << outputPath; | |||
return false; | |||
} | |||
QTextStream out(&outputFile); | |||
out << htmlContent; | |||
outputFile.close(); | |||
qDebug() << "HTMLファイルへの変換に成功: " << outputPath; | |||
return true; | |||
} | |||
private: | |||
QString convertMarkdownToHtml(const QString& markdown) | |||
{ | |||
// Markdownファイルをパース | |||
cmark_node *document = cmark_parse_document(markdown.toUtf8().constData(), markdown.length(), CMARK_OPT_DEFAULT); | |||
// Convert to HTML | |||
char *html = cmark_render_html(document, CMARK_OPT_DEFAULT); | |||
// HTMLの基本構文にラッピング | |||
QString fullHtml = QString( | |||
"<!DOCTYPE html>\n" | |||
"<html lang=\"en\">\n" | |||
"<head>\n" | |||
" <meta charset=\"UTF-8\">\n" | |||
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" | |||
" <title>Converted Markdown</title>\n" | |||
"</head>\n" | |||
"<body>\n" | |||
"%1\n" | |||
"</body>\n" | |||
"</html>" | |||
).arg(QString::fromUtf8(html)); | |||
// Free allocated memory | |||
free(html); | |||
cmark_node_free(document); | |||
return fullHtml; | |||
} | |||
}; | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// main.cppファイル | |||
#include "MarkdownConverter.h" | |||
int main(int argc, char *argv[]) | |||
{ | |||
QCoreApplication a(argc, argv); | |||
QString inputFile = "<入力 : Markdownファイルのパス>"; | |||
QString outputFile = "<出力 : HTMLファイルのパス>"; | |||
MarkdownConverter converter; | |||
if (!converter.convertFile(inputFile, outputFile)) { | |||
qDebug() << "変換に失敗"; | |||
return -1; | |||
} | |||
return 0; | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |