Skip to content

Commit c19de0c

Browse files
committed
Refactor syntax tokenizer to simplify future improvements for it.
1 parent 5f365f3 commit c19de0c

File tree

3 files changed

+276
-243
lines changed

3 files changed

+276
-243
lines changed

include/eepp/ui/doc/syntaxdefinition.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ template <typename T> static auto toSyntaxStyleTypeV( const std::vector<T>& s )
2828

2929
enum class SyntaxPatternMatchType { LuaPattern, RegEx, Parser };
3030

31+
class SyntaxDefinition;
32+
3133
struct EE_API SyntaxPattern {
3234
static UnorderedMap<SyntaxStyleType, std::string> SyntaxStyleTypeCache;
3335

@@ -42,6 +44,7 @@ struct EE_API SyntaxPattern {
4244
std::string syntax{ "" };
4345
DynamicSyntax dynSyntax;
4446
SyntaxPatternMatchType matchType{ SyntaxPatternMatchType::LuaPattern };
47+
const SyntaxDefinition* def{ nullptr };
4548

4649
SyntaxPattern( std::vector<std::string>&& _patterns, const std::string& _type,
4750
const std::string& _syntax = "",
@@ -67,6 +70,17 @@ struct EE_API SyntaxPattern {
6770
std::vector<std::string>&& _endTypes, DynamicSyntax&& _syntax,
6871
SyntaxPatternMatchType matchType = SyntaxPatternMatchType::LuaPattern );
6972

73+
bool isIncludePattern() const {
74+
return patterns.size() == 2 && patterns[0] == "include" && !patterns[1].empty() &&
75+
( patterns[1][0] == '#' || patterns[1][0] == '$' );
76+
}
77+
78+
bool isRangedMatch() const { return !isIncludePattern() && patterns.size() >= 2; }
79+
80+
bool isRootSelfInclude() const { return isIncludePattern() && patterns[1] == "$self"; }
81+
82+
bool isRepositoryInclude() const { return isIncludePattern() && patterns[1][0] == '#'; }
83+
7084
bool hasSyntax() const { return !syntax.empty() || dynSyntax; }
7185
};
7286

src/eepp/ui/doc/syntaxdefinition.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@ template <typename SyntaxStyleType> void updateCache( const SyntaxPattern& ptrn
3131
}
3232
}
3333

34+
static void updatePatternRefs( const SyntaxDefinition& def, SyntaxPattern& ptrn ) {
35+
ptrn.def = &def;
36+
if ( ptrn.syntax == "$self" )
37+
ptrn.syntax = def.getLanguageName();
38+
}
39+
40+
static void updatePatternRefs( const SyntaxDefinition& def, std::vector<SyntaxPattern>& ptrns ) {
41+
for ( auto& ptrn : ptrns )
42+
updatePatternRefs( def, ptrn );
43+
}
44+
3445
SyntaxDefinition::SyntaxDefinition() {}
3546

3647
SyntaxDefinition::SyntaxDefinition( const std::string& languageName,
@@ -54,6 +65,7 @@ SyntaxDefinition::SyntaxDefinition( const std::string& languageName,
5465
return pattern.matchType == SyntaxPatternMatchType::Parser;
5566
} ) )
5667
ParserMatcherManager::instance()->registerBaseParsers();
68+
updatePatternRefs( *this, mPatterns );
5769
mPatterns.emplace_back( SyntaxPattern{ { "%s+" }, "normal" } );
5870
mPatterns.emplace_back( SyntaxPattern{ { "%w+%f[%s]" }, "normal" } );
5971
}
@@ -348,6 +360,7 @@ SyntaxPattern::SyntaxPattern( std::vector<std::string>&& _patterns,
348360

349361
SyntaxDefinition& SyntaxDefinition::setRepository( const std::string& name,
350362
std::vector<SyntaxPattern>&& patterns ) {
363+
updatePatternRefs( *this, patterns );
351364
mRepository[name] = std::move( patterns );
352365
return *this;
353366
}

0 commit comments

Comments
 (0)