-module(oaspec@util@string_extra). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/oaspec/util/string_extra.gleam"). -export([new/0, line/2, indent/3, blank_line/1, file_header/1, imports/2, to_string/1, join_with/2, doc_comment/2, doc_comment_indented/3, repeat_char/2]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -file("src/oaspec/util/string_extra.gleam", 10). ?DOC(" Create a new empty string builder.\n"). -spec new() -> gleam@string_tree:string_tree(). new() -> gleam@string_tree:new(). -file("src/oaspec/util/string_extra.gleam", 15). ?DOC(" Append a line to the string builder.\n"). -spec line(gleam@string_tree:string_tree(), binary()) -> gleam@string_tree:string_tree(). line(Sb, Text) -> _pipe = Sb, _pipe@1 = gleam@string_tree:append(_pipe, Text), gleam@string_tree:append(_pipe@1, <<"\n"/utf8>>). -file("src/oaspec/util/string_extra.gleam", 22). ?DOC(" Append an indented line to the string builder.\n"). -spec indent(gleam@string_tree:string_tree(), integer(), binary()) -> gleam@string_tree:string_tree(). indent(Sb, Level, Text) -> Spaces = gleam@string:repeat(<<" "/utf8>>, Level), _pipe = Sb, _pipe@1 = gleam@string_tree:append(_pipe, Spaces), _pipe@2 = gleam@string_tree:append(_pipe@1, Text), gleam@string_tree:append(_pipe@2, <<"\n"/utf8>>). -file("src/oaspec/util/string_extra.gleam", 31). ?DOC(" Append a blank line.\n"). -spec blank_line(gleam@string_tree:string_tree()) -> gleam@string_tree:string_tree(). blank_line(Sb) -> _pipe = Sb, gleam@string_tree:append(_pipe, <<"\n"/utf8>>). -file("src/oaspec/util/string_extra.gleam", 37). ?DOC(" Generate a file header with auto-generation notice.\n"). -spec file_header(binary()) -> gleam@string_tree:string_tree(). file_header(Version) -> _pipe = new(), _pipe@1 = line( _pipe, <<<<"// Code generated by oaspec v"/utf8, Version/binary>>/binary, ". DO NOT EDIT."/utf8>> ), blank_line(_pipe@1). -file("src/oaspec/util/string_extra.gleam", 44). ?DOC(" Generate import statements.\n"). -spec imports(gleam@string_tree:string_tree(), list(binary())) -> gleam@string_tree:string_tree(). imports(Sb, Modules) -> Sb@2 = gleam@list:fold(Modules, Sb, fun(Sb@1, Module) -> _pipe = Sb@1, line(_pipe, <<"import "/utf8, Module/binary>>) end), _pipe@1 = Sb@2, blank_line(_pipe@1). -file("src/oaspec/util/string_extra.gleam", 51). ?DOC(" Convert the string builder to a final string.\n"). -spec to_string(gleam@string_tree:string_tree()) -> binary(). to_string(Sb) -> unicode:characters_to_binary(Sb). -file("src/oaspec/util/string_extra.gleam", 56). ?DOC(" Join a list of strings with a separator.\n"). -spec join_with(list(binary()), binary()) -> binary(). join_with(Items, Separator) -> gleam@string:join(Items, Separator). -file("src/oaspec/util/string_extra.gleam", 61). ?DOC(" Wrap a string in Gleam doc comment style.\n"). -spec doc_comment(gleam@string_tree:string_tree(), binary()) -> gleam@string_tree:string_tree(). doc_comment(Sb, Text) -> case Text of <<""/utf8>> -> Sb; _ -> Lines = gleam@string:split(Text, <<"\n"/utf8>>), gleam@list:fold(Lines, Sb, fun(Sb@1, L) -> _pipe = Sb@1, line(_pipe, <<"/// "/utf8, L/binary>>) end) end. -file("src/oaspec/util/string_extra.gleam", 72). ?DOC(" Wrap a string in Gleam doc comment style with indentation.\n"). -spec doc_comment_indented(gleam@string_tree:string_tree(), integer(), binary()) -> gleam@string_tree:string_tree(). doc_comment_indented(Sb, Level, Text) -> case Text of <<""/utf8>> -> Sb; _ -> Lines = gleam@string:split(Text, <<"\n"/utf8>>), gleam@list:fold(Lines, Sb, fun(Sb@1, L) -> _pipe = Sb@1, indent(_pipe, Level, <<"/// "/utf8, L/binary>>) end) end. -file("src/oaspec/util/string_extra.gleam", 87). ?DOC(" Repeat a character n times\n"). -spec repeat_char(binary(), integer()) -> binary(). repeat_char(Char, N) -> gleam@string:repeat(Char, gleam@int:max(0, N)).