şunun yansıması
https://github.com/quitesimpleorg/qsmaddy.git
eşitlendi 2025-04-17 01:49:02 +02:00
İşlemeleri karşılaştır
7 İşleme
Yazar | SHA1 | Tarih | |
---|---|---|---|
167ce3943d | |||
e0e0db80d5 | |||
8ac353a9d7 | |||
2f14336692 | |||
![]() |
adb1a910d4 | ||
![]() |
f38b3cf4fa | ||
![]() |
6b632abd44 |
67
CHANGELOG.md
Normal dosya
67
CHANGELOG.md
Normal dosya
@ -0,0 +1,67 @@
|
||||
# Changelog
|
||||
|
||||
This file tries to follow roughly [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
maddy uses [semver versioning](https://semver.org/).
|
||||
|
||||
## Badges
|
||||
|
||||
*  for any bug fixes.
|
||||
*  in case of vulnerabilities.
|
||||
*  for new features.
|
||||
*  for changes in existing functionality.
|
||||
*  for soon-to-be removed features.
|
||||
*  for now removed features.
|
||||
|
||||
## Upcoming
|
||||
|
||||
*  Added Changelog
|
||||
*  Added contribution guideline
|
||||
* ?
|
||||
|
||||
## version 1.1.2 2020-10-04
|
||||
|
||||
*  `*`, `+` and `-` are equivalent for making unordered bullet list
|
||||
*  Parsing support for fully numeric ordered lists
|
||||
*  make `Parser::Parse` accept istreams instead of stringstream
|
||||
*  CMake is creating an interface library which you can include in your own `target_link_libraries` and the global include path is untouched from maddy.
|
||||
|
||||
## version 1.1.1 2019-12-27
|
||||
|
||||
*  BreakLineParser
|
||||
*  HTMLParser
|
||||
*  Added optional config with the following options:
|
||||
* en-/disable the emphasized parser
|
||||
* wrap/not wrap HTML in markdown within a paragraph in output
|
||||
*  Updated gtest to release-1.10.0 to fix build issues
|
||||
|
||||
|
||||
## version 1.1.0 2019-02-19
|
||||
|
||||
*  Added missing includes to BlockParser
|
||||
*  Added missing dtor to BlockParser and LineParser
|
||||
*  `__test__` can also be used to get `<strong>text</strong>`
|
||||
*  Added AppVeyor CI
|
||||
*  Added clang for CI
|
||||
*  Single underscore `_` results in emphasized tag `<em>`, single `*` in italic tag `<i>`
|
||||
|
||||
## version 1.0.3 2018-01-18
|
||||
|
||||
*  Make sure that all parsers are finished
|
||||
*  ol documentation
|
||||
*  Added Travic-CI with gcc
|
||||
*  Added Howto for running the tests on the README
|
||||
|
||||
## version 1.0.2 2017-12-26
|
||||
|
||||
*  Fixed inline code for directly following letters (bold, emphasized and strikethrough)
|
||||
|
||||
## version 1.0.1 2017-12-25
|
||||
|
||||
*  Fixed inline code for bold, emphasized and strikethrough
|
||||
*  Fixed spelling in README
|
||||
*  Use Gold Linker on Unix if available for faster compile time
|
||||
*  Added Github ISSUE_TEMPLATE
|
||||
|
||||
## version 1.0.0 2017-12-25
|
||||
|
||||
initial release
|
26
CONTRIBUTING.md
Normal dosya
26
CONTRIBUTING.md
Normal dosya
@ -0,0 +1,26 @@
|
||||
# Contribution Guideline
|
||||
|
||||
First of all: I am thankful for any contribution this project gets.
|
||||
|
||||
## Creating Issues
|
||||
|
||||
You found a bug, you miss some feature in the project or have an idea how to
|
||||
improve the code? Then [create a GitHub issue](https://github.com/progsource/maddy/issues/new).
|
||||
|
||||
## Creating Pull-Requests
|
||||
|
||||
* Use a branch other than master.
|
||||
* Add yourself to the `AUTHORS` file.
|
||||
* Try to stick with the code style the files are having right now.
|
||||
* Write in your commit messages what/why you did something. Often times a one-liner might be enough, but if you want to write more, make an empty line in between like:
|
||||
```
|
||||
Short description
|
||||
|
||||
More and longer text for the commit message with some more information.
|
||||
That can go over multiple lines.
|
||||
```
|
||||
Do not include Github issue ticket numbers inside commit messages.
|
||||
* Explain for what your PR is for - like providing a use-case or something similar.
|
||||
* Update documentation of the Markdown syntax if anything changed there. (`docs/definitions.md`)
|
||||
* Add a changelog entry at "Upcoming" inside of `CHANGELOG.md`
|
||||
* Make sure, that the tests are successful.
|
81
README.md
81
README.md
@ -1,80 +1,3 @@
|
||||
# maddy
|
||||
# qsmaddy
|
||||
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://semver.org/)
|
||||
[](https://travis-ci.org/progsource/maddy)
|
||||
[](https://ci.appveyor.com/project/progsource/maddy/branch/master)
|
||||
|
||||
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 2017)
|
||||
|
||||
## Dependencies
|
||||
|
||||
* C++14
|
||||
|
||||
## Why maddy?
|
||||
|
||||
When I was needing 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](docs/definitions.md).
|
||||
|
||||
## 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:
|
||||
|
||||
```c++
|
||||
#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->isEmphasizedParserEnabled = true; // default
|
||||
config->isHTMLWrappedInParagraph = true; // default
|
||||
|
||||
std::shared_ptr<maddy::Parser> parser = std::make_shared<maddy::Parser>(config);
|
||||
std::string htmlOutput = parser->Parse(markdownInput);
|
||||
```
|
||||
|
||||
## How to run the tests
|
||||
|
||||
*(tested on Linux with
|
||||
[git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) and
|
||||
[cmake](https://cmake.org/install/) installed)*
|
||||
|
||||
Open your preferred terminal and type:
|
||||
|
||||
```shell
|
||||
git clone https://github.com/progsource/maddy.git
|
||||
cd maddy
|
||||
git submodule update --init --recursive
|
||||
mkdir tmp
|
||||
cd tmp
|
||||
cmake ..
|
||||
make
|
||||
make test # or run the executable in ../build/MaddyTests
|
||||
```
|
||||
|
||||
## How to contribute
|
||||
|
||||
There are different possibilities:
|
||||
|
||||
* [Create a GitHub issue](https://github.com/progsource/maddy/issues/new)
|
||||
* Create a pull request with an own branch (don't forget to put yourself in the
|
||||
AUTHORS file)
|
||||
Fork of [maddy](https://github.com/progsource/maddy) with some quick hacks to make it fit better for [qswiki](https://gitea.quitesimple.org/crtxcr/qswiki)
|
||||
|
36
include/maddy/callbackreplacer.h
Normal dosya
36
include/maddy/callbackreplacer.h
Normal dosya
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* This project is licensed under the MIT license. For more information see the
|
||||
* LICENSE file.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <regex>
|
||||
#include <functional>
|
||||
|
||||
namespace maddy {
|
||||
|
||||
inline std::string regex_callback_replacer(std::regex ®ex, const std::string &input,
|
||||
std::function<std::string(std::smatch &)> &callback)
|
||||
{
|
||||
std::string result;
|
||||
auto tagsbegin = std::sregex_iterator(input.begin(), input.end(), regex);
|
||||
auto tagsend = std::sregex_iterator();
|
||||
auto matchbegin = 0;
|
||||
for(std::sregex_iterator i = tagsbegin; i != tagsend; ++i)
|
||||
{
|
||||
std::smatch match = *i;
|
||||
|
||||
auto matchlength = match.length(0);
|
||||
auto matchpos = match.position();
|
||||
|
||||
result += input.substr(matchbegin, matchpos - matchbegin);
|
||||
result += callback(match);
|
||||
matchbegin = matchpos + matchlength;
|
||||
}
|
||||
result += input.substr(matchbegin);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ public:
|
||||
void
|
||||
Parse(std::string& line) override
|
||||
{
|
||||
std::regex re("(?!.*`.*|.*<code>.*)\\*(?!.*`.*|.*<\\/code>.*)([^\\*]*)\\*(?!.*`.*|.*<\\/code>.*)");
|
||||
static std::regex re("(?!.*`.*|.*<code>.*)\\*(?!.*`.*|.*<\\/code>.*)([^\\*]*)\\*(?!.*`.*|.*<\\/code>.*)");
|
||||
static std::string replacement = "<i>$1</i>";
|
||||
line = std::regex_replace(line, re, replacement);
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <regex>
|
||||
|
||||
#include "maddy/lineparser.h"
|
||||
#include "maddy/callbackreplacer.h"
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
@ -26,6 +27,16 @@ namespace maddy {
|
||||
*/
|
||||
class LinkParser : public LineParser
|
||||
{
|
||||
private:
|
||||
std::function<std::string(std::smatch &)> callback = [](std::smatch & match){
|
||||
std::string inner = match.str(1);
|
||||
std::string link = match.str(2);
|
||||
return "<a href=\"" + link + "\">" + inner + "</a>";
|
||||
};
|
||||
|
||||
std::regex re = std::regex("\\[([^\\]]*)\\]\\(([^\\]]*)\\)");
|
||||
|
||||
|
||||
public:
|
||||
/**
|
||||
* Parse
|
||||
@ -41,10 +52,12 @@ public:
|
||||
void
|
||||
Parse(std::string& line) override
|
||||
{
|
||||
static std::regex re("\\[([^\\]]*)\\]\\(([^\\]]*)\\)");
|
||||
static std::string replacement = "<a href=\"$2\">$1</a>";
|
||||
line = regex_callback_replacer(re,line,callback);
|
||||
}
|
||||
|
||||
line = std::regex_replace(line, re, replacement);
|
||||
void setCallback(std::function<std::string(std::smatch &)> callback)
|
||||
{
|
||||
this->callback = callback;
|
||||
}
|
||||
}; // class LinkParser
|
||||
|
||||
|
@ -116,6 +116,54 @@ public:
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
setBreakLineParser(std::shared_ptr<BreakLineParser> breakLineParser)
|
||||
{
|
||||
this->breakLineParser = breakLineParser;
|
||||
}
|
||||
|
||||
void
|
||||
setEmphasizedParser(std::shared_ptr<EmphasizedParser> emphasizedParser)
|
||||
{
|
||||
this->emphasizedParser = emphasizedParser;
|
||||
}
|
||||
|
||||
void
|
||||
setImageParser(std::shared_ptr<ImageParser> imageParser)
|
||||
{
|
||||
this->imageParser = imageParser;
|
||||
}
|
||||
|
||||
void
|
||||
setInlineCodeParser(std::shared_ptr<InlineCodeParser> inlineCodeParser)
|
||||
{
|
||||
this->inlineCodeParser = inlineCodeParser;
|
||||
}
|
||||
|
||||
void
|
||||
setItalicParser(std::shared_ptr<ItalicParser> italicParser)
|
||||
{
|
||||
this->italicParser = italicParser;
|
||||
}
|
||||
|
||||
void
|
||||
setLinkParser(std::shared_ptr<LinkParser> linkParser)
|
||||
{
|
||||
this->linkParser = linkParser;
|
||||
}
|
||||
|
||||
void
|
||||
setStrikeThroughParser(std::shared_ptr<StrikeThroughParser> strikeThroughParser)
|
||||
{
|
||||
this->strikeThroughParser = strikeThroughParser;
|
||||
}
|
||||
|
||||
void
|
||||
setStrongParser(std::shared_ptr<StrongParser> strongParser)
|
||||
{
|
||||
this->strongParser = strongParser;
|
||||
}
|
||||
|
||||
private:
|
||||
std::shared_ptr<ParserConfig> config;
|
||||
std::shared_ptr<BreakLineParser> breakLineParser;
|
||||
|
Yükleniyor…
x
Yeni konuda referans
Bir kullanıcı engelle