mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-23 19:42:53 +00:00
48 lines
1.2 KiB
C++
48 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2024, Dan Klishch <danilklishch@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/StringBuilder.h>
|
|
#include <AK/TemporaryChange.h>
|
|
|
|
namespace JSSpecCompiler {
|
|
|
|
class Printer {
|
|
public:
|
|
template<typename Func>
|
|
void block(Func&& func, StringView start = "{"sv, StringView end = "}"sv)
|
|
{
|
|
formatln("{}", start);
|
|
++indent_level;
|
|
func();
|
|
--indent_level;
|
|
format("{}", end);
|
|
}
|
|
|
|
template<typename... Parameters>
|
|
void format(AK::CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters)
|
|
{
|
|
if (builder.string_view().ends_with('\n'))
|
|
builder.append_repeated(' ', indent_level * 4);
|
|
builder.appendff(move(fmtstr), forward<Parameters const&>(parameters)...);
|
|
}
|
|
|
|
template<typename... Parameters>
|
|
void formatln(AK::CheckedFormatString<Parameters...>&& fmtstr, Parameters const&... parameters)
|
|
{
|
|
format(move(fmtstr), forward<Parameters const&>(parameters)...);
|
|
builder.append("\n"sv);
|
|
}
|
|
|
|
StringView view() const { return builder.string_view(); }
|
|
|
|
private:
|
|
StringBuilder builder;
|
|
size_t indent_level = 0;
|
|
};
|
|
|
|
}
|