From a9f3cbc7de6a8310094919a05a62578c8f870ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Mon, 16 Mar 2020 09:26:21 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@790 a8b55f48-bf90-11e4-a774-851b48703e85 --- qad/CMakeLists.txt | 2 +- qad/doc/CMakeLists.txt | 15 +++++++++++ qad/doc/markdown.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++ qad/doc/markdown.h | 11 ++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 qad/doc/CMakeLists.txt create mode 100644 qad/doc/markdown.cpp create mode 100644 qad/doc/markdown.h diff --git a/qad/CMakeLists.txt b/qad/CMakeLists.txt index 1668fbd..084f927 100644 --- a/qad/CMakeLists.txt +++ b/qad/CMakeLists.txt @@ -139,7 +139,7 @@ macro(qad_project NAME _MODULES _LIBS) endif() endmacro() -set(DIRS utils widgets application blockview graphic sql_table touch_widgets) +set(DIRS utils widgets application blockview graphic sql_table touch_widgets doc) foreach(D ${DIRS}) list(APPEND QT_MULTILIB_LIST qad_${D}) endforeach(D) diff --git a/qad/doc/CMakeLists.txt b/qad/doc/CMakeLists.txt new file mode 100644 index 0000000..59f1bfa --- /dev/null +++ b/qad/doc/CMakeLists.txt @@ -0,0 +1,15 @@ +include(CheckIncludeFileCXX) +set(CHECK_INCLUDES "-include stdio.h") +if(WIN32) + set(CHECK_INCLUDES "-include windows.h -include stdio.h") +endif() +check_include_file_cxx("mkdio.h" MARKDOWN_HEADER_MKDIO ${CHECK_INCLUDES}) +if (MARKDOWN_HEADER_MKDIO) + add_definitions("-DMARKDOWN_HEADER=\"mkdio.h\"") +endif() +check_include_file_cxx("markdown/markdown.h" MARKDOWN_HEADER_MARKDOWN ${CHECK_INCLUDES}) +if (MARKDOWN_HEADER_MARKDOWN) + add_definitions("-DMARKDOWN_HEADER=\"markdown/markdown.h\"") +endif() + +qad_project(doc "Core" "markdown") diff --git a/qad/doc/markdown.cpp b/qad/doc/markdown.cpp new file mode 100644 index 0000000..957800c --- /dev/null +++ b/qad/doc/markdown.cpp @@ -0,0 +1,61 @@ +#include "markdown.h" +#include +extern "C" { +#include MARKDOWN_HEADER +} +#ifndef mkd_flags_are +# ifndef MKD_DLEXTRA +# define MKD_DLEXTRA 0x01000000 +# endif +# ifndef MKD_FENCEDCODE +# define MKD_FENCEDCODE 0x02000000 +# endif +#endif + + +QString md2html(const QByteArray & src) { + static bool _is_mkd_init = false; + if (src.isEmpty()) return QString(); + if (!_is_mkd_init) { + _is_mkd_init = true; + mkd_initialize(); + } +#ifdef _MARKDOWN_D + DWORD flagm = (MKD_DLEXTRA | MKD_FENCEDCODE); + Document +#endif +#ifdef _MKDIO_D + #ifdef mkd_flags_are + mkd_flag_t * flagm = mkd_flags(); + mkd_set_flag_num(flagm, MKD_DLEXTRA); + mkd_set_flag_num(flagm, MKD_FENCEDCODE); + #else + mkd_flag_t flagm = (MKD_DLEXTRA | MKD_FENCEDCODE); + #endif + MMIOT +#endif + * doc = mkd_string(src.constData(), src.size(), 0); + if (!doc) return QString(); + mkd_compile(doc, flagm); + char * html = 0; + int len = mkd_document(doc, &html); + if (!html) { + mkd_cleanup(doc); + return QString(); + } + QString ret = QString::fromUtf8(html, len); + mkd_cleanup(doc); + QString title = QTextStream(&ret, QIODevice::ReadOnly).readLine(); + title = title.mid(title.indexOf(">")+1); + title = title.left(title.indexOf("<")); + QString header = "\n" + "\n\n" + "\n" + "\n"; + header.append("" + title + "\n"); + header.append("\n\n"); + ret.prepend(header); + ret.append("\n\n"); + return ret; +} + diff --git a/qad/doc/markdown.h b/qad/doc/markdown.h new file mode 100644 index 0000000..b1257a7 --- /dev/null +++ b/qad/doc/markdown.h @@ -0,0 +1,11 @@ +#ifndef QAD_MARKDOWN_H +#define QAD_MARKDOWN_H + +#include +#include "qad_export.h" + + +QAD_EXPORT QString md2html(const QByteArray & src); + + +#endif // QAD_MARKDOWN_H