Lucian Smith 2a00c9fb0b Add regex for title text version of links
* Add regex for title text version of links

Original parser matched:
  [name](http:://link)

Add match for:
  [name](http:://link "title text")

* Add tests and improve regex's
* Several new tests in test_maddy_linkparser.cpp  (Some with paths for future improvement, and one to ensure an overzealous future update doesn't disallow actually-used special characters like o-umlaut).
* URLs now ignore leading/trailing spaces.
* URLs now don't match on internal spaces or quotes.
* Small grammar fix in CONTRIBUTING.md
* Updated changelog.
2025-04-20 18:45:27 +02:00
2025-04-18 12:52:51 +02:00
2024-11-16 05:50:22 +01:00
2024-11-16 05:50:22 +01:00
2023-07-27 18:48:03 +02:00
2025-03-28 05:04:55 +01:00

maddy

License: MIT Version: 1.4.0

maddy is a C++ Markdown to HTML header-only parser library.

Supported OS

It actually should work on any OS, that supports the C++14 standard library.

It is tested to work on:

  • Linux (gcc)
  • OSX (clang)
  • Windows (Visual Studio 17 2022, mingw)

Dependencies

  • C++14

Why maddy?

When I was looking for a Markdown parser in C++, I couldn't find any, that was fitting my needs. So I simply wrote my own one.

Markdown syntax

The supported syntax can be found in the definitions docs.

How to add maddy to your cmake project

You can use FetchContent which was introduced in CMake 3.11.

This way you can add

include(FetchContent)

FetchContent_Declare(
  maddy
  URL https://github.com/progsource/maddy/.../maddy-src.zip
)
FetchContent_MakeAvailable(maddy)

add_executable(my_exe)
target_link_libraries(my_exe PUBLIC maddy)

to your CMake file to make it work. Check the release for the full zip-file-url.

The zip only contains a CMakeLists.txt, the include folder and the LICENSE file.

How to use

To use maddy in your project, simply add the include path of maddy to yours and in the code, you can then do the following:

#include <memory>
#include <string>

#include "maddy/parser.h"

std::stringstream markdownInput("");

// config is optional
std::shared_ptr<maddy::ParserConfig> config = std::make_shared<maddy::ParserConfig>();
config->enabledParsers &= ~maddy::types::EMPHASIZED_PARSER; // disable emphasized parser
config->enabledParsers |= maddy::types::HTML_PARSER; // do not wrap HTML in paragraph

std::shared_ptr<maddy::Parser> parser = std::make_shared<maddy::Parser>(config);
std::string htmlOutput = parser->Parse(markdownInput);

You can find all parser flags in include/maddy/parserconfig.h.

How to run the tests

(tested on Linux with git and cmake installed)

Open your preferred terminal and type:

git clone https://github.com/progsource/maddy.git
cd maddy
mkdir tmp
cd tmp
cmake -DMADDY_BUILD_WITH_TESTS=ON ..
make
make test # or run the executable in ../build/MaddyTests

How to contribute

There are different possibilities:

Please also read CONTRIBUTING.md.

Description
C++ Markdown to HTML header-only parser library
Readme MIT 600 KiB
Languages
C++ 85.5%
Python 9%
CMake 5.5%