forked from SWI-Prolog/packages-pldoc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_wiki.pl
81 lines (69 loc) · 1.83 KB
/
test_wiki.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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
:- module(test_wiki,
[ test/1
]).
:- use_module(pldoc).
:- use_module(doc_wiki).
:- use_module(doc_modes).
:- use_module(doc_html).
:- use_module(doc_http).
:- use_module(library('http/html_write')).
/** <module> PlDoc testing module
Just some random tests.
*/
process_comment(File, Pos-String, DOM) :-
stream_position_data(line_count, Pos, Line),
FilePos = File:Line,
is_structured_comment(String, Prefixes),
indented_lines(String, Prefixes, Lines),
( section_comment_header(Lines, Header, Lines1)
-> DOM = [Header|DOM1],
Args = []
; process_modes(Lines, FilePos, Modes, Args, Lines1)
-> DOM = [\pred_dt(Modes), dd(class=defbody, DOM1)]
),
wiki_lines_to_dom(Lines1, Args, DOM0),
strip_leading_par(DOM0, DOM1).
%% process_comment_list(+Comments, +File, -DOM) is det.
%
% @param Mode Enclosing environment, =body= or =dl=
process_comment_list(Comments, File, DOM) :-
maplist(process_comment(File), Comments, DOMList),
phrase(missing_tags(DOMList, body), DOM).
missing_tags([], _) -->
[].
missing_tags([H|T0], Outer) -->
{ requires(H, Tag), Tag \== Outer, !,
Env =.. [Tag,C],
phrase(in_tag([H|T0], T, Tag), C)
},
[Env],
missing_tags(T, Outer).
missing_tags([H|T], Outer) -->
H,
missing_tags(T, Outer).
in_tag([], [], _) --> !,
[].
in_tag(L, L, Tag) -->
{ L = [H|_],
\+ requires(H,Tag)
}, !,
[].
in_tag([H|T0], T, Tag) -->
H,
in_tag(T0, T, Tag).
requires([\pred_dt(_)|_], dl).
test :-
test('wiki_test_data').
test(Spec) :-
absolute_file_name(Spec, File, [file_type(prolog)]),
read_structured_comments(File, Comments),
process_comment_list(Comments, File, DOM),
doc_file_name(File, DocFile, [format(html)]),
open(DocFile, write, Out),
call_cleanup(doc_write_html(Out, File, DOM),
close(Out)).
doc :-
Port = 4000,
doc_server(Port),
format(atom(URL), 'http://localhost:~w/', [Port]),
www_open_url(URL).