summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibSQL
diff options
context:
space:
mode:
authorAli Mohammad Pur <ali.mpfard@gmail.com>2021-06-07 12:03:09 +0430
committerAli Mohammad Pur <Ali.mpfard@gmail.com>2021-06-07 14:45:49 +0430
commit71b4433b0d83714852e882a83808a7d4bbeb6117 (patch)
treede087995b3c2751c0297e05a8f5a9c4fb808d9ca /Userland/Libraries/LibSQL
parent3bac14e19e6bf7df9019b71ff47aa34ab89e516f (diff)
downloadserenity-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.cpp14
-rw-r--r--Userland/Libraries/LibSQL/SyntaxHighlighter.h6
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;
};
}