-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuriMachine.pl
35 lines (33 loc) · 1.17 KB
/
uriMachine.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
:- module(uriMachine, [uriMachine/2]).
:- use_module(schemeMachine).
:- use_module(userhostMachine).
:- use_module(prMachine).
/**
* uriMachine(++Chars:atom[], -Uri:uri) is nondet.
*
* True when the given list of characters forms a valid URI.
* The URI Scheme field must be ground at call-time for a correct execution.
*/
uriMachine([], uri(_, [], [], 80, [], [], [])) :- !.
uriMachine(Chars, uri(mailto, Userinfo, Host, 80, [], [], [])) :-
!,
userhostMachine(Chars, Userinfo, Host, []),
Userinfo \= [].
uriMachine(Chars, uri(news, [], Host, 80, [], [], [])) :-
!,
userhostMachine(Chars, '', Host, []),
!. % Avoid considering Host as Userinfo.
uriMachine(Chars, uri(tel, Userinfo, [], 80, [], [], [])) :-
!,
userhostMachine(Chars, Userinfo, '', []).
uriMachine(Chars, uri(fax, Userinfo, [], 80, [], [], [])) :-
!,
userhostMachine(Chars, Userinfo, '', []).
uriMachine(Chars, uri(Scheme, Userinfo, Host, Port, Path, Query, Fragment)) :-
prMachine(Chars, uri(Scheme, Userinfo, Host, Port, Path, Query, Fragment)),
!.
uriMachine(Chars, uri(Scheme, Userinfo, Host, 80, [], [], [])) :-
Scheme \= zos,
Scheme \= http,
Scheme \= https,
userhostMachine(Chars, Userinfo, Host, []).