|
|
|
@ -72,7 +72,8 @@ namespace md4cpp {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static xml_entity_map
|
|
|
|
|
load_xml_entity_map() {
|
|
|
|
|
load_xml_entity_map()
|
|
|
|
|
{
|
|
|
|
|
static const intern_string_t name
|
|
|
|
|
= intern_string::lookup(xml_entities_json.get_name());
|
|
|
|
|
auto parse_res
|
|
|
|
@ -85,14 +86,16 @@ namespace md4cpp {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const xml_entity_map&
|
|
|
|
|
get_xml_entity_map() {
|
|
|
|
|
get_xml_entity_map()
|
|
|
|
|
{
|
|
|
|
|
static const auto retval = load_xml_entity_map();
|
|
|
|
|
|
|
|
|
|
return retval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static emoji_map
|
|
|
|
|
load_emoji_map() {
|
|
|
|
|
load_emoji_map()
|
|
|
|
|
{
|
|
|
|
|
static const intern_string_t name
|
|
|
|
|
= intern_string::lookup(emojis_json.get_name());
|
|
|
|
|
auto parse_res
|
|
|
|
@ -110,7 +113,8 @@ namespace md4cpp {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const emoji_map&
|
|
|
|
|
get_emoji_map() {
|
|
|
|
|
get_emoji_map()
|
|
|
|
|
{
|
|
|
|
|
static const auto retval = load_emoji_map();
|
|
|
|
|
|
|
|
|
|
return retval;
|
|
|
|
@ -122,7 +126,8 @@ namespace md4cpp {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static event_handler::block
|
|
|
|
|
build_block(MD_BLOCKTYPE type, void *detail) {
|
|
|
|
|
build_block(MD_BLOCKTYPE type, void* detail)
|
|
|
|
|
{
|
|
|
|
|
switch (type) {
|
|
|
|
|
case MD_BLOCK_DOC:
|
|
|
|
|
return event_handler::block_doc{};
|
|
|
|
@ -162,7 +167,8 @@ namespace md4cpp {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static event_handler::span
|
|
|
|
|
build_span(MD_SPANTYPE type, void *detail) {
|
|
|
|
|
build_span(MD_SPANTYPE type, void* detail)
|
|
|
|
|
{
|
|
|
|
|
switch (type) {
|
|
|
|
|
case MD_SPAN_EM:
|
|
|
|
|
return event_handler::span_em{};
|
|
|
|
@ -186,7 +192,8 @@ namespace md4cpp {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
md4cpp_enter_block(MD_BLOCKTYPE type, void *detail, void *userdata) {
|
|
|
|
|
md4cpp_enter_block(MD_BLOCKTYPE type, void* detail, void* userdata)
|
|
|
|
|
{
|
|
|
|
|
auto* pu = static_cast<parse_userdata*>(userdata);
|
|
|
|
|
|
|
|
|
|
auto enter_res = pu->pu_handler.enter_block(build_block(type, detail));
|
|
|
|
@ -199,7 +206,8 @@ namespace md4cpp {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
md4cpp_leave_block(MD_BLOCKTYPE type, void *detail, void *userdata) {
|
|
|
|
|
md4cpp_leave_block(MD_BLOCKTYPE type, void* detail, void* userdata)
|
|
|
|
|
{
|
|
|
|
|
auto* pu = static_cast<parse_userdata*>(userdata);
|
|
|
|
|
|
|
|
|
|
auto leave_res = pu->pu_handler.leave_block(build_block(type, detail));
|
|
|
|
@ -212,7 +220,8 @@ namespace md4cpp {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
md4cpp_enter_span(MD_SPANTYPE type, void *detail, void *userdata) {
|
|
|
|
|
md4cpp_enter_span(MD_SPANTYPE type, void* detail, void* userdata)
|
|
|
|
|
{
|
|
|
|
|
auto* pu = static_cast<parse_userdata*>(userdata);
|
|
|
|
|
|
|
|
|
|
auto enter_res = pu->pu_handler.enter_span(build_span(type, detail));
|
|
|
|
@ -225,7 +234,8 @@ namespace md4cpp {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
md4cpp_leave_span(MD_SPANTYPE type, void *detail, void *userdata) {
|
|
|
|
|
md4cpp_leave_span(MD_SPANTYPE type, void* detail, void* userdata)
|
|
|
|
|
{
|
|
|
|
|
auto* pu = static_cast<parse_userdata*>(userdata);
|
|
|
|
|
|
|
|
|
|
auto leave_res = pu->pu_handler.leave_span(build_span(type, detail));
|
|
|
|
@ -238,7 +248,8 @@ namespace md4cpp {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
md4cpp_text(MD_TEXTTYPE type, const MD_CHAR *text, MD_SIZE size, void *userdata) {
|
|
|
|
|
md4cpp_text(MD_TEXTTYPE type, const MD_CHAR* text, MD_SIZE size, void* userdata)
|
|
|
|
|
{
|
|
|
|
|
auto* pu = static_cast<parse_userdata*>(userdata);
|
|
|
|
|
auto text_res = pu->pu_handler.text(type, string_fragment(text, 0, size));
|
|
|
|
|
if (text_res.isErr()) {
|
|
|
|
@ -251,7 +262,8 @@ namespace md4cpp {
|
|
|
|
|
|
|
|
|
|
namespace details {
|
|
|
|
|
Result<void, std::string>
|
|
|
|
|
parse(const string_fragment &sf, event_handler &eh) {
|
|
|
|
|
parse(const string_fragment& sf, event_handler& eh)
|
|
|
|
|
{
|
|
|
|
|
const char* utf8_errmsg = nullptr;
|
|
|
|
|
int utf8_faulty_bytes = 0;
|
|
|
|
|
|
|
|
|
@ -270,7 +282,8 @@ namespace md4cpp {
|
|
|
|
|
auto pu = parse_userdata{eh};
|
|
|
|
|
|
|
|
|
|
parser.abi_version = 0;
|
|
|
|
|
parser.flags = MD_DIALECT_GITHUB | MD_FLAG_UNDERLINE;
|
|
|
|
|
parser.flags = (MD_DIALECT_GITHUB | MD_FLAG_UNDERLINE)
|
|
|
|
|
& ~(MD_FLAG_PERMISSIVEAUTOLINKS);
|
|
|
|
|
parser.enter_block = md4cpp_enter_block;
|
|
|
|
|
parser.leave_block = md4cpp_leave_block;
|
|
|
|
|
parser.enter_span = md4cpp_enter_span;
|
|
|
|
|