mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-16 01:43:35 +00:00
extras/*/*.m: Replace the use of '__' as a module qualifier in the rest of the extras. s/io\.state/io/ in the extras. Use '=' instead of is/2 in a spot.
137 lines
3.4 KiB
Mathematica
137 lines
3.4 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% Copyright (C) 2000, 2001, 2004-2006 The University of Melbourne.
|
|
% This file may only be copied under the terms of the GNU Library General
|
|
% Public License - see the file COPYING.LIB in the Mercury distribution.
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% Main author: conway@cs.mu.oz.au.
|
|
%
|
|
%---------------------------------------------------------------------------%
|
|
:- module tryit.
|
|
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module parsing, xml, xml.cat, xml.encoding.
|
|
:- import_module xml.parse, xml.ns.
|
|
:- import_module char, list, map, maybe, pair, string.
|
|
|
|
main -->
|
|
io.command_line_arguments(Args),
|
|
main(Args).
|
|
|
|
:- pred main(list(string), io, io).
|
|
:- mode main(in, di, uo) is det.
|
|
|
|
main([]) --> [].
|
|
main([File|Files]) -->
|
|
see(File, Res0),
|
|
( { Res0 = ok } ->
|
|
io.read_file_as_string(TextResult),
|
|
(
|
|
{ TextResult = error(_, TextErr) },
|
|
stderr_stream(StdErr0),
|
|
format(StdErr0, "error reading file `%s': %s\n",
|
|
[s(File), s(io.error_message(TextErr))])
|
|
;
|
|
{ TextResult = ok(Text) },
|
|
pstate(mkEntity(Text), mkEncoding(utf8), init),
|
|
io((pred(Dirs0::out, di, uo) is det -->
|
|
get_environment_var("XML_DIRS", MStr),
|
|
(
|
|
{ MStr = no },
|
|
{ Str = "." }
|
|
;
|
|
{ MStr = yes(Str) }
|
|
),
|
|
{ split((':'), Str, Dirs0) }
|
|
), Dirs),
|
|
set(gDirs, dirs(Dirs)),
|
|
io((pred(Cat0::out, di, uo) is det -->
|
|
load("catalog", Dirs, Res1),
|
|
(
|
|
{ Res1 = ok(Cat0) }
|
|
;
|
|
{ Res1 = error(Err0) },
|
|
stderr_stream(StdErr0),
|
|
format(StdErr0, "error reading catalog: %s\n", [s(Err0)]),
|
|
{ init(Catalog0) },
|
|
{ Cat0 = catalog(Catalog0) }
|
|
)
|
|
), Cat),
|
|
set(gCatalog, Cat),
|
|
{ map.from_assoc_list([
|
|
"ASCII" - mkEncoding(ascii7),
|
|
"ascii" - mkEncoding(ascii7),
|
|
"Latin-1" - mkEncoding(latin1),
|
|
"Latin1" - mkEncoding(latin1),
|
|
"UTF-8" - mkEncoding(utf8),
|
|
"utf-8" - mkEncoding(utf8)
|
|
], Encodings) },
|
|
set(gEncodings, encodings(Encodings)),
|
|
document,
|
|
finish(Res),
|
|
(
|
|
{ Res = ok((DTD, Doc)) },
|
|
{ nsTranslate(Doc, NsDoc) },
|
|
{ New = cat.ok((DTD, NsDoc)) },
|
|
write(New)
|
|
% if don't want to turn the doc to namespace awared,
|
|
% change the above three lines to
|
|
% write(Res)
|
|
;
|
|
{ Res = error(Err) },
|
|
stderr_stream(StdErr),
|
|
format(StdErr, "%s: %s\n", [s(File), s(Err)]),
|
|
write(Res)
|
|
),
|
|
nl,
|
|
[]
|
|
)
|
|
;
|
|
[]
|
|
),
|
|
main(Files).
|
|
|
|
:- pred split(char, string, list(string)).
|
|
:- mode split(in, in, out) is det.
|
|
|
|
split(C, Str0, Strs) :-
|
|
string.to_char_list(Str0, Chars),
|
|
split1(C, [], Strs0, Chars, _),
|
|
reverse(Strs0, Strs).
|
|
|
|
:- pred split1(char, list(string), list(string), list(char), list(char)).
|
|
:- mode split1(in, in, out, in, out) is det.
|
|
|
|
split1(_C, Strs, Strs, [], []).
|
|
split1(C, Strs0, Strs) -->
|
|
=([_|_]),
|
|
split2(C, [], Cs0),
|
|
{ reverse(Cs0, Cs) },
|
|
( { Cs \= [] } ->
|
|
{ string.from_char_list(Cs, Str) },
|
|
{ Strs1 = [Str|Strs0] }
|
|
;
|
|
{ Strs1 = Strs0 }
|
|
),
|
|
split1(C, Strs1, Strs).
|
|
|
|
:- pred split2(char, list(char), list(char), list(char), list(char)).
|
|
:- mode split2(in, in, out, in, out) is det.
|
|
|
|
split2(_C, Cs, Cs, [], []).
|
|
split2(C, Cs0, Cs) -->
|
|
[C0],
|
|
( { C = C0 } ->
|
|
{ Cs = Cs0 }
|
|
;
|
|
split2(C, [C0|Cs0], Cs)
|
|
).
|
|
|