LibJS: Handle multi-line source code in MarkupGenerator

The previous approach (keeping track of the current source position
manually) was only working for single line sources (which is fair
considering this was developed for Browser's JS console).
The new approach is much simpler: append token trivia (all whitespace
and comments since the last token), then append styled token value.
This commit is contained in:
Linus Groh 2020-10-31 17:25:29 +00:00 committed by Andreas Kling
parent 39c9319b6d
commit d2a2d19a86
Notes: sideshowbarker 2024-07-19 01:37:03 +09:00

View file

@ -38,24 +38,11 @@ namespace JS {
String MarkupGenerator::html_from_source(const StringView& source)
{
StringBuilder builder;
size_t source_cursor = 0;
auto lexer = Lexer(source);
for (auto token = lexer.next(); token.type() != TokenType::Eof; token = lexer.next()) {
auto length = token.value().length();
auto start = token.line_column() - 1;
if (start > source_cursor) {
builder.append(source.substring_view(source_cursor, start - source_cursor));
}
builder.append(token.trivia());
builder.append(wrap_string_in_style(token.value(), style_type_for_token(token)));
source_cursor = start + length;
}
if (source_cursor < source.length())
builder.append(source.substring_view(source_cursor, source.length() - source_cursor));
return builder.to_string();
}