mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 17:10:23 +00:00
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:
parent
39c9319b6d
commit
d2a2d19a86
Notes:
sideshowbarker
2024-07-19 01:37:03 +09:00
Author: https://github.com/linusg Commit: https://github.com/SerenityOS/serenity/commit/d2a2d19a86f Pull-request: https://github.com/SerenityOS/serenity/pull/3886
1 changed files with 1 additions and 14 deletions
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue