:- module term_io.
:- use_module bool, builtin, char, int, io, lexer, list, ops, parser, private_builtin, require, std_util, string, term, varset.
:- pred term_io:write_variable_2(Ops_1, (term:var(T_2)), (varset:varset(T_2)), int, (varset:varset(T_2)), int, (io:state), (io:state)) <= (ops:op_table(Ops_1)).
:- mode term_io:write_variable_2((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:di), (builtin:uo)) is det.
:- pred term_io:write_term_2(Ops_1, (term:term(T_2)), (varset:varset(T_2)), int, (varset:varset(T_2)), int, (io:state), (io:state)) <= (ops:op_table(Ops_1)).
:- mode term_io:write_term_2((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:di), (builtin:uo)) is det.
:- pred term_io:write_term_3(Ops_1, (term:term(T_2)), int, (varset:varset(T_2)), int, (varset:varset(T_2)), int, (io:state), (io:state)) <= (ops:op_table(Ops_1)).
:- mode term_io:write_term_3((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:di), (builtin:uo)) is det.
:- pred term_io:write_constant((term:const), (term_io:adjacent_to_graphic_token), (io:state), (io:state)).
:- mode term_io:write_constant((builtin:in), (builtin:in), (builtin:di), (builtin:uo)) is det.
:- func term_io:format_constant((term:const), (term_io:adjacent_to_graphic_token)) = string.
:- mode term_io:format_constant((builtin:in), (builtin:in)) = (builtin:out) is det.
:- func term_io:add_escaped_char(character, string) = string.
:- mode term_io:add_escaped_char((builtin:in), (builtin:in)) = (builtin:out) is det.
term_io:read_term(Result_4, DCG_0_6, DCG_2_8) :-
		io:get_op_table(Ops_5, DCG_0_6, DCG_1_7),
		term_io:read_term_with_op_table(Ops_5, Result_4, DCG_1_7, DCG_2_8).
term_io:read_term_with_op_table(Ops_5, Result_6, DCG_0_7, DCG_1_8) :-
		parser:read_term_with_op_table(Ops_5, Result_6, DCG_0_7, DCG_1_8).
term_io:write_term(VarSet_5, Term_6, DCG_0_8, DCG_2_10) :-
		io:get_op_table(Ops_7, DCG_0_8, DCG_1_9),
		term_io:write_term_with_op_table(Ops_7, VarSet_5, Term_6, DCG_1_9, DCG_2_10).
term_io:write_term_with_op_table(Ops_6, VarSet_7, Term_8, DCG_0_11, DCG_1_12) :-
		V_13 = 0,
		term_io:write_term_2(Ops_6, Term_8, VarSet_7, V_13, V_9, V_10, DCG_0_11, DCG_1_12).
term_io:write_term_nl(VarSet_5, Term_6, DCG_0_8, DCG_2_10) :-
		io:get_op_table(Ops_7, DCG_0_8, DCG_1_9),
		term_io:write_term_nl_with_op_table(Ops_7, VarSet_5, Term_6, DCG_1_9, DCG_2_10).
term_io:write_term_nl_with_op_table(Ops_6, VarSet_7, Term_8, DCG_0_9, DCG_2_11) :-
		term_io:write_term_with_op_table(Ops_6, VarSet_7, Term_8, DCG_0_9, DCG_1_10),
		V_12 = ".\n",
		io:write_string(V_12, DCG_1_10, DCG_2_11).
term_io:write_constant(Const_4, DCG_0_5, DCG_1_6) :-
		V_7 = term_io:not_adjacent_to_graphic_token,
		term_io:write_constant(Const_4, V_7, DCG_0_5, DCG_1_6).
term_io:format_constant(Const_3) = HeadVar__2_2 :-
		HeadVar__2_2 = term_io:format_constant(Const_3, V_4),
		V_4 = term_io:not_adjacent_to_graphic_token.
term_io:write_variable(Variable_5, VarSet_6, DCG_0_8, DCG_2_10) :-
		io:get_op_table(Ops_7, DCG_0_8, DCG_1_9),
		term_io:write_variable_with_op_table(Ops_7, Variable_5, VarSet_6, DCG_1_9, DCG_2_10).
term_io:write_variable_with_op_table(Ops_6, Variable_7, VarSet_8, DCG_0_11, DCG_1_12) :-
		V_13 = 0,
		term_io:write_variable_2(Ops_6, Variable_7, VarSet_8, V_13, V_9, V_10, DCG_0_11, DCG_1_12).
term_io:quote_atom(S_4, DCG_0_5, DCG_1_6) :-
		V_7 = term_io:not_adjacent_to_graphic_token,
		term_io:quote_atom(S_4, V_7, DCG_0_5, DCG_1_6).
term_io:quoted_atom(S_3) = HeadVar__2_2 :-
		HeadVar__2_2 = term_io:quoted_atom(S_3, V_4),
		V_4 = term_io:not_adjacent_to_graphic_token.
term_io:write_escaped_string(String_4, DCG_0_5, DCG_1_6) :-
		V_7 = term_io:write_escaped_char,
		string:foldl(V_7, String_4, DCG_0_5, DCG_1_6).
term_io:escaped_string(String_3) = HeadVar__2_2 :-
		HeadVar__2_2 = string:foldl(V_4, String_3, V_5),
		V_4 = term_io:add_escaped_char,
		V_5 = "".
term_io:quote_single_char(Char_4, DCG_0_5, DCG_1_6) :-
		term_io:write_escaped_char(Char_4, DCG_0_5, DCG_1_6).
term_io:write_term_2(Ops_9, Term_10, VarSet0_11, N0_12, VarSet_13, N_14, DCG_0_15, DCG_1_16) :-
		V_17 = int:(V_18 + V_19),
		V_18 = ops:max_priority(Ops_9),
		V_19 = 1,
		term_io:write_term_3(Ops_9, Term_10, V_17, VarSet0_11, N0_12, VarSet_13, N_14, DCG_0_15, DCG_1_16).
term_io:add_escaped_char(Char_4, String0_5) = String_6 :-
		String_6 = string:append(String0_5, V_7),
		V_7 = string:char_to_string(Char_4).
:- pragma termination_info(term_io:read_term((builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:read_term_with_op_table((builtin:in), (builtin:out), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:write_term((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:write_term_with_op_table((builtin:in), (builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:write_term_nl((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:write_term_nl_with_op_table((builtin:in), (builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:write_constant((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:format_constant((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term_io:write_variable((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:write_variable_with_op_table((builtin:in), (builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:quote_string((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:quoted_string((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term_io:quote_atom((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:quoted_atom((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term_io:quote_char((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:write_escaped_char((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:escaped_char((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term_io:write_escaped_string((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:escaped_string((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(term_io:quote_single_char((builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:quote_atom((builtin:in), (builtin:in), (builtin:di), (builtin:uo)), infinite, can_loop).
:- pragma termination_info(term_io:quoted_atom((builtin:in), (builtin:in)) = (builtin:out), infinite, can_loop).
