From 60c3f86ff01449bfabd5a39d64c72d34f895ed7f Mon Sep 17 00:00:00 2001 From: codeboss <2422523675@qq.com> Date: Wed, 19 Jun 2024 12:05:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E9=A2=84=E5=AE=9A=E4=B9=89co?= =?UTF-8?q?de=E5=8F=96=E4=BB=A3string=E6=AF=94=E8=BE=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WsNovelParser/WsNovelParser.vcxproj.user | 4 +- libParse/libParse.vcxproj.user | 4 +- libSyntax/libSyntax.vcxproj.user | 4 +- libSyntax/libsyntax.cpp | 6 +-- libSyntax/syntax_novel.cpp | 10 ++-- libToken/libToken.vcxproj.user | 4 +- libToken/libtoken.h | 8 ++- libToken/tokens_novel.cpp | 65 ++++++++++++++++++++---- libToken/tokens_novel.h | 30 +++++++---- 9 files changed, 98 insertions(+), 37 deletions(-) diff --git a/WsNovelParser/WsNovelParser.vcxproj.user b/WsNovelParser/WsNovelParser.vcxproj.user index cb29a3a..f29c08d 100644 --- a/WsNovelParser/WsNovelParser.vcxproj.user +++ b/WsNovelParser/WsNovelParser.vcxproj.user @@ -6,12 +6,12 @@ --path "D:\手作小说\科学+修仙+创造世界" - 2024-06-18T15:36:03.6534384Z + 2024-06-19T03:41:21.9792038Z - 2024-06-18T15:36:03.7471721Z + 2024-06-19T03:41:22.1198275Z diff --git a/libParse/libParse.vcxproj.user b/libParse/libParse.vcxproj.user index 9d18e80..1471a2c 100644 --- a/libParse/libParse.vcxproj.user +++ b/libParse/libParse.vcxproj.user @@ -5,12 +5,12 @@ WindowsLocalDebugger - 2024-06-18T15:36:03.9815477Z + 2024-06-19T03:41:22.1667034Z - 2024-06-18T15:36:04.0440621Z + 2024-06-19T03:41:22.2604525Z diff --git a/libSyntax/libSyntax.vcxproj.user b/libSyntax/libSyntax.vcxproj.user index 5fc4fad..79b07d0 100644 --- a/libSyntax/libSyntax.vcxproj.user +++ b/libSyntax/libSyntax.vcxproj.user @@ -5,12 +5,12 @@ WindowsLocalDebugger - 2024-06-18T15:36:03.7784470Z + 2024-06-19T03:41:22.4167016Z - 2024-06-18T15:36:03.8565020Z + 2024-06-19T03:41:22.5104526Z diff --git a/libSyntax/libsyntax.cpp b/libSyntax/libsyntax.cpp index 1ef54b8..146aae7 100644 --- a/libSyntax/libsyntax.cpp +++ b/libSyntax/libsyntax.cpp @@ -12,7 +12,7 @@ QList> TokenMatch::children() const { return QLi std::tuple> TokenMatch::match(std::shared_ptr remains_head) const { QString token_seqs = this->token_present(); - if (remains_head && remains_head->define()->name() == define_peer->name()) + if (remains_head && remains_head->define()->typeMark() == define_peer->typeMark()) return std::make_tuple(MatchResult::Success, 1, remains_head->nextToken()); return std::make_tuple(MatchResult::Fail, 0, nullptr); @@ -24,7 +24,7 @@ std::tuple, std::shared_ptr> Toke if (!head) throw std::make_shared(); - if (head->define()->name() == define_peer->name()) { + if (head->define()->typeMark() == define_peer->typeMark()) { rt_inst->currentInst()->addToken(head); return std::make_tuple(nullptr, head->nextToken()); } @@ -33,7 +33,7 @@ std::tuple, std::shared_ptr> Toke } QString TokenMatch::token_present() const { - return QString(u8"<%1>").arg(this->define_peer->name()); + return QString(u8"<%1>").arg(this->define_peer->typeName()); } Rept::Rept(std::shared_ptr rule, int min, int max) : rule_peer(rule), min_match(min), max_match(max) {} diff --git a/libSyntax/syntax_novel.cpp b/libSyntax/syntax_novel.cpp index 7ea6861..242ab2c 100644 --- a/libSyntax/syntax_novel.cpp +++ b/libSyntax/syntax_novel.cpp @@ -12,11 +12,11 @@ auto leftb = std::make_shared(); // { auto rightb = std::make_shared(); // } auto refers = std::make_shared(); // @ -auto story_key = std::make_shared(u8"", u8"story-mark"); // +auto story_key = std::make_shared(u8"", u8"story-mark", 0xAAu); // auto numbers = std::make_shared(); // [0-9]+ -auto frag_key = std::make_shared(u8"", u8"fragment-mark"); // -auto volume_key = std::make_shared(u8"־", u8"volume-mark"); // ־ -auto article_key = std::make_shared(u8"½", u8"article-mark"); // ½ +auto frag_key = std::make_shared(u8"", u8"fragment-mark", 0xABu); // +auto volume_key = std::make_shared(u8"־", u8"volume-mark", 0xACu); // ־ +auto article_key = std::make_shared(u8"½", u8"article-mark", 0xADu); // ½ auto split_mark = std::make_shared(); // & auto vtext = std::make_shared(); // ^([^\\{\\}\\n@&]+) auto name_text = std::make_shared(); // ^([^:\\{\\}\\n@&][^\\{\\}\\n@&]*) @@ -53,7 +53,7 @@ QList> LinesMerge(std::shared_ptrExpressionRule::TokenSeqs { ExpressionRule::TokenSeqs result; for (auto& n : p) { - if (n->define()->name() == newl->name()) + if (n->define()->typeMark() == newl->typeMark()) continue; result.append(n); } diff --git a/libToken/libToken.vcxproj.user b/libToken/libToken.vcxproj.user index 1ac2b50..2a2203b 100644 --- a/libToken/libToken.vcxproj.user +++ b/libToken/libToken.vcxproj.user @@ -2,12 +2,12 @@ - 2024-06-18T15:36:03.8877508Z + 2024-06-19T03:41:22.3229534Z - 2024-06-18T15:36:03.9502420Z + 2024-06-19T03:41:22.3698305Z diff --git a/libToken/libtoken.h b/libToken/libtoken.h index 15d281c..a49e2d4 100644 --- a/libToken/libtoken.h +++ b/libToken/libtoken.h @@ -68,7 +68,13 @@ namespace lib_token { * @brief * @return */ - virtual QString name() const = 0; + virtual QString typeName() const = 0; + /** + * @brief ͱʶ. + * + * \return + */ + virtual int typeMark() const = 0; /** * @brief ƹؼ * @return diff --git a/libToken/tokens_novel.cpp b/libToken/tokens_novel.cpp index a2eac41..dd1cd53 100644 --- a/libToken/tokens_novel.cpp +++ b/libToken/tokens_novel.cpp @@ -3,7 +3,12 @@ using namespace example_novel; using namespace lib_token; -QString LeftBracket::name() const { return u8"left-bracket"; } +QString LeftBracket::typeName() const { return u8"left-bracket"; } + +int example_novel::LeftBracket::typeMark() const +{ + return 0x01000000; +} QString LeftBracket::regex() const { return u8"{"; } @@ -23,17 +28,32 @@ LeftBracket::analysis(std::shared_ptr content) const { return std::make_tuple(token_inst, nullptr); } -QString RightBracket::name() const { return u8"right-bracket"; } +QString RightBracket::typeName() const { return u8"right-bracket"; } + +int example_novel::RightBracket::typeMark() const +{ + return 0x02000000; +} QString RightBracket::regex() const { return u8"}"; } -QString ReferMark::name() const { return u8"refer-mark"; } +QString ReferMark::typeName() const { return u8"refer-mark"; } + +int example_novel::ReferMark::typeMark() const +{ + return 0x03000000; +} QString ReferMark::regex() const { return u8"@"; } -Keywords::Keywords(const QString& val, const QString& nm) : value_store(val), name_store(nm) {} +Keywords::Keywords(const QString& val, const QString& nm, uint type_code) : value_store(val), name_store(nm), type_code(type_code) {} -QString Keywords::name() const { return name_store; } +QString Keywords::typeName() const { return name_store; } + +int example_novel::Keywords::typeMark() const +{ + return 0x06000000 | (0x00ffffff & type_code); +} QString Keywords::regex() const { return value_store; } @@ -47,11 +67,21 @@ Keywords::analysis(std::shared_ptr content) const { return std::make_tuple(token_inst, nullptr); } -QString NewLine::name() const { return u8"new-line"; } +QString NewLine::typeName() const { return u8"new-line"; } + +int example_novel::NewLine::typeMark() const +{ + return 0x04000000; +} QString NewLine::regex() const { return u8"\n"; } -QString Numbers::name() const { return u8"numbers"; } +QString Numbers::typeName() const { return u8"numbers"; } + +int example_novel::Numbers::typeMark() const +{ + return 0x07000000; +} QString Numbers::regex() const { return u8"^([0-9]+)$"; } @@ -66,7 +96,12 @@ Numbers::analysis(std::shared_ptr content) const { return std::make_tuple(tinst, nullptr); } -QString VTextSection::name() const { return u8"text-section"; } +QString VTextSection::typeName() const { return u8"text-section"; } + +int example_novel::VTextSection::typeMark() const +{ + return 0x09000000; +} QString VTextSection::regex() const { return u8"^([^\\{\\}\\n@&]+)"; } @@ -89,11 +124,21 @@ VTextSection::analysis(std::shared_ptr content) const { return std::make_tuple(tinst, nullptr); } -QString Split::name() const { return u8"split-mark"; } +QString Split::typeName() const { return u8"split-mark"; } + +int example_novel::Split::typeMark() const +{ + return 0x05000000; +} QString Split::regex() const { return u8"&"; } -QString NameSection::name() const { return u8"name-section"; } +QString NameSection::typeName() const { return u8"name-section"; } + +int example_novel::NameSection::typeMark() const +{ + return 0x08000000; +} QString NameSection::regex() const { return u8"^([^:\\{\\}\\n@&][^\\{\\}\\n@&]*)"; } diff --git a/libToken/tokens_novel.h b/libToken/tokens_novel.h index 8676a31..06447df 100644 --- a/libToken/tokens_novel.h +++ b/libToken/tokens_novel.h @@ -11,7 +11,8 @@ namespace example_novel { class LIBTOKEN_EXPORT LeftBracket : public lib_token::TokenDefine, public std::enable_shared_from_this { // TokenDefine interface public: - virtual QString name() const override; + virtual QString typeName() const override; + virtual int typeMark() const override; virtual QString regex() const override; virtual std::tuple, std::shared_ptr> analysis(std::shared_ptr content) const override; @@ -19,38 +20,44 @@ namespace example_novel { class LIBTOKEN_EXPORT RightBracket : public LeftBracket { public: - virtual QString name() const override; + virtual QString typeName() const override; + virtual int typeMark() const override; virtual QString regex() const override; }; class LIBTOKEN_EXPORT ReferMark : public LeftBracket { public: - virtual QString name() const override; + virtual QString typeName() const override; + virtual int typeMark() const override; virtual QString regex() const override; }; class LIBTOKEN_EXPORT NewLine : public LeftBracket { public: - virtual QString name() const override; + virtual QString typeName() const override; + virtual int typeMark() const override; virtual QString regex() const override; }; class LIBTOKEN_EXPORT Split : public LeftBracket { public: - virtual QString name() const override; + virtual QString typeName() const override; + virtual int typeMark() const override; virtual QString regex() const override; }; class LIBTOKEN_EXPORT Keywords : public lib_token::TokenDefine, public std::enable_shared_from_this { private: QString value_store, name_store; + int type_code; public: - Keywords(const QString& val, const QString& nm); + Keywords(const QString& val, const QString& nm, uint type_code); // TokenDefine interface public: - virtual QString name() const override; + virtual QString typeName() const override; + virtual int typeMark() const override; virtual QString regex() const override; virtual std::tuple, std::shared_ptr> analysis(std::shared_ptr content) const override; @@ -59,7 +66,8 @@ namespace example_novel { class LIBTOKEN_EXPORT Numbers : public lib_token::TokenDefine, public std::enable_shared_from_this { // TokenDefine interface public: - virtual QString name() const override; + virtual QString typeName() const override; + virtual int typeMark() const override; virtual QString regex() const override; virtual std::tuple, std::shared_ptr> analysis(std::shared_ptr content) const override; @@ -69,7 +77,8 @@ namespace example_novel { class LIBTOKEN_EXPORT NameSection : public lib_token::TokenDefine, public std::enable_shared_from_this { // TokenDefine interface public: - virtual QString name() const override; + virtual QString typeName() const override; + virtual int typeMark() const override; virtual QString regex() const override; virtual std::tuple, std::shared_ptr> analysis(std::shared_ptr content) const override; @@ -78,7 +87,8 @@ namespace example_novel { class LIBTOKEN_EXPORT VTextSection : public lib_token::TokenDefine, public std::enable_shared_from_this { // TokenDefine interface public: - virtual QString name() const override; + virtual QString typeName() const override; + virtual int typeMark() const override; virtual QString regex() const override; virtual std::tuple, std::shared_ptr> analysis(std::shared_ptr content) const override;