Next: term_to_xml, Previous: term_conversion, Up: Top [Contents]
%--------------------------------------------------% % vim: ft=mercury ts=4 sw=4 et %--------------------------------------------------% % Copyright (C) 1994-2006, 2009, 2011-2012 The University of Melbourne. % Copyright (C) 2014-2023 The Mercury team. % This file is distributed under the terms specified in COPYING.LIB. %--------------------------------------------------% % % File: term_io.m. % Main author: fjh. % Stability: medium to high. % % This file encapsulates all the term I/O. % This exports predicates to read and write terms in the % nice ground representation provided in term.m. % %--------------------------------------------------% %--------------------------------------------------% :- module term_io. :- interface. :- import_module char. :- import_module io. :- import_module ops. :- import_module stream. :- import_module term. :- import_module varset. %--------------------------------------------------% :- type read_term(T) ---> eof % We have reached the end-of-file. ; error(string, int) % We have found an error described the message string % on the given line number in the input. ; term(varset(T), term(T)). % We have read in the given term with the given varset. :- type read_term == read_term(generic). % Read a term from the current input stream or from the given input stream. % % Similar to NU-Prolog read_term/2, except that resulting term % is in the ground representation. % % Binds Result to either `eof', `term(VarSet, Term)', or % `error(Message, LineNumber)'. % :- pred read_term(read_term(T)::out, io::di, io::uo) is det. :- pred read_term(io.text_input_stream::in, read_term(T)::out, io::di, io::uo) is det. % As above, except uses the given operator table instead of % the standard Mercury operators. % :- pred read_term_with_op_table(Ops::in, read_term(T)::out, io::di, io::uo) is det <= op_table(Ops). :- pred read_term_with_op_table(io.text_input_stream::in, Ops::in, read_term(T)::out, io::di, io::uo) is det <= op_table(Ops). %--------------------------------------------------% % Writes a term to the current output stream or to the specified output % stream. Uses the variable names specified by the varset. % Writes _N for all unnamed variables, with N starting at 0. % :- pred write_term(varset(T)::in, term(T)::in, io::di, io::uo) is det. :- pred write_term(io.output_stream::in, varset(T)::in, term(T)::in, io::di, io::uo) is det. % As above, except uses the given operator table instead of the % standard Mercury operators. % :- pred write_term_with_op_table(Ops::in, varset(T)::in, term(T)::in, io::di, io::uo) is det <= op_table(Ops). :- pred write_term_with_op_table(io.text_output_stream::in, Ops::in, varset(T)::in, term(T)::in, io::di, io::uo) is det <= op_table(Ops). % As above, except it appends a period and new-line. % :- pred write_term_nl(varset(T)::in, term(T)::in, io::di, io::uo) is det. :- pred write_term_nl(io.text_output_stream::in, varset(T)::in, term(T)::in, io::di, io::uo) is det. % As above, except it appends a period and new-line. % :- pred write_term_nl_with_op_table(Ops::in, varset(T)::in, term(T)::in, io::di, io::uo) is det <= op_table(Ops). :- pred write_term_nl_with_op_table(io.text_output_stream::in, Ops::in, varset(T)::in, term(T)::in, io::di, io::uo) is det <= op_table(Ops). %--------------------------------------------------% % Writes a constant (integer, float, string, or atom) to % the current output stream, or to the specified output stream. % :- pred write_constant(const::in, io::di, io::uo) is det. :- pred write_constant(io.text_output_stream::in, const::in, io::di, io::uo) is det. % Like write_constant, but return the result in a string. % :- func format_constant(const) = string. %--------------------------------------------------% % Writes a variable to the current output stream, or to the % specified output stream. % :- pred write_variable(var(T)::in, varset(T)::in, io::di, io::uo) is det. :- pred write_variable(io.text_output_stream::in, var(T)::in, varset(T)::in, io::di, io::uo) is det. % As above, except uses the given operator table instead of the % standard Mercury operators. % :- pred write_variable_with_op_table(Ops::in, var(T)::in, varset(T)::in, io::di, io::uo) is det <= op_table(Ops). :- pred write_variable_with_op_table(io.text_output_stream::in, Ops::in, var(T)::in, varset(T)::in, io::di, io::uo) is det <= op_table(Ops). %--------------------------------------------------% % Given a character C, write C in single-quotes, escaped if necessary, % to the current output stream, or to the specified output stream. % :- pred quote_char(char::in, io::di, io::uo) is det. :- pred quote_char(Stream::in, char::in, State::di, State::uo) is det <= (stream.writer(Stream, string, State), stream.writer(Stream, char, State)). % Like quote_char, but return the result in a string. % :- func quoted_char(char) = string. % Given a character C, write C, escaped if necessary, % to the current output stream, or to the specified output stream. % Do not enclose the character in quotes. % :- pred write_escaped_char(char::in, io::di, io::uo) is det. :- pred write_escaped_char(Stream::in, char::in, State::di, State::uo) is det <= (stream.writer(Stream, string, State), stream.writer(Stream, char, State)). % Like write_escaped_char, but return the result in a string. % :- func escaped_char(char) = string. % A reversible version of escaped_char. % :- pred string_is_escaped_char(char, string). :- mode string_is_escaped_char(in, out) is det. :- mode string_is_escaped_char(out, in) is semidet. %--------------------------------------------------% % Given a string S, write S in double-quotes, with characters % escaped if necessary, to the current output stream, or to the % specified output stream. % :- pred quote_string(string::in, io::di, io::uo) is det. :- pred quote_string(Stream::in, string::in, State::di, State::uo) is det <= (stream.writer(Stream, string, State), stream.writer(Stream, char, State)). % Like quote_string, but return the result in a string. % :- func quoted_string(string) = string. % Given a string S, write S, with characters escaped if necessary. % Do not enclose the string in quotes. Write to the current output stream, % or to the specified output stream. % :- pred write_escaped_string(string::in, io::di, io::uo) is det. :- pred write_escaped_string(Stream::in, string::in, State::di, State::uo) is det <= (stream.writer(Stream, string, State), stream.writer(Stream, char, State)). % Like write_escaped_string, but return the result in a string. % :- func escaped_string(string) = string. %--------------------------------------------------% % Given an atom-name A, write A, enclosed in single-quotes if necessary, % with characters escaped if necessary. Write to the current output stream, % or to the specified output stream. % :- pred quote_atom(string::in, io::di, io::uo) is det. :- pred quote_atom(Stream::in, string::in, State::di, State::uo) is det <= (stream.writer(Stream, string, State), stream.writer(Stream, char, State)). % Like quote_atom, but return the result in a string. % :- func quoted_atom(string) = string. %--------------------------------------------------% %--------------------------------------------------%
Next: term_to_xml, Previous: term_conversion, Up: Top [Contents]