diff options
author | Ali Mohammad Pur <ali.mpfard@gmail.com> | 2021-06-07 12:03:09 +0430 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2021-06-07 14:45:49 +0430 |
commit | 71b4433b0d83714852e882a83808a7d4bbeb6117 (patch) | |
tree | de087995b3c2751c0297e05a8f5a9c4fb808d9ca /Userland/Libraries/LibSQL | |
parent | 3bac14e19e6bf7df9019b71ff47aa34ab89e516f (diff) | |
download | serenity-71b4433b0d83714852e882a83808a7d4bbeb6117.zip |
LibWeb+LibSyntax: Implement nested syntax highlighters
And use them to highlight javascript in HTML source.
This commit also changes how TextDocumentSpan::data is interpreted,
as it used to be an opaque pointer, but everyone stuffed an enum value
inside it, which made the values not unique to each highlighter;
that field is now a u64 serial id.
The syntax highlighters don't need to change their ways of stuffing
token types into that field, but a highlighter that calls another
nested highlighter needs to register the nested types for use with
token pairs.
Diffstat (limited to 'Userland/Libraries/LibSQL')
-rw-r--r-- | Userland/Libraries/LibSQL/SyntaxHighlighter.cpp | 14 | ||||
-rw-r--r-- | Userland/Libraries/LibSQL/SyntaxHighlighter.h | 6 |
2 files changed, 10 insertions, 10 deletions
diff --git a/Userland/Libraries/LibSQL/SyntaxHighlighter.cpp b/Userland/Libraries/LibSQL/SyntaxHighlighter.cpp index 5d53f4e079..db0b308763 100644 --- a/Userland/Libraries/LibSQL/SyntaxHighlighter.cpp +++ b/Userland/Libraries/LibSQL/SyntaxHighlighter.cpp @@ -33,9 +33,9 @@ static Syntax::TextStyle style_for_token_type(Gfx::Palette const& palette, Token } } -bool SyntaxHighlighter::is_identifier(void* token) const +bool SyntaxHighlighter::is_identifier(u64 token) const { - auto sql_token = static_cast<SQL::TokenType>(reinterpret_cast<size_t>(token)); + auto sql_token = static_cast<SQL::TokenType>(static_cast<size_t>(token)); return sql_token == SQL::TokenType::Identifier; } @@ -66,7 +66,7 @@ void SyntaxHighlighter::rehighlight(Palette const& palette) auto style = style_for_token_type(palette, token.type()); span.attributes.color = style.color; span.attributes.bold = style.bold; - span.data = reinterpret_cast<void*>(static_cast<size_t>(token.type())); + span.data = static_cast<u64>(token.type()); spans.append(span); dbgln_if(SYNTAX_HIGHLIGHTING_DEBUG, "{} @ '{}' {}:{} - {}:{}", @@ -91,18 +91,18 @@ void SyntaxHighlighter::rehighlight(Palette const& palette) m_client->do_update(); } -Vector<SyntaxHighlighter::MatchingTokenPair> SyntaxHighlighter::matching_token_pairs() const +Vector<SyntaxHighlighter::MatchingTokenPair> SyntaxHighlighter::matching_token_pairs_impl() const { static Vector<SyntaxHighlighter::MatchingTokenPair> pairs; if (pairs.is_empty()) { - pairs.append({ reinterpret_cast<void*>(TokenType::ParenOpen), reinterpret_cast<void*>(TokenType::ParenClose) }); + pairs.append({ static_cast<u64>(TokenType::ParenOpen), static_cast<u64>(TokenType::ParenClose) }); } return pairs; } -bool SyntaxHighlighter::token_types_equal(void* token1, void* token2) const +bool SyntaxHighlighter::token_types_equal(u64 token1, u64 token2) const { - return static_cast<TokenType>(reinterpret_cast<size_t>(token1)) == static_cast<TokenType>(reinterpret_cast<size_t>(token2)); + return static_cast<TokenType>(token1) == static_cast<TokenType>(token2); } SyntaxHighlighter::~SyntaxHighlighter() diff --git a/Userland/Libraries/LibSQL/SyntaxHighlighter.h b/Userland/Libraries/LibSQL/SyntaxHighlighter.h index a5fa012aa3..b8f17b8527 100644 --- a/Userland/Libraries/LibSQL/SyntaxHighlighter.h +++ b/Userland/Libraries/LibSQL/SyntaxHighlighter.h @@ -15,14 +15,14 @@ public: SyntaxHighlighter() { } virtual ~SyntaxHighlighter() override; - virtual bool is_identifier(void*) const override; + virtual bool is_identifier(u64) const override; virtual Syntax::Language language() const override { return Syntax::Language::SQL; } virtual void rehighlight(Palette const&) override; protected: - virtual Vector<MatchingTokenPair> matching_token_pairs() const override; - virtual bool token_types_equal(void*, void*) const override; + virtual Vector<MatchingTokenPair> matching_token_pairs_impl() const override; + virtual bool token_types_equal(u64, u64) const override; }; } |