mirror of
https://github.com/YGGverse/Yoda.git
synced 2025-01-29 20:44:25 +00:00
add headers markup support
This commit is contained in:
parent
9f0245e5ff
commit
8655a95e6e
@ -41,6 +41,30 @@ Reader::Reader(
|
||||
}
|
||||
|
||||
// Match tools
|
||||
bool Reader::Line::Match::header(
|
||||
const Glib::ustring & GEMTEXT,
|
||||
int & level,
|
||||
Glib::ustring & text
|
||||
) {
|
||||
auto match = Glib::Regex::split_simple(
|
||||
R"regex(^(#{1,3})(.*)$)regex",
|
||||
GEMTEXT
|
||||
);
|
||||
|
||||
int index = 0; for (const Glib::ustring & MATCH : match)
|
||||
{
|
||||
switch (index)
|
||||
{
|
||||
case 1: level = MATCH.length(); break;
|
||||
case 2: text = MATCH; break;
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
return level > 0 && !text.empty();
|
||||
}
|
||||
|
||||
bool Reader::Line::Match::link(
|
||||
const Glib::ustring & GEMTEXT,
|
||||
Glib::ustring & address,
|
||||
@ -81,7 +105,23 @@ Glib::ustring Reader::make(
|
||||
|
||||
while (std::getline(stream, line))
|
||||
{
|
||||
// Links
|
||||
// Header
|
||||
int level;
|
||||
Glib::ustring text;
|
||||
|
||||
if (Line::Match::header(line, level, text))
|
||||
{
|
||||
pango.append(
|
||||
Reader::Make::header(
|
||||
level,
|
||||
text
|
||||
)
|
||||
);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Link
|
||||
Glib::ustring address;
|
||||
Glib::ustring date;
|
||||
Glib::ustring alt;
|
||||
@ -95,25 +135,61 @@ Glib::ustring Reader::make(
|
||||
alt
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
pango.append(
|
||||
line
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// @TODO other tags..
|
||||
|
||||
pango.append(
|
||||
"\n" // @TODO
|
||||
line.append(
|
||||
"\n"
|
||||
) // @TODO
|
||||
);
|
||||
}
|
||||
|
||||
return pango;
|
||||
}
|
||||
|
||||
Glib::ustring Reader::Make::header(
|
||||
const int & LEVEL,
|
||||
const Glib::ustring & VALUE
|
||||
) {
|
||||
switch (LEVEL)
|
||||
{
|
||||
case 1:
|
||||
|
||||
return Glib::ustring::sprintf(
|
||||
"<span size=\"xx-large\">%s</span>\n",
|
||||
Glib::Markup::escape_text(
|
||||
VALUE
|
||||
)
|
||||
);
|
||||
|
||||
case 2:
|
||||
|
||||
return Glib::ustring::sprintf(
|
||||
"<span size=\"x-large\">%s</span>\n",
|
||||
Glib::Markup::escape_text(
|
||||
VALUE
|
||||
)
|
||||
);
|
||||
|
||||
case 3:
|
||||
|
||||
return Glib::ustring::sprintf(
|
||||
"<span size=\"large\">%s</span>\n",
|
||||
Glib::Markup::escape_text(
|
||||
VALUE
|
||||
)
|
||||
);
|
||||
|
||||
default:
|
||||
|
||||
throw _("Header level not supported"); // @TODO
|
||||
}
|
||||
}
|
||||
|
||||
Glib::ustring Reader::Make::link(
|
||||
const Glib::ustring & ADDRESS,
|
||||
const Glib::ustring & DATE,
|
||||
@ -136,7 +212,7 @@ Glib::ustring Reader::Make::link(
|
||||
}
|
||||
|
||||
return Glib::ustring::sprintf(
|
||||
"<a href=\"%s\" title=\"%s\">%s</a>",
|
||||
"<a href=\"%s\" title=\"%s\">%s</a>\n",
|
||||
Glib::Markup::escape_text(
|
||||
ADDRESS // @TODO to absolute
|
||||
),
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef APP_BROWSER_MAIN_TAB_PAGE_CONTENT_TEXT_GEMINI_READER_HPP
|
||||
#define APP_BROWSER_MAIN_TAB_PAGE_CONTENT_TEXT_GEMINI_READER_HPP
|
||||
|
||||
#include <glibmm/i18n.h>
|
||||
#include <glibmm/markup.h>
|
||||
#include <glibmm/regex.h>
|
||||
#include <glibmm/ustring.h>
|
||||
@ -18,6 +19,12 @@ namespace app::browser::main::tab::page::content::text::gemini
|
||||
{
|
||||
struct Match
|
||||
{
|
||||
static bool header(
|
||||
const Glib::ustring & GEMTEXT,
|
||||
int & level,
|
||||
Glib::ustring & text
|
||||
);
|
||||
|
||||
static bool link(
|
||||
const Glib::ustring & GEMTEXT,
|
||||
Glib::ustring & address,
|
||||
@ -29,6 +36,11 @@ namespace app::browser::main::tab::page::content::text::gemini
|
||||
|
||||
struct Make
|
||||
{
|
||||
static Glib::ustring header(
|
||||
const int & LEVEL,
|
||||
const Glib::ustring & VALUE
|
||||
);
|
||||
|
||||
static Glib::ustring link(
|
||||
const Glib::ustring & ADDRESS,
|
||||
const Glib::ustring & DATE,
|
||||
|
Loading…
x
Reference in New Issue
Block a user