10
15
16:- module(wn_display_graph,
17 [ display_graph/1
18 ]).
19
23pdf_displayer(PDFViewer) :-
24 getenv('PDFViewer', PDFViewer),
25 !
25.
26
27pdf_displayer('open -a Preview') :-
28 current_prolog_flag(apple, true), 29 !.
30
31pdf_displayer('xpdf') :-
32 current_prolog_flag(unix, true), 33 !.
34
35pdf_displayer('acrobat.exe /A "view=Fit"') :-
36 current_prolog_flag(windows, true), 37 !.
38
39:- if((getenv('OSTYPE',OSystem), OSystem = darwin16)).
41 pdf_displayer('open -a Preview').
42:- elif((getenv('OSTYPE',OSystem), OSystem = linux-gnu)).
44 pdf_displayer('xpdf').
45:- else.
47 pdf_displayer('acrobat.exe /A "view=Fit"').
48:- endif. 49
57display_graph(Graph) :-
58 open('out.dot', write, Handle),
59 write(Handle, 'digraph G { size="1,1";'),
60 nl(Handle),
61 write_arcs(Handle, Graph),
62 write(Handle,'}'),
63 close(Handle),
64 65 display_dot_in_pdf.
66
67display_dot_in_pdf :-
68 (write('Displaying graph...'),
69 nl,
70 shell('dot out.dot -Tpdf -o out.pdf'),
71 pdf_displayer(PDFViewer),
72 atom_concat(PDFViewer, ' out.pdf', PDFViewerCommand),
74 (shell(PDFViewerCommand) -> true
75 ; write('ERROR: Cannot start PDF viewer. Check the environment variable PDFViewer')
76 ),
77 !
78 ;
79 write('ERROR: Cannot generate PDF output file. Check that the dot program is accesible')
80 )
80.
81
82write_arcs(_Handle,[]).
83write_arcs(Handle,[arc(A,B)|R]):-
84 write(Handle,A),
85 write(Handle,' -> '),
86 write(Handle,B),
87 write(Handle,';'),
88 nl(Handle),
89 write_arcs(Handle,R)