-module(xmlm). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/xmlm.gleam"). -export([uchar_utf8/1, name_to_string/1, attribute_to_string/1, attributes_to_string/1, tag_to_string/1, signal_to_string/1, signals_to_string/1, input_error_to_string/1, input_stream_from_bit_array/1, input_to_string/1, with_encoding/2, with_stripping/2, with_namespace_callback/2, with_entity_callback/2, from_bit_array/1, from_string/1, eoi/1, peek/1, signal/1, signals/1, fold_signals/3, tree/3, document_tree/3]). -export_type([unicode_lexer_error/0, encoding/0, name/0, attribute/0, tag/0, signal/0, position/0, internal_input_error/0, input_error/0, limit/0, input/0, loop_done/0, stop_or_go/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC( " For usage examples and strategies for working with this library, check out \n" " the programs located in the `test/examples` directory.\n" " \n" " ## Notes\n" " \n" " - Don't forget to work with the `Input` that is returned by any \n" " \"inputting\" function rather than the original.\n" " - If something is marked as being \"unspecified\", do not depend on it. \n" " It may change at any time without a major version bump. This mainly \n" " applies to the various `*_to_string` functions.\n" "\n" ). -type unicode_lexer_error() :: unicode_lexer_eoi | unicode_lexer_malformed. -type encoding() :: utf8 | utf16 | utf16_be | utf16_le | iso8859x1 | iso8859x15 | us_ascii. -type name() :: {name, binary(), binary()}. -type attribute() :: {attribute, name(), binary()}. -type tag() :: {tag, name(), list(attribute())}. -type signal() :: {dtd, gleam@option:option(binary())} | {element_start, tag()} | element_end | {data, binary()}. -type position() :: {position, integer(), integer()}. -type internal_input_error() :: {expected_char_seqs, list(binary()), binary()} | expected_root_element | {illegal_char_ref, binary()} | {illegal_char_seq, binary()} | malformed_char_stream | max_buffer_size | unexpected_eoi | {unknown_encoding, binary()} | {unknown_entity_ref, binary()} | {unknown_ns_prefix, binary()} | unicode_lexer_error_eoi | unicode_lexer_error_malformed | {invalid_argument, binary()}. -opaque input_error() :: {input_error, position(), internal_input_error()}. -type limit() :: {limit_start_tag, name()} | {limit_end_tag, name()} | {limit_pi, name()} | limit_comment | limit_c_data | limit_dtd | limit_text | limit_eoi. -opaque input() :: {input, gleam@option:option(encoding()), boolean(), fun((binary()) -> gleam@option:option(binary())), fun((binary()) -> gleam@option:option(binary())), fun((input()) -> {ok, {integer(), input()}} | {error, input_error()}), list(integer()), integer(), boolean(), integer(), integer(), limit(), signal(), boolean(), boolean(), list({name(), list(binary()), boolean()}), gleam@dict:dict(binary(), binary()), list(integer()), list(integer())}. -type loop_done() :: {loop_done_exited, {integer(), input()}} | {loop_done_by_condition, {integer(), input()}}. -type stop_or_go() :: go | stop. -file("src/xmlm.gleam", 177). -spec uchar_byte(list(integer())) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}. uchar_byte(Stream) -> case Stream of [Byte | Rest] -> {ok, {Byte, Rest}}; [] -> {error, unicode_lexer_eoi} end. -file("src/xmlm.gleam", 190). -spec uchar_iso_8859_1(list(integer())) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}. uchar_iso_8859_1(Stream) -> case Stream of [Byte | Rest] -> {ok, {Byte, Rest}}; [] -> {error, unicode_lexer_eoi} end. -file("src/xmlm.gleam", 204). -spec uchar_iso_8859_15(list(integer())) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}. uchar_iso_8859_15(Stream) -> case Stream of [16#00A4 | Rest] -> {ok, {16#20AC, Rest}}; [16#00A6 | Rest@1] -> {ok, {16#0160, Rest@1}}; [16#00A8 | Rest@2] -> {ok, {16#0161, Rest@2}}; [16#00B4 | Rest@3] -> {ok, {16#017D, Rest@3}}; [16#00B8 | Rest@4] -> {ok, {16#017E, Rest@4}}; [16#00BC | Rest@5] -> {ok, {16#0152, Rest@5}}; [16#00BD | Rest@6] -> {ok, {16#0153, Rest@6}}; [16#00BE | Rest@7] -> {ok, {16#0178, Rest@7}}; [Char | Rest@8] -> {ok, {Char, Rest@8}}; [] -> {error, unicode_lexer_eoi} end. -file("src/xmlm.gleam", 379). ?DOC(" Are the most significant bits of an 8 bit int NOT `10`?\n"). -spec most_significant_bytes_are_not_10(integer()) -> boolean(). most_significant_bytes_are_not_10(N) -> erlang:'band'(N, 2#11000000) /= 2#10000000. -file("src/xmlm.gleam", 254). -spec do_uchar_utf8_len2(list(integer()), integer()) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}. do_uchar_utf8_len2(Stream, Byte0) -> case Stream of [Byte1 | Stream@1] -> case begin _pipe = Byte1, most_significant_bytes_are_not_10(_pipe) end of true -> {error, unicode_lexer_malformed}; false -> Result = begin _pipe@1 = erlang:'band'(Byte0, 16#1F), _pipe@2 = erlang:'bsl'(_pipe@1, 6), erlang:'bor'(_pipe@2, erlang:'band'(Byte1, 16#3F)) end, {ok, {Result, Stream@1}} end; [] -> {error, unicode_lexer_eoi} end. -file("src/xmlm.gleam", 276). -spec do_uchar_utf8_len3(list(integer()), integer()) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}. do_uchar_utf8_len3(Stream, Byte0) -> case Stream of [Byte1, Byte2 | Stream@1] -> case begin _pipe = Byte2, most_significant_bytes_are_not_10(_pipe) end of true -> {error, unicode_lexer_malformed}; false -> case (Byte0 =:= 16#E0) andalso ((Byte1 < 16#A0) orelse (16#BF < Byte1)) of true -> {error, unicode_lexer_malformed}; false -> case (Byte0 =:= 16#ED) andalso ((Byte1 < 16#80) orelse (16#9F < Byte1)) of true -> {error, unicode_lexer_malformed}; false -> case begin _pipe@1 = Byte1, most_significant_bytes_are_not_10( _pipe@1 ) end of true -> {error, unicode_lexer_malformed}; false -> B0 = begin _pipe@2 = Byte0, _pipe@3 = erlang:'band'( _pipe@2, 16#0F ), erlang:'bsl'(_pipe@3, 12) end, B1 = begin _pipe@4 = Byte1, _pipe@5 = erlang:'band'( _pipe@4, 16#3F ), erlang:'bsl'(_pipe@5, 6) end, B2 = begin _pipe@6 = Byte2, erlang:'band'(_pipe@6, 16#3F) end, Result = begin _pipe@7 = B0, _pipe@8 = erlang:'bor'( _pipe@7, B1 ), erlang:'bor'(_pipe@8, B2) end, {ok, {Result, Stream@1}} end end end end; [] -> {error, unicode_lexer_eoi}; _ -> {error, unicode_lexer_malformed} end. -file("src/xmlm.gleam", 322). -spec do_uchar_utf8_len4(list(integer()), integer()) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}. do_uchar_utf8_len4(Stream, Byte0) -> case Stream of [Byte1, Byte2, Byte3 | Stream@1] -> case most_significant_bytes_are_not_10(Byte3) orelse most_significant_bytes_are_not_10( Byte2 ) of true -> {error, unicode_lexer_malformed}; false -> case (Byte0 =:= 16#F0) andalso ((Byte1 < 16#90) orelse (16#BF < Byte1)) of true -> {error, unicode_lexer_malformed}; false -> case (Byte0 =:= 16#F4) andalso ((Byte1 < 16#80) orelse (16#8F < Byte1)) of true -> {error, unicode_lexer_malformed}; false -> case begin _pipe = Byte1, most_significant_bytes_are_not_10(_pipe) end of true -> {error, unicode_lexer_malformed}; false -> B0 = begin _pipe@1 = Byte0, _pipe@2 = erlang:'band'( _pipe@1, 16#07 ), erlang:'bsl'(_pipe@2, 18) end, B1 = begin _pipe@3 = Byte1, _pipe@4 = erlang:'band'( _pipe@3, 16#3F ), erlang:'bsl'(_pipe@4, 12) end, B2 = begin _pipe@5 = Byte2, _pipe@6 = erlang:'band'( _pipe@5, 16#3F ), erlang:'bsl'(_pipe@6, 6) end, B3 = begin _pipe@7 = Byte3, erlang:'band'(_pipe@7, 16#3F) end, Result = begin _pipe@8 = B0, _pipe@9 = erlang:'bor'( _pipe@8, B1 ), _pipe@10 = erlang:'bor'( _pipe@9, B2 ), erlang:'bor'(_pipe@10, B3) end, {ok, {Result, Stream@1}} end end end end; [] -> {error, unicode_lexer_eoi}; _ -> {error, unicode_lexer_malformed} end. -file("src/xmlm.gleam", 236). ?DOC(false). -spec uchar_utf8(list(integer())) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}. uchar_utf8(Stream) -> case Stream of [Byte0 | Bytes] -> case Byte0 of N when (0 =< N) andalso (N =< 127) -> {ok, {Byte0, Bytes}}; N@1 when (128 =< N@1) andalso (N@1 =< 193) -> {error, unicode_lexer_malformed}; N@2 when (194 =< N@2) andalso (N@2 =< 223) -> do_uchar_utf8_len2(Bytes, Byte0); N@3 when (224 =< N@3) andalso (N@3 =< 239) -> do_uchar_utf8_len3(Bytes, Byte0); N@4 when (240 =< N@4) andalso (N@4 =< 244) -> do_uchar_utf8_len4(Bytes, Byte0); _ -> {error, unicode_lexer_malformed} end; [] -> {error, unicode_lexer_eoi} end. -file("src/xmlm.gleam", 389). -spec int16_be(list(integer())) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}. int16_be(Stream) -> case Stream of [Byte0, Byte1 | Stream@1] -> Char = begin _pipe = Byte0, _pipe@1 = erlang:'bsl'(_pipe, 8), erlang:'bor'(_pipe@1, Byte1) end, {ok, {Char, Stream@1}}; [] -> {error, unicode_lexer_eoi}; _ -> {error, unicode_lexer_malformed} end. -file("src/xmlm.gleam", 402). -spec int16_le(list(integer())) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}. int16_le(Stream) -> case Stream of [Byte0, Byte1 | Stream@1] -> Char = begin _pipe = Byte1, _pipe@1 = erlang:'bsl'(_pipe, 8), erlang:'bor'(_pipe@1, Byte0) end, {ok, {Char, Stream@1}}; [] -> {error, unicode_lexer_eoi}; _ -> {error, unicode_lexer_malformed} end. -file("src/xmlm.gleam", 415). -spec uchar_utf16( fun((list(integer())) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}) ) -> fun((list(integer())) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}). uchar_utf16(Int16) -> fun(Stream) -> case Int16(Stream) of {error, E} -> {error, E}; {ok, {Char0, Stream@1}} -> case Char0 of Char0@1 when (Char0@1 < 16#D800) orelse (Char0@1 > 16#DFFF) -> {ok, {Char0@1, Stream@1}}; Char0@2 when Char0@2 > 16#DBFF -> {error, unicode_lexer_malformed}; Char0@3 -> case Int16(Stream@1) of {error, E@1} -> {error, E@1}; {ok, {Char1, Stream@2}} -> Char = erlang:'bor'( erlang:'bsl'( erlang:'band'(Char0@3, 16#3FF), 10 ), erlang:'band'(Char1, 16#3FF) ) + 16#10000, {ok, {Char, Stream@2}} end end end end. -file("src/xmlm.gleam", 458). -spec uchar_ascii(list(integer())) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}. uchar_ascii(Stream) -> case Stream of [Byte | Rest] when Byte =< 127 -> {ok, {Byte, Rest}}; [] -> {error, unicode_lexer_eoi}; _ -> {error, unicode_lexer_malformed} end. -file("src/xmlm.gleam", 539). ?DOC(" Convert `name` into an unspecified string representation.\n"). -spec name_to_string(name()) -> binary(). name_to_string(Name) -> {name, Uri, Local} = Name, case Uri of <<""/utf8>> -> gleam@string:inspect(Local); Uri@1 -> gleam@string:inspect( <<<>/binary, Local/binary>> ) end. -file("src/xmlm.gleam", 569). ?DOC(" Convert `attribute` into an unspecified string representation.\n"). -spec attribute_to_string(attribute()) -> binary(). attribute_to_string(Attribute) -> <<<<<<<<"Attribute(name: "/utf8, (name_to_string(erlang:element(2, Attribute)))/binary>>/binary, ", value: "/utf8>>/binary, (gleam@string:inspect(erlang:element(3, Attribute)))/binary>>/binary, ")"/utf8>>. -file("src/xmlm.gleam", 579). ?DOC(" Convert `attributes` into an unspecified string representation.\n"). -spec attributes_to_string(list(attribute())) -> binary(). attributes_to_string(Attributes) -> case Attributes of [] -> <<"[]"/utf8>>; Attributes@1 -> <<<<"["/utf8, (gleam@string:join( gleam@list:map(Attributes@1, fun attribute_to_string/1), <<", "/utf8>> ))/binary>>/binary, "]"/utf8>> end. -file("src/xmlm.gleam", 602). ?DOC(" Convert `tag` into an unspecified string representation.\n"). -spec tag_to_string(tag()) -> binary(). tag_to_string(Tag) -> <<<<<<<<"Tag(name: "/utf8, (name_to_string(erlang:element(2, Tag)))/binary>>/binary, ", attributes: "/utf8>>/binary, (attributes_to_string(erlang:element(3, Tag)))/binary>>/binary, ")"/utf8>>. -file("src/xmlm.gleam", 637). ?DOC(" Convert `signal` into an unspecified string representation.\n"). -spec signal_to_string(signal()) -> binary(). signal_to_string(Signal) -> case Signal of {dtd, {some, Data}} -> <<<<"Dtd("/utf8, Data/binary>>/binary, ")"/utf8>>; {dtd, none} -> <<"Dtd(None)"/utf8>>; {element_start, Tag} -> <<<<"ElementStart("/utf8, (tag_to_string(Tag))/binary>>/binary, ")"/utf8>>; element_end -> <<"ElementEnd"/utf8>>; {data, Data@1} -> <<<<"Data("/utf8, (gleam@string:inspect(Data@1))/binary>>/binary, ")"/utf8>> end. -file("src/xmlm.gleam", 649). ?DOC(" Convert `signals` into an unspecified string representation.\n"). -spec signals_to_string(list(signal())) -> binary(). signals_to_string(Signals) -> gleam@string:join( gleam@list:map(Signals, fun signal_to_string/1), <<"\n"/utf8>> ). -file("src/xmlm.gleam", 653). -spec signal_start_stream() -> signal(). signal_start_stream() -> {data, <<""/utf8>>}. -file("src/xmlm.gleam", 669). ?DOC(" Convert `position` into an unspecified string representation.\n"). -spec position_to_string(position()) -> binary(). position_to_string(Position) -> <<<<<<<<"Position(line: "/utf8, (erlang:integer_to_binary(erlang:element(2, Position)))/binary>>/binary, ", column: "/utf8>>/binary, (erlang:integer_to_binary(erlang:element(3, Position)))/binary>>/binary, ")"/utf8>>. -file("src/xmlm.gleam", 695). -spec internal_input_error_from_unicode_lexer_error(unicode_lexer_error()) -> internal_input_error(). internal_input_error_from_unicode_lexer_error(Unicode_lexer_error) -> case Unicode_lexer_error of unicode_lexer_eoi -> unicode_lexer_error_eoi; unicode_lexer_malformed -> unicode_lexer_error_malformed end. -file("src/xmlm.gleam", 704). -spec internal_error_message(internal_input_error()) -> binary(). internal_error_message(Input_error) -> Bracket = fun(L, V, R) -> <<<>/binary, R/binary>> end, case Input_error of {expected_char_seqs, Expected, Actual} -> Expected@1 = gleam@list:fold( Expected, <<""/utf8>>, fun(Acc, V@1) -> <>, V@1, <<"\", "/utf8>>))/binary>> end ), <<<<<<<<"expected one of these character sequence: "/utf8, Expected@1/binary>>/binary, "found \""/utf8>>/binary, Actual/binary>>/binary, "\""/utf8>>; expected_root_element -> <<"expected root element"/utf8>>; {illegal_char_ref, Msg} -> Bracket( <<"illegal character reference (#"/utf8>>, Msg, <<")"/utf8>> ); {illegal_char_seq, Msg@1} -> Bracket( <<"character sequence illegal here (\""/utf8>>, Msg@1, <<"\")"/utf8>> ); malformed_char_stream -> <<"malformed character stream"/utf8>>; max_buffer_size -> <<"maximal buffer size exceeded"/utf8>>; unexpected_eoi -> <<"unexpected end of input"/utf8>>; {unknown_encoding, Msg@2} -> Bracket(<<"unknown encoding ("/utf8>>, Msg@2, <<")"/utf8>>); {unknown_entity_ref, Msg@3} -> Bracket(<<"unknown entity reference ("/utf8>>, Msg@3, <<")"/utf8>>); {unknown_ns_prefix, Msg@4} -> Bracket(<<"unknown namespace prefix ("/utf8>>, Msg@4, <<")"/utf8>>); unicode_lexer_error_eoi -> <<"unicode lexer error eoi"/utf8>>; unicode_lexer_error_malformed -> <<"unicode lexer error malformed"/utf8>>; {invalid_argument, Msg@5} -> Bracket(<<"invalid argument ("/utf8>>, Msg@5, <<")"/utf8>>) end. -file("src/xmlm.gleam", 743). -spec input_error_new(input(), internal_input_error()) -> input_error(). input_error_new(Input, Input_error) -> {input_error, {position, erlang:element(10, Input), erlang:element(11, Input)}, Input_error}. -file("src/xmlm.gleam", 154). -spec make_input_uchar( fun((list(integer())) -> {ok, {integer(), list(integer())}} | {error, unicode_lexer_error()}) ) -> fun((input()) -> {ok, {integer(), input()}} | {error, input_error()}). make_input_uchar(Uchar_lexer) -> fun(Input) -> case Uchar_lexer(erlang:element(7, Input)) of {error, E} -> {error, input_error_new( Input, internal_input_error_from_unicode_lexer_error(E) )}; {ok, {Uchar, Stream}} -> Input@1 = {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), Stream, erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), erlang:element(19, Input)}, {ok, {Uchar, Input@1}} end end. -file("src/xmlm.gleam", 173). ?DOC(" Gets the next uchar byte advancing any needed internal state.\n"). -spec input_uchar_byte() -> fun((input()) -> {ok, {integer(), input()}} | {error, input_error()}). input_uchar_byte() -> make_input_uchar(fun uchar_byte/1). -file("src/xmlm.gleam", 186). -spec input_uchar_iso_8859_1() -> fun((input()) -> {ok, {integer(), input()}} | {error, input_error()}). input_uchar_iso_8859_1() -> make_input_uchar(fun uchar_iso_8859_1/1). -file("src/xmlm.gleam", 199). -spec input_uchar_iso_8859_15() -> fun((input()) -> {ok, {integer(), input()}} | {error, input_error()}). input_uchar_iso_8859_15() -> make_input_uchar(fun uchar_iso_8859_15/1). -file("src/xmlm.gleam", 231). -spec input_uchar_utf8() -> fun((input()) -> {ok, {integer(), input()}} | {error, input_error()}). input_uchar_utf8() -> make_input_uchar(fun uchar_utf8/1). -file("src/xmlm.gleam", 446). -spec input_uchar_utf16be() -> fun((input()) -> {ok, {integer(), input()}} | {error, input_error()}). input_uchar_utf16be() -> make_input_uchar(uchar_utf16(fun int16_be/1)). -file("src/xmlm.gleam", 450). -spec input_uchar_utf16le() -> fun((input()) -> {ok, {integer(), input()}} | {error, input_error()}). input_uchar_utf16le() -> make_input_uchar(uchar_utf16(fun int16_le/1)). -file("src/xmlm.gleam", 454). -spec input_uchar_ascii() -> fun((input()) -> {ok, {integer(), input()}} | {error, input_error()}). input_uchar_ascii() -> make_input_uchar(fun uchar_ascii/1). -file("src/xmlm.gleam", 749). ?DOC(" Converts the `input_error` into a non-specified human readable format.\n"). -spec input_error_to_string(input_error()) -> binary(). input_error_to_string(Input_error) -> {input_error, Position, Input_error@1} = Input_error, <<<<<<"ERROR "/utf8, (position_to_string(Position))/binary>>/binary, " "/utf8>>/binary, (internal_error_message(Input_error@1))/binary>>. -file("src/xmlm.gleam", 784). ?DOC(false). -spec input_stream_from_bit_array(bitstring()) -> list(integer()). input_stream_from_bit_array(Bit_array) -> xmlm_ffi:bit_array_to_list(Bit_array). -file("src/xmlm.gleam", 831). ?DOC(" Convert `input` into an unspecified string representation.\n"). -spec input_to_string(input()) -> binary(). input_to_string(Input) -> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"Input(\n\tencoding: "/utf8, (gleam@string:inspect( erlang:element( 2, Input ) ))/binary>>/binary, "\n\tstrip: "/utf8>>/binary, (gleam@string:inspect( erlang:element( 3, Input ) ))/binary>>/binary, "\n\tstream: "/utf8>>/binary, (gleam@string:inspect( erlang:element( 7, Input ) ))/binary>>/binary, "\n\tchar: "/utf8>>/binary, (gleam@string:inspect( erlang:element( 8, Input ) ))/binary>>/binary, "\n\tcr: "/utf8>>/binary, (gleam@string:inspect( erlang:element( 9, Input ) ))/binary>>/binary, "\n\tline: "/utf8>>/binary, (gleam@string:inspect( erlang:element( 10, Input ) ))/binary>>/binary, "\n\tcolumn: "/utf8>>/binary, (gleam@string:inspect( erlang:element( 11, Input ) ))/binary>>/binary, "\n\tlimit: "/utf8>>/binary, (gleam@string:inspect( erlang:element( 12, Input ) ))/binary>>/binary, "\n\tpeek: "/utf8>>/binary, (gleam@string:inspect( erlang:element( 13, Input ) ))/binary>>/binary, "\n\tstripping: "/utf8>>/binary, (gleam@string:inspect( erlang:element( 14, Input ) ))/binary>>/binary, "\n\tlast_whitespace: "/utf8>>/binary, (gleam@string:inspect( erlang:element(15, Input) ))/binary>>/binary, "\n\tscopes: "/utf8>>/binary, (gleam@string:inspect( erlang:element(16, Input) ))/binary>>/binary, "\n\tns: "/utf8>>/binary, (gleam@string:inspect(erlang:element(17, Input)))/binary>>/binary, "\n\tidentifier: "/utf8>>/binary, (gleam@string:inspect(erlang:element(18, Input)))/binary>>/binary, "\n\tdata: "/utf8>>/binary, (gleam@string:inspect(erlang:element(19, Input)))/binary>>/binary, "\n)"/utf8>>. -file("src/xmlm.gleam", 865). -spec error(input(), internal_input_error()) -> {ok, any()} | {error, input_error()}. error(Input, Err) -> {error, {input_error, {position, erlang:element(10, Input), erlang:element(11, Input)}, Err}}. -file("src/xmlm.gleam", 873). -spec error_expected_seqs(input(), list(binary()), binary()) -> {ok, any()} | {error, input_error()}. error_expected_seqs(Input, Expected, Actual) -> error(Input, {expected_char_seqs, Expected, Actual}). -file("src/xmlm.gleam", 930). ?DOC(" `xmlm.with_encoding(input)` sets the `input` to use the given `encoding`.\n"). -spec with_encoding(input(), encoding()) -> input(). with_encoding(Input, Encoding) -> {input, {some, Encoding}, erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), erlang:element(19, Input)}. -file("src/xmlm.gleam", 937). ?DOC( " `xmlm.with_stripping(input, stripping)` sets the `input` to use the given\n" " `stripping`.\n" ). -spec with_stripping(input(), boolean()) -> input(). with_stripping(Input, Stripping) -> {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), Stripping, erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), erlang:element(19, Input)}. -file("src/xmlm.gleam", 980). ?DOC( " `xmlm.with_namespace_callback(input, namespace_callback)` sets the `input` \n" " to use the given `namespace_callback` to bind undeclared namespace prefixes.\n" " \n" " ## Example\n" " \n" " Imagine an XML document something like this, that specifies a namespace.\n" " \n" " ```xml\n" " \n" " \n" " \n" " ```\n" " \n" " This will parse Ok because the namespace is properly declared. \n" " \n" " However, the following XML document would give an error, telling you about \n" " the unknown namespace prefix `snazzy`.\n" " \n" " ```xml\n" " \n" " \n" " \n" " ```\n" " \n" " To address this, you may provide a function to bind undeclared namespace \n" " prefixes.\n" " \n" " ```gleam\n" " xmlm.from_string(xml_data)\n" " |> xmlm.with_namespace_callback(fn(prefix) {\n" " case prefix {\n" " \"snazzy\" -> Some(\"https://www.example.com/snazzy\")\n" " _ -> None\n" " }\n" " })\n" " ```\n" " \n" " In this way, the `snazzy` prefix will be bound and no error will occur.\n" ). -spec with_namespace_callback( input(), fun((binary()) -> gleam@option:option(binary())) ) -> input(). with_namespace_callback(Input, Namespace_callback) -> {input, erlang:element(2, Input), erlang:element(3, Input), Namespace_callback, erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), erlang:element(19, Input)}. -file("src/xmlm.gleam", 1020). ?DOC( " `xmlm.with_entity_callback(input, namespace_callback)` sets the `input` to \n" " use the given `entity_callback` to resolve non-predefined entity references.\n" " \n" " ## Example\n" " \n" " Imagine an XML document that looks something like this:\n" " \n" " ```xml\n" "

&apple; &pie;

\n" " ```\n" " \n" " It has non-predifined entity references, and so when parsing, it will give \n" " an error. To address this, we could use an entity callback function to \n" " resolve these references.\n" " \n" " ```gleam\n" " xmlm.from_string(xml_data)\n" " |> xmlm.with_entity_callback(fn(entity_reference) {\n" " case entity_reference {\n" " \"apple\" -> Some(\"APPLE!\")\n" " \"pie\" -> Some(\"PIE!\")\n" " _ -> None\n" " }\n" " })\n" " ```\n" " \n" " With that entity callback, the parsed `Data` signal would look something \n" " like this:\n" " \n" " ```gleam\n" " Data(\"APPLE! PIE!\")\n" " ```\n" ). -spec with_entity_callback( input(), fun((binary()) -> gleam@option:option(binary())) ) -> input(). with_entity_callback(Input, Entity_callback) -> {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), Entity_callback, erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), erlang:element(19, Input)}. -file("src/xmlm.gleam", 1036). ?DOC(" Checks if `uchar` is in the inclusive range `[from, to]`.\n"). -spec is_in_range(integer(), integer(), integer()) -> boolean(). is_in_range(Uchar, Low, High) -> (Low =< Uchar) andalso (Uchar =< High). -file("src/xmlm.gleam", 1040). -spec is_whitespace(integer()) -> boolean(). is_whitespace(Int) -> case Int of 16#0020 -> true; 16#0009 -> true; 16#000D -> true; 16#000A -> true; _ -> false end. -file("src/xmlm.gleam", 1048). ?DOC(" XML 1.0 non-terminal: {Char}\n"). -spec is_char(integer()) -> boolean(). is_char(Uchar) -> case Uchar of Uchar@1 when (16#0020 =< Uchar@1) andalso (Uchar@1 =< 16#D7FF) -> true; 16#0009 -> true; 16#000A -> true; 16#000D -> true; Uchar@2 when (16#E000 =< Uchar@2) andalso (Uchar@2 =< 16#FFFD) -> true; Uchar@3 when (16#10000 =< Uchar@3) andalso (Uchar@3 =< 16#10FFFF) -> true; _ -> false end. -file("src/xmlm.gleam", 1058). -spec is_digit(integer()) -> boolean(). is_digit(Uchar) -> _pipe = Uchar, is_in_range(_pipe, 16#0030, 16#0039). -file("src/xmlm.gleam", 1062). -spec is_hex_digit(integer()) -> boolean(). is_hex_digit(Uchar) -> (is_in_range(Uchar, 16#0030, 16#0039) orelse is_in_range( Uchar, 16#0041, 16#0046 )) orelse is_in_range(Uchar, 16#0061, 16#0066). -file("src/xmlm.gleam", 1069). -spec is_common_range(integer()) -> boolean(). is_common_range(Uchar) -> ((((((((((is_in_range(Uchar, 16#00C0, 16#00D6) orelse is_in_range( Uchar, 16#00D8, 16#00F6 )) orelse is_in_range(Uchar, 16#00F8, 16#02FF)) orelse is_in_range(Uchar, 16#0370, 16#037D)) orelse is_in_range(Uchar, 16#037F, 16#1FFF)) orelse is_in_range(Uchar, 16#200C, 16#200D)) orelse is_in_range(Uchar, 16#2070, 16#218F)) orelse is_in_range(Uchar, 16#2C00, 16#2FEF)) orelse is_in_range(Uchar, 16#3001, 16#D7FF)) orelse is_in_range(Uchar, 16#F900, 16#FDCF)) orelse is_in_range(Uchar, 16#FDF0, 16#FFFD)) orelse is_in_range(Uchar, 16#10000, 16#EFFFF). -file("src/xmlm.gleam", 1085). ?DOC(" XML 1.1 non-terminal: {NameStartChar} - ':'\n"). -spec is_name_start_char(integer()) -> boolean(). is_name_start_char(Uchar) -> not is_whitespace(Uchar) andalso (((is_in_range(Uchar, 16#0061, 16#007A) orelse is_in_range(Uchar, 16#0041, 16#005A)) orelse (Uchar =:= 16#005F)) orelse is_common_range(Uchar)). -file("src/xmlm.gleam", 1101). ?DOC(" XML 1.1 non-terminal: {NameChar} - ':'\n"). -spec is_name_char(integer()) -> boolean(). is_name_char(Uchar) -> not is_whitespace(Uchar) andalso (((((((((is_in_range( Uchar, 16#0061, 16#007A ) orelse is_in_range(Uchar, 16#0041, 16#005A)) orelse is_in_range(Uchar, 16#0030, 16#0039)) orelse (Uchar =:= 16#005F)) orelse (Uchar =:= 16#002D)) orelse (Uchar =:= 16#002E)) orelse (Uchar =:= 16#00B7)) orelse is_common_range(Uchar)) orelse is_in_range(Uchar, 16#0300, 16#036F)) orelse is_in_range(Uchar, 16#203F, 16#2040)). -file("src/xmlm.gleam", 1244). -spec expand_name(input(), name()) -> {ok, name()} | {error, input_error()}. expand_name(Input, Name) -> {name, Prefix, Local} = Name, External_ = fun(Prefix@1) -> case (erlang:element(4, Input))(Prefix@1) of none -> error(Input, {unknown_ns_prefix, Prefix@1}); {some, Uri} -> {ok, Uri} end end, case gleam_stdlib:map_get(erlang:element(17, Input), Prefix) of {ok, Uri@1} -> case not gleam@string:is_empty(Uri@1) of true -> {ok, {name, Uri@1, Local}}; false -> case gleam@string:is_empty(Prefix) of true -> {ok, {name, <<""/utf8>>, Local}}; false -> case External_(Prefix) of {ok, Uri@2} -> {ok, {name, Uri@2, Local}}; {error, Msg} -> {error, Msg} end end end; {error, nil} -> case External_(Prefix) of {ok, Uri@3} -> {ok, {name, Uri@3, Local}}; {error, Msg@1} -> {error, Msg@1} end end. -file("src/xmlm.gleam", 1501). -spec predefined_entities() -> gleam@dict:dict(binary(), binary()). predefined_entities() -> _pipe = maps:new(), _pipe@1 = gleam@dict:insert(_pipe, <<"lt"/utf8>>, <<"<"/utf8>>), _pipe@2 = gleam@dict:insert(_pipe@1, <<"gt"/utf8>>, <<">"/utf8>>), _pipe@3 = gleam@dict:insert(_pipe@2, <<"amp"/utf8>>, <<"&"/utf8>>), _pipe@4 = gleam@dict:insert(_pipe@3, <<"apos"/utf8>>, <<"'"/utf8>>), gleam@dict:insert(_pipe@4, <<"quot"/utf8>>, <<"\""/utf8>>). -file("src/xmlm.gleam", 3139). -spec buffer_new() -> list(integer()). buffer_new() -> []. -file("src/xmlm.gleam", 3146). ?DOC( " UTF-8 encode a uchar in the buffer. Assumes that `uchar` is a valid\n" " codepoint.\n" ). -spec buffer_add_uchar(list(integer()), integer()) -> list(integer()). buffer_add_uchar(Buffer, Uchar) -> case Uchar =< 16#007F of true -> [Uchar | Buffer]; false -> case Uchar =< 16#07FF of true -> [erlang:'bor'(16#80, erlang:'band'(Uchar, 16#3F)), erlang:'bor'(16#C0, erlang:'bsr'(Uchar, 6)) | Buffer]; false -> case Uchar =< 16#FFFF of true -> [erlang:'bor'(16#80, erlang:'band'(Uchar, 16#3F)), erlang:'bor'( 16#80, erlang:'band'(erlang:'bsr'(Uchar, 6), 16#3F) ), erlang:'bor'(16#E0, erlang:'bsr'(Uchar, 12)) | Buffer]; false -> [erlang:'bor'(16#80, erlang:'band'(Uchar, 16#3F)), erlang:'bor'( 16#80, erlang:'band'(erlang:'bsr'(Uchar, 6), 16#3F) ), erlang:'bor'( 16#80, erlang:'band'( erlang:'bsr'(Uchar, 12), 16#3F ) ), erlang:'bor'(16#F0, erlang:'bsr'(Uchar, 18)) | Buffer] end end end. -file("src/xmlm.gleam", 1220). -spec add_char_to_identifier(input(), integer()) -> input(). add_char_to_identifier(Input, Char) -> {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), buffer_add_uchar(erlang:element(18, Input), Char), erlang:element(19, Input)}. -file("src/xmlm.gleam", 1224). -spec add_char_to_data(input(), integer()) -> input(). add_char_to_data(Input, Char) -> {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), buffer_add_uchar(erlang:element(19, Input), Char)}. -file("src/xmlm.gleam", 3209). -spec buffer_clear(list(integer())) -> list(integer()). buffer_clear(_) -> []. -file("src/xmlm.gleam", 1212). -spec clear_identifier(input()) -> input(). clear_identifier(Input) -> {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), buffer_clear(erlang:element(18, Input)), erlang:element(19, Input)}. -file("src/xmlm.gleam", 1216). -spec clear_data(input()) -> input(). clear_data(Input) -> {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), buffer_clear(erlang:element(19, Input))}. -file("src/xmlm.gleam", 3213). -spec buffer_to_string(list(integer())) -> binary(). buffer_to_string(Buffer) -> _pipe = lists:reverse(Buffer), xmlm_ffi:int_list_to_string(_pipe). -file("src/xmlm.gleam", 1027). -spec input_identifier_to_string(input()) -> binary(). input_identifier_to_string(Input) -> _pipe = erlang:element(18, Input), buffer_to_string(_pipe). -file("src/xmlm.gleam", 1031). -spec input_data_to_string(input()) -> binary(). input_data_to_string(Input) -> _pipe = erlang:element(19, Input), buffer_to_string(_pipe). -file("src/xmlm.gleam", 3221). -spec string_from_char(integer()) -> binary(). string_from_char(Char) -> _pipe = buffer_new(), _pipe@1 = buffer_add_uchar(_pipe, Char), buffer_to_string(_pipe@1). -file("src/xmlm.gleam", 869). -spec error_illegal_char(input(), integer()) -> {ok, any()} | {error, input_error()}. error_illegal_char(Input, Uchar) -> error(Input, {illegal_char_seq, string_from_char(Uchar)}). -file("src/xmlm.gleam", 881). -spec error_expected_chars(input(), list(integer())) -> {ok, any()} | {error, input_error()}. error_expected_chars(Input, Expected) -> Expected@1 = gleam@list:map(Expected, fun string_from_char/1), error( Input, {expected_char_seqs, Expected@1, string_from_char(erlang:element(8, Input))} ). -file("src/xmlm.gleam", 1125). -spec next_char(input()) -> {ok, input()} | {error, input_error()}. next_char(Input) -> case erlang:element(8, Input) =:= 9007199254740991 of true -> error(Input, unexpected_eoi); false -> Input@1 = case erlang:element(8, Input) =:= 16#000A of true -> {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input) + 1, 1, erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), erlang:element(19, Input)}; false -> {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input) + 1, erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), erlang:element(19, Input)} end, case (erlang:element(6, Input@1))(Input@1) of {error, E} -> {error, E}; {ok, {Char, Input@2}} -> Input@3 = {input, erlang:element(2, Input@2), erlang:element(3, Input@2), erlang:element(4, Input@2), erlang:element(5, Input@2), erlang:element(6, Input@2), erlang:element(7, Input@2), Char, erlang:element(9, Input@2), erlang:element(10, Input@2), erlang:element(11, Input@2), erlang:element(12, Input@2), erlang:element(13, Input@2), erlang:element(14, Input@2), erlang:element(15, Input@2), erlang:element(16, Input@2), erlang:element(17, Input@2), erlang:element(18, Input@2), erlang:element(19, Input@2)}, case not is_char(erlang:element(8, Input@3)) of true -> error(Input@3, malformed_char_stream); false -> Input@5 = case erlang:element(9, Input@3) andalso (erlang:element( 8, Input@3 ) =:= 16#000A) of false -> {ok, Input@3}; true -> case (erlang:element(6, Input@3))(Input@3) of {error, E@1} -> {error, E@1}; {ok, {Char@1, Input@4}} -> {ok, {input, erlang:element(2, Input@4), erlang:element(3, Input@4), erlang:element(4, Input@4), erlang:element(5, Input@4), erlang:element(6, Input@4), erlang:element(7, Input@4), Char@1, erlang:element(9, Input@4), erlang:element(10, Input@4), erlang:element(11, Input@4), erlang:element(12, Input@4), erlang:element(13, Input@4), erlang:element(14, Input@4), erlang:element(15, Input@4), erlang:element(16, Input@4), erlang:element(17, Input@4), erlang:element(18, Input@4), erlang:element(19, Input@4)}} end end, case Input@5 of {error, E@2} -> {error, E@2}; {ok, Input@6} -> Input@7 = case erlang:element(8, Input@6) =:= 16#000D of true -> {input, erlang:element(2, Input@6), erlang:element(3, Input@6), erlang:element(4, Input@6), erlang:element(5, Input@6), erlang:element(6, Input@6), erlang:element(7, Input@6), 16#000A, true, erlang:element(10, Input@6), erlang:element(11, Input@6), erlang:element(12, Input@6), erlang:element(13, Input@6), erlang:element(14, Input@6), erlang:element(15, Input@6), erlang:element(16, Input@6), erlang:element(17, Input@6), erlang:element(18, Input@6), erlang:element(19, Input@6)}; false -> {input, erlang:element(2, Input@6), erlang:element(3, Input@6), erlang:element(4, Input@6), erlang:element(5, Input@6), erlang:element(6, Input@6), erlang:element(7, Input@6), erlang:element(8, Input@6), false, erlang:element(10, Input@6), erlang:element(11, Input@6), erlang:element(12, Input@6), erlang:element(13, Input@6), erlang:element(14, Input@6), erlang:element(15, Input@6), erlang:element(16, Input@6), erlang:element(17, Input@6), erlang:element(18, Input@6), erlang:element(19, Input@6)} end, {ok, Input@7} end end end end. -file("src/xmlm.gleam", 1170). -spec next_char_eof(input()) -> {ok, input()} | {error, input_error()}. next_char_eof(Input) -> case next_char(Input) of {error, {input_error, _, unicode_lexer_error_eoi}} -> {ok, {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), 9007199254740991, erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), erlang:element(15, Input), erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), erlang:element(19, Input)}}; {error, _} = E -> E; {ok, Input@1} -> {ok, Input@1} end. -file("src/xmlm.gleam", 1181). -spec skip_whitespace(input()) -> {ok, input()} | {error, input_error()}. skip_whitespace(Input) -> case not is_whitespace(erlang:element(8, Input)) of true -> {ok, Input}; false -> case next_char(Input) of {error, E} -> {error, E}; {ok, Input@1} -> skip_whitespace(Input@1) end end. -file("src/xmlm.gleam", 1193). -spec skip_whitespace_eof(input()) -> {ok, input()} | {error, input_error()}. skip_whitespace_eof(Input) -> case is_whitespace(erlang:element(8, Input)) of true -> case next_char_eof(Input) of {error, E} -> {error, E}; {ok, Input@1} -> skip_whitespace_eof(Input@1) end; false -> {ok, Input} end. -file("src/xmlm.gleam", 1205). -spec accept(input(), integer()) -> {ok, input()} | {error, input_error()}. accept(Input, Char) -> case erlang:element(8, Input) =:= Char of true -> next_char(Input); false -> error_expected_chars(Input, [Char]) end. -file("src/xmlm.gleam", 1307). -spec parse_ncname__loop(input()) -> {ok, input()} | {error, input_error()}. parse_ncname__loop(Input) -> case is_name_char(erlang:element(8, Input)) of false -> {ok, Input}; true -> Input@1 = add_char_to_identifier(Input, erlang:element(8, Input)), case next_char(Input@1) of {error, E} -> {error, E}; {ok, Input@2} -> parse_ncname__loop(Input@2) end end. -file("src/xmlm.gleam", 1284). ?DOC( " An XML Name, minus the colon (`:`)\n" " \n" " XML Namespace 1.1 non-terminal: {NCName}\n" " https://www.w3.org/TR/2006/REC-xml-names11-20060816/#NT-NCName\n" ). -spec parse_ncname(input()) -> {ok, {binary(), input()}} | {error, input_error()}. parse_ncname(Input) -> Input@1 = clear_identifier(Input), case not is_name_start_char(erlang:element(8, Input@1)) of true -> error_illegal_char(Input@1, erlang:element(8, Input@1)); false -> Input@2 = add_char_to_identifier( Input@1, erlang:element(8, Input@1) ), case next_char(Input@2) of {error, E} -> {error, E}; {ok, Input@3} -> case parse_ncname__loop(Input@3) of {error, E@1} -> {error, E@1}; {ok, Input@4} -> Name = input_identifier_to_string(Input@4), {ok, {Name, Input@4}} end end end. -file("src/xmlm.gleam", 1835). -spec eat_cdata_lbrack(input()) -> {ok, input()} | {error, input_error()}. eat_cdata_lbrack(Input) -> Input@1 = add_char_to_identifier(Input, erlang:element(8, Input)), gleam@result:'try'( next_char(Input@1), fun(Input@2) -> Input@3 = add_char_to_identifier( Input@2, erlang:element(8, Input@2) ), gleam@result:'try'( next_char(Input@3), fun(Input@4) -> Input@5 = add_char_to_identifier( Input@4, erlang:element(8, Input@4) ), gleam@result:'try'( next_char(Input@5), fun(Input@6) -> Input@7 = add_char_to_identifier( Input@6, erlang:element(8, Input@6) ), gleam@result:'try'( next_char(Input@7), fun(Input@8) -> Input@9 = add_char_to_identifier( Input@8, erlang:element(8, Input@8) ), gleam@result:'try'( next_char(Input@9), fun(Input@10) -> Input@11 = add_char_to_identifier( Input@10, erlang:element(8, Input@10) ), next_char(Input@11) end ) end ) end ) end ) end ). -file("src/xmlm.gleam", 2307). -spec parse_dtd_signal__loop__loop(input(), integer()) -> {ok, input()} | {error, input_error()}. parse_dtd_signal__loop__loop(Input, Quot_or_apos) -> case erlang:element(8, Input) =:= Quot_or_apos of true -> {ok, Input}; false -> Input@1 = add_char_to_data(Input, erlang:element(8, Input)), case next_char(Input@1) of {error, E} -> {error, E}; {ok, Input@2} -> parse_dtd_signal__loop__loop(Input@2, Quot_or_apos) end end. -file("src/xmlm.gleam", 1228). -spec add_char_to_data_strip(input(), integer()) -> input(). add_char_to_data_strip(Input, Char) -> case is_whitespace(Char) of true -> {input, erlang:element(2, Input), erlang:element(3, Input), erlang:element(4, Input), erlang:element(5, Input), erlang:element(6, Input), erlang:element(7, Input), erlang:element(8, Input), erlang:element(9, Input), erlang:element(10, Input), erlang:element(11, Input), erlang:element(12, Input), erlang:element(13, Input), erlang:element(14, Input), true, erlang:element(16, Input), erlang:element(17, Input), erlang:element(18, Input), erlang:element(19, Input)}; false -> Input@1 = case {erlang:element(15, Input), erlang:element(19, Input)} of {_, []} -> Input; {false, _} -> Input; {true, _} -> add_char_to_data(Input, 16#0020) end, Input@2 = {input, erlang:element(2, Input@1), erlang:element(3, Input@1), erlang:element(4, Input@1), erlang:element(5, Input@1), erlang:element(6, Input@1), erlang:element(7, Input@1), erlang:element(8, Input@1), erlang:element(9, Input@1), erlang:element(10, Input@1), erlang:element(11, Input@1), erlang:element(12, Input@1), erlang:element(13, Input@1), erlang:element(14, Input@1), false, erlang:element(16, Input@1), erlang:element(17, Input@1), erlang:element(18, Input@1), erlang:element(19, Input@1)}, add_char_to_data(Input@2, Char) end. -file("src/xmlm.gleam", 1799). -spec parse_limit__comment(input()) -> {ok, {limit(), input()}} | {error, input_error()}. parse_limit__comment(Input) -> case next_char(Input) of {error, E} -> {error, E}; {ok, Input@1} -> case accept(Input@1, 16#002D) of {error, E@1} -> {error, E@1}; {ok, Input@2} -> {ok, {limit_comment, Input@2}} end end. -file("src/xmlm.gleam", 1885). -spec skip_comment__loop(input()) -> {ok, input()} | {error, input_error()}. skip_comment__loop(Input) -> case erlang:element(8, Input) /= 16#002D of true -> case next_char(Input) of {error, E} -> {error, E}; {ok, Input@1} -> skip_comment__loop(Input@1) end; false -> {ok, Input} end. -file("src/xmlm.gleam", 1324). ?DOC( " Qualified name\n" " XML Namespace 1.1 non-terminal: {QName}\n" " https://www.w3.org/TR/2006/REC-xml-names11-20060816/#NT-QName\n" ). -spec parse_qname(input()) -> {ok, {name(), input()}} | {error, input_error()}. parse_qname(Input) -> case parse_ncname(Input) of {error, E} -> {error, E}; {ok, {Name, Input@1}} -> case erlang:element(8, Input@1) /= 16#003A of true -> {ok, {{name, <<""/utf8>>, Name}, Input@1}}; false -> case next_char(Input@1) of {error, E@1} -> {error, E@1}; {ok, Input@2} -> case parse_ncname(Input@2) of {error, E@2} -> {error, E@2}; {ok, {Local_name, Input@3}} -> {ok, {{name, Name, Local_name}, Input@3}} end end end end. -file("src/xmlm.gleam", 1770). -spec parse_limit__pi(input()) -> {ok, {limit(), input()}} | {error, input_error()}. parse_limit__pi(Input) -> case next_char(Input) of {error, E} -> {error, E}; {ok, Input@1} -> case parse_qname(Input@1) of {error, E@1} -> {error, E@1}; {ok, {Name, Input@2}} -> {ok, {{limit_pi, Name}, Input@2}} end end. -file("src/xmlm.gleam", 1782). -spec parse_limit__end_tag(input()) -> {ok, {limit(), input()}} | {error, input_error()}. parse_limit__end_tag(Input) -> case next_char(Input) of {error, E} -> {error, E}; {ok, Input@1} -> case parse_qname(Input@1) of {error, E@1} -> {error, E@1}; {ok, {Name, Input@2}} -> case skip_whitespace(Input@2) of {error, E@2} -> {error, E@2}; {ok, Input@3} -> {ok, {{limit_end_tag, Name}, Input@3}} end end end. -file("src/xmlm.gleam", 1850). -spec parse_limit__start_tag(input()) -> {ok, {limit(), input()}} | {error, input_error()}. parse_limit__start_tag(Input) -> case parse_qname(Input) of {error, E} -> {error, E}; {ok, {Name, Input@1}} -> {ok, {{limit_start_tag, Name}, Input@1}} end. -file("src/xmlm.gleam", 1466). -spec parse_char_reference__loop2(input(), integer()) -> {ok, loop_done()} | {error, input_error()}. parse_char_reference__loop2(Input, C) -> case erlang:element(8, Input) =:= 16#003B of true -> {ok, {loop_done_by_condition, {C, Input}}}; false -> Input@1 = add_char_to_identifier(Input, erlang:element(8, Input)), case not is_digit(erlang:element(8, Input@1)) of true -> {ok, {loop_done_exited, {C, Input@1}}}; false -> C@1 = (C * 10) + (erlang:element(8, Input@1) - 48), case next_char(Input@1) of {error, E} -> {error, E}; {ok, Input@2} -> parse_char_reference__loop2(Input@2, C@1) end end end. -file("src/xmlm.gleam", 1488). -spec parse_char_reference__loop3(input()) -> {ok, input()} | {error, input_error()}. parse_char_reference__loop3(Input) -> case erlang:element(8, Input) =:= 16#003B of true -> {ok, Input}; false -> Input@1 = add_char_to_identifier(Input, erlang:element(8, Input)), case next_char(Input@1) of {error, E} -> {error, E}; {ok, Input@2} -> parse_char_reference__loop3(Input@2) end end. -file("src/xmlm.gleam", 1511). ?DOC(" XML 1.0 non-terminal: {EntityRef}, '&' was eaten.\n"). -spec parse_entity_reference(input(), gleam@dict:dict(binary(), binary())) -> {ok, {binary(), input()}} | {error, input_error()}. parse_entity_reference(Input, Predefined_entities) -> case parse_ncname(Input) of {error, E} -> {error, E}; {ok, {Entity, Input@1}} -> case accept(Input@1, 16#003B) of {error, E@1} -> {error, E@1}; {ok, Input@2} -> case gleam_stdlib:map_get(Predefined_entities, Entity) of {ok, Replacement} -> {ok, {Replacement, Input@2}}; {error, nil} -> case (erlang:element(5, Input@2))(Entity) of {some, Replacement@1} -> {ok, {Replacement@1, Input@2}}; none -> error(Input@2, {unknown_entity_ref, Entity}) end end end end. -file("src/xmlm.gleam", 1858). ?DOC(" XML 1.0 non-terminal: {Comment}, '