2024-03-17 07:58:28 +00:00
|
|
|
#include "tokens_novel.h"
|
|
|
|
|
|
|
|
using namespace example_novel;
|
2024-06-18 13:17:06 +00:00
|
|
|
using namespace lib_token;
|
2024-03-17 07:58:28 +00:00
|
|
|
|
|
|
|
QString LeftBracket::name() const { return u8"left-bracket"; }
|
|
|
|
|
|
|
|
QString LeftBracket::regex() const { return u8"{"; }
|
|
|
|
|
2024-06-18 13:17:06 +00:00
|
|
|
std::tuple<std::shared_ptr<const Token>, std::shared_ptr<const WordBase>>
|
|
|
|
LeftBracket::analysis(std::shared_ptr<const WordBase> content) const {
|
2024-03-17 07:58:28 +00:00
|
|
|
auto text = content->content();
|
|
|
|
if (!text.startsWith(regex()))
|
|
|
|
return std::make_tuple(nullptr, content);
|
|
|
|
|
2024-06-18 13:17:06 +00:00
|
|
|
auto token_inst = std::make_shared<TokenContent>(content->row(), content->column(), content->content().mid(0, regex().length()),
|
2024-03-17 07:58:28 +00:00
|
|
|
content->file(), shared_from_this());
|
|
|
|
auto t_remains = content->content().mid(regex().length());
|
|
|
|
if (t_remains.length() > 0) {
|
2024-06-18 13:17:06 +00:00
|
|
|
auto remains = std::make_shared<WordPeaks>(content->row(), content->column() + regex().length(), t_remains, content->file());
|
2024-03-17 07:58:28 +00:00
|
|
|
return std::make_tuple(token_inst, remains);
|
|
|
|
}
|
|
|
|
return std::make_tuple(token_inst, nullptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
QString RightBracket::name() const { return u8"right-bracket"; }
|
|
|
|
|
|
|
|
QString RightBracket::regex() const { return u8"}"; }
|
|
|
|
|
|
|
|
QString ReferMark::name() const { return u8"refer-mark"; }
|
|
|
|
|
|
|
|
QString ReferMark::regex() const { return u8"@"; }
|
|
|
|
|
|
|
|
Keywords::Keywords(const QString& val, const QString& nm) : value_store(val), name_store(nm) {}
|
|
|
|
|
|
|
|
QString Keywords::name() const { return name_store; }
|
|
|
|
|
|
|
|
QString Keywords::regex() const { return value_store; }
|
|
|
|
|
2024-06-18 13:17:06 +00:00
|
|
|
std::tuple<std::shared_ptr<const Token>, std::shared_ptr<const WordBase>>
|
|
|
|
Keywords::analysis(std::shared_ptr<const WordBase> content) const {
|
2024-03-17 07:58:28 +00:00
|
|
|
if (content->content() != regex()) {
|
|
|
|
return std::make_tuple(nullptr, content);
|
|
|
|
}
|
|
|
|
|
2024-06-18 13:17:06 +00:00
|
|
|
auto token_inst = std::make_shared<TokenContent>(content->row(), content->column(), content->content(), content->file(), shared_from_this());
|
2024-03-17 07:58:28 +00:00
|
|
|
return std::make_tuple(token_inst, nullptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
QString NewLine::name() const { return u8"new-line"; }
|
|
|
|
|
|
|
|
QString NewLine::regex() const { return u8"\n"; }
|
|
|
|
|
|
|
|
QString Numbers::name() const { return u8"numbers"; }
|
|
|
|
|
|
|
|
QString Numbers::regex() const { return u8"^([0-9]+)$"; }
|
|
|
|
|
2024-06-18 13:17:06 +00:00
|
|
|
std::tuple<std::shared_ptr<const Token>, std::shared_ptr<const WordBase>>
|
|
|
|
Numbers::analysis(std::shared_ptr<const WordBase> content) const {
|
2024-03-17 07:58:28 +00:00
|
|
|
auto text = content->content();
|
|
|
|
QRegExp regx(regex());
|
|
|
|
if (regx.indexIn(text) == -1)
|
|
|
|
return std::make_tuple(nullptr, content);
|
|
|
|
|
2024-06-18 13:17:06 +00:00
|
|
|
auto tinst = std::make_shared<TokenContent>(content->row(), content->column(), content->content(), content->file(), shared_from_this());
|
2024-03-17 07:58:28 +00:00
|
|
|
return std::make_tuple(tinst, nullptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
QString VTextSection::name() const { return u8"text-section"; }
|
|
|
|
|
|
|
|
QString VTextSection::regex() const { return u8"^([^\\{\\}\\n@&]+)"; }
|
|
|
|
|
2024-06-18 13:17:06 +00:00
|
|
|
std::tuple<std::shared_ptr<const Token>, std::shared_ptr<const WordBase>>
|
|
|
|
VTextSection::analysis(std::shared_ptr<const WordBase> content) const {
|
2024-03-17 07:58:28 +00:00
|
|
|
auto text = content->content();
|
|
|
|
QRegExp regx(regex());
|
|
|
|
if (regx.indexIn(text) == -1) {
|
|
|
|
return std::make_tuple(nullptr, content);
|
|
|
|
}
|
|
|
|
|
|
|
|
auto match = regx.cap(1);
|
|
|
|
auto remains = content->content().mid(match.length());
|
|
|
|
|
2024-06-18 13:17:06 +00:00
|
|
|
auto tinst = std::make_shared<TokenContent>(content->row(), content->column(), match, content->file(), shared_from_this());
|
2024-03-17 07:58:28 +00:00
|
|
|
if (remains.length()) {
|
2024-06-18 13:17:06 +00:00
|
|
|
auto t_remains = std::make_shared<WordPeaks>(content->row(), content->column(), remains, content->file());
|
2024-03-17 07:58:28 +00:00
|
|
|
return std::make_tuple(tinst, t_remains);
|
|
|
|
}
|
|
|
|
return std::make_tuple(tinst, nullptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
QString Split::name() const { return u8"split-mark"; }
|
|
|
|
|
|
|
|
QString Split::regex() const { return u8"&"; }
|
|
|
|
|
|
|
|
QString NameSection::name() const { return u8"name-section"; }
|
|
|
|
|
|
|
|
QString NameSection::regex() const { return u8"^([^:\\{\\}\\n@&][^\\{\\}\\n@&]*)"; }
|
|
|
|
|
2024-06-18 13:17:06 +00:00
|
|
|
std::tuple<std::shared_ptr<const Token>, std::shared_ptr<const WordBase> > NameSection::analysis(std::shared_ptr<const WordBase> content) const
|
2024-03-17 07:58:28 +00:00
|
|
|
{
|
|
|
|
auto text = content->content();
|
|
|
|
QRegExp regx(regex());
|
|
|
|
if (regx.indexIn(text) == -1) {
|
|
|
|
return std::make_tuple(nullptr, content);
|
|
|
|
}
|
|
|
|
|
|
|
|
auto match = regx.cap(1);
|
|
|
|
auto remains = content->content().mid(match.length());
|
|
|
|
|
2024-06-18 13:17:06 +00:00
|
|
|
auto tinst = std::make_shared<TokenContent>(content->row(), content->column(), match, content->file(), shared_from_this());
|
2024-03-17 07:58:28 +00:00
|
|
|
if (remains.length()) {
|
2024-06-18 13:17:06 +00:00
|
|
|
auto t_remains = std::make_shared<WordPeaks>(content->row(), content->column(), remains, content->file());
|
2024-03-17 07:58:28 +00:00
|
|
|
return std::make_tuple(tinst, t_remains);
|
|
|
|
}
|
|
|
|
return std::make_tuple(tinst, nullptr);
|
|
|
|
}
|