add markdown dialect (WIP) & add strikethrough and underline font styles

This commit is contained in:
MihailRis
2024-12-06 17:35:03 +03:00
parent 605d7e7897
commit 80e809f97f
15 changed files with 296 additions and 58 deletions
+30
View File
@@ -0,0 +1,30 @@
#pragma once
#include <string>
namespace devtools {
struct Location {
int pos;
int lineStart;
int line;
};
enum class TokenTag {
KEYWORD, NAME, INTEGER, NUMBER, OPEN_BRACKET, CLOSE_BRACKET, STRING,
OPERATOR, COMMA, SEMICOLON, UNEXPECTED, COMMENT
};
struct Token {
TokenTag tag;
std::string text;
Location start;
Location end;
Token(TokenTag tag, std::string text, Location start, Location end)
: tag(tag),
text(std::move(text)),
start(std::move(start)),
end(std::move(end)) {
}
};
}
+19 -19
View File
@@ -7,28 +7,28 @@
using namespace devtools;
static std::unique_ptr<FontStylesScheme> build_styles(
const std::vector<lua::Token>& tokens
const std::vector<devtools::Token>& tokens
) {
using devtools::TokenTag;
FontStylesScheme styles {
{
{false, false, glm::vec4(0.8f, 0.8f, 0.8f, 1)}, // default
{true, false, glm::vec4(0.9, 0.6f, 0.4f, 1)}, // keyword
{false, false, glm::vec4(0.4, 0.8f, 0.5f, 1)}, // string
{false, false, glm::vec4(0.3, 0.3f, 0.3f, 1)}, // comment
{false, false, glm::vec4(0.4, 0.45f, 0.5f, 1)}, // self
{true, false, glm::vec4(1.0f, 0.2f, 0.1f, 1)}, // unexpected
{false, false, false, false, glm::vec4(0.8f, 0.8f, 0.8f, 1)}, // default
{true, false, false, false, glm::vec4(0.9, 0.6f, 0.4f, 1)}, // keyword
{false, false, false, false, glm::vec4(0.4, 0.8f, 0.5f, 1)}, // string
{false, false, false, false, glm::vec4(0.3, 0.3f, 0.3f, 1)}, // comment
{true, false, false, false, glm::vec4(1.0f, 0.2f, 0.1f, 1)}, // unexpected
},
{}
};
size_t offset = 0;
for (int i = 0; i < tokens.size(); i++) {
const auto& token = tokens.at(i);
if (token.tag != lua::TokenTag::KEYWORD &&
token.tag != lua::TokenTag::STRING &&
token.tag != lua::TokenTag::INTEGER &&
token.tag != lua::TokenTag::NUMBER &&
token.tag != lua::TokenTag::COMMENT &&
token.tag != lua::TokenTag::UNEXPECTED) {
if (token.tag != TokenTag::KEYWORD &&
token.tag != TokenTag::STRING &&
token.tag != TokenTag::INTEGER &&
token.tag != TokenTag::NUMBER &&
token.tag != TokenTag::COMMENT &&
token.tag != TokenTag::UNEXPECTED) {
continue;
}
if (token.start.pos > offset) {
@@ -38,12 +38,12 @@ static std::unique_ptr<FontStylesScheme> build_styles(
offset = token.end.pos;
int styleIndex;
switch (token.tag) {
case lua::TokenTag::KEYWORD: styleIndex = 1; break;
case lua::TokenTag::STRING:
case lua::TokenTag::INTEGER:
case lua::TokenTag::NUMBER: styleIndex = 2; break;
case lua::TokenTag::COMMENT: styleIndex = 3; break;
case lua::TokenTag::UNEXPECTED: styleIndex = 5; break;
case TokenTag::KEYWORD: styleIndex = SyntaxStyles::KEYWORD; break;
case TokenTag::STRING:
case TokenTag::INTEGER:
case TokenTag::NUMBER: styleIndex = SyntaxStyles::LITERAL; break;
case TokenTag::COMMENT: styleIndex = SyntaxStyles::COMMENT; break;
case TokenTag::UNEXPECTED: styleIndex = SyntaxStyles::ERROR; break;
default:
styleIndex = 0;
break;
+4
View File
@@ -6,6 +6,10 @@
struct FontStylesScheme;
namespace devtools {
enum SyntaxStyles {
DEFAULT, KEYWORD, LITERAL, COMMENT, ERROR
};
std::unique_ptr<FontStylesScheme> syntax_highlight(
const std::string& lang, std::string_view source
);