2:- module(output,[printHeader/4,
3 printFooter/1,
4 printSem/4,
5 printDerList/2,
6 printBox/2]). 7
8:- use_module(boxer(xdrs2xml),[xdrs2xml/2,der2xml/3]). 9:- use_module(boxer(drs2fdrs),[instDrs/1]). 10:- use_module(boxer(printDrs),[printDrs/3]). 11:- use_module(boxer(betaConversionDRT),[betaConvert/2]). 12:- use_module(boxer(tuples),[write_tuples/2]). 13
14:- use_module(semlib(drs2tex),[drs2tex/2]). 15:- use_module(semlib(drs2tacitus),[printTAC/2]). 16:- use_module(semlib(drs2amr),[printAMR/2]). 17:- use_module(semlib(options),[option/2]). 18:- use_module(semlib(errors),[warning/2]). 19
20:- use_module(library(lists),[member/2,append/3]). 21
25
26printOptions([],Stream):- !,
27 nl(Stream).
28
29printOptions([X|L],Stream):-
30 write(Stream,X), tab(Stream,1),
31 printOptions(L,Stream).
32
33
37
(_,_,_,_):-
39 option('--format',no), !.
40
44
45printHeader(Stream,_,Command,Options):-
46 option('--semantics',amr), !,
47 format(Stream,'# This output was generated by the following command:~n',[]),
48 format(Stream,'# ~p ',[Command]),
49 printOptions(Options,Stream).
50
51printHeader(Stream,_,Command,Options):-
52 option('--format',prolog), !,
53 format(Stream,'%%% This output was generated by the following command:~n',[]),
54 format(Stream,'%%% ~p ',[Command]),
55 printOptions(Options,Stream),
56 ( option('--semantics',drs), !,
57 format(Stream,'~n:- multifile sem/3, id/2.',[]),
58 format(Stream,'~n:- discontiguous sem/3, id/2.',[]),
59 format(Stream,'~n:- dynamic sem/3, id/2.~n',[])
60 ; true ).
61
65
66printHeader(Stream,_,_,_):-
67 option('--format',latex), !,
68 write(Stream,'\\documentclass[10pt]{article}'), nl(Stream),
69 nl(Stream),
70 write(Stream,'\\usepackage{a4wide}'), nl(Stream),
71 nl(Stream),
72 write(Stream,'\\newcommand{\\drs}[2]'), nl(Stream),
73 write(Stream,'{'), nl(Stream),
74 write(Stream,' \\begin{tabular}{|l|}'), nl(Stream),
75 write(Stream,' \\hline'), nl(Stream),
76 write(Stream,' #1'), nl(Stream),
77 write(Stream,' \\\\'), nl(Stream),
78 write(Stream,' ~ \\vspace{-2ex} \\\\'), nl(Stream),
79 write(Stream,' \\hline'), nl(Stream),
80 write(Stream,' ~ \\vspace{-2ex} \\\\'), nl(Stream),
81 write(Stream,' #2'), nl(Stream),
82 write(Stream,' \\\\'), nl(Stream),
83 write(Stream,' \\hline'), nl(Stream),
84 write(Stream,' \\end{tabular}'), nl(Stream),
85 write(Stream,'}'), nl(Stream),
86 nl(Stream),
87 write(Stream,'\\parindent 0pt'), nl(Stream),
88 write(Stream,'\\parskip 10pt'), nl(Stream),
89 nl(Stream),
90 write(Stream,'\\begin{document}'), nl(Stream),
91 write(Stream,'\\sf \\tiny'), nl(Stream),
92 nl(Stream).
93
97
98printHeader(_,_,_,_):-
99 option('--format',dot), !.
100
104
105printHeader(Stream,Version,_,_):-
106 option('--format',xml), !,
107 format(Stream,'<?xml version="1.0" encoding="UTF-8"?>~n',[]),
108 format(Stream,'<!DOCTYPE xdrs-output SYSTEM "src/data/boxer/xdrs.dtd">~n',[]),
109 format(Stream,'<xdrs-output version="~p">~n',[Version]).
110
111
115
116printHeader(_,_,_,_):-
117 option('--format',Format),
118 option('--semantics',Semantics),
119 warning('unable to output header for --semantics ~p --format ~p',[Semantics,Format]).
120
121
125
(Stream):-
127 option('--format',xml),
128 format(Stream,'</xdrs-output>~n',[]).
129
130printFooter(Stream):-
131 option('--format',latex), !,
132 format(Stream,'\\end{document}~n',[]).
133
134printFooter(_).
135
136
140
141printSem(Stream,_Id,_Index,Ders):-
142 option('--semantics',der), !, 143 printDerList(Stream,Ders).
144
145printSem(Stream,Id,Index,XDRS):-
146 XDRS = xdrs(Tags,_),
147 printUtterance(Stream,Tags),
148 printXDRS(Stream,Id,Index,XDRS).
149
150
154
155printDerList(_,[]):- !.
156
157printDerList(Stream,[der(I,Der)|L]):-
158 option('--format',xml), !,
159 der2xml(Der,I,Stream),
160 printDerList(Stream,L).
161
162printDerList(Stream,[der(I,Der)|L]):-
163 write(Stream,'der( '), write(Stream,I), write(Stream,', '),
164 printDer(Der,Stream),
165 write(Stream,' ).'), nl(Stream), !,
166 printDerList(Stream,L).
167
168printDerList(Stream,[der(I,_)|L]):-
169 warning('cannot print derivation ~p',[I]),
170 printDerList(Stream,L).
171
172
176
177printDer(Comb,Stream):-
178 Comb = t(Cat,Tok,Sem,Att,_), !,
179 betaConvert(Sem,Red),
180 \+ \+ ( instDrs(Red),
181 write_term(Stream,t(Red,Cat,Tok,Att),[numbervars(true),quoted(true)]) ).
182
183printDer(Comb,Stream):-
184 Comb =.. [Rule,Cat,_,Sem,_,_,T],
185 member(Rule,[ftr,btr,tc]), !,
186 write(Stream,Rule),
187 write(Stream,'('),
188 write(Stream,Cat),
189 write(Stream,','),
190 betaConvert(Sem,Red),
191 \+ \+ ( instDrs(Red),
192 write_term(Stream,Red,[numbervars(true),quoted(true)]) ),
193 write(Stream,','),
194 printDer(T,Stream),
195 write(Stream,')').
196
197printDer(Comb,Stream):-
198 Comb =.. [Rule,Cat,Sem,_,_,L,R], !,
199 write(Stream,Rule),
200 write(Stream,'('),
201 write(Stream,Cat),
202 write(Stream,','),
203 betaConvert(Sem,Red),
204 \+ \+ ( instDrs(Red),
205 write_term(Stream,Red,[numbervars(true),quoted(true)]) ),
206 write(Stream,','),
207 printDer(L,Stream),
208 write(Stream,','),
209 printDer(R,Stream),
210 write(Stream,')').
211
212printDer(Comb,Stream):-
213 Comb =.. [Rule,Cat,_,Sem,_,_,L,R], !,
214 write(Stream,Rule),
215 write(Stream,'('),
216 write(Stream,Cat),
217 write(Stream,','),
218 betaConvert(Sem,Red),
219 \+ \+ ( instDrs(Red),
220 write_term(Stream,Red,[numbervars(true),quoted(true)]) ),
221 write(Stream,','),
222 printDer(L,Stream),
223 write(Stream,','),
224 printDer(R,Stream),
225 write(Stream,')').
226
227printDer(Comb,_):-
228 warning('cannot print the derivation ~p',[Comb]).
229
230
234
235printXDRS(Stream,_,_,XDRS):-
236 option('--semantics',drs),
237 option('--format',no), !,
238 printBox(Stream,XDRS).
239
240printXDRS(Stream,Id,_Index,XDRS):-
241 option('--semantics',drs),
242 option('--format',xml), !,
243 format(Stream,'<xdrs xml:id="xdrs~p">~n',[Id]),
244 xdrs2xml(XDRS,Stream),
245 format(Stream,'</xdrs>~n',[]).
246
247printXDRS(Stream,_Id,_Index,XDRS):-
248 option('--semantics',drs),
249 option('--format',latex), !,
250 XDRS = xdrs(_Tags,DRS),
251 drs2tex(DRS,Stream),
252 nl(Stream), nl(Stream).
253
254printXDRS(Stream,Id,Index,XDRS):-
255 option('--semantics',drs), !,
256 XDRS = xdrs(Tags,DRS),
257 format(Stream,'id(~q,~p).~n',[Id,Index]),
258 format(Stream,'sem(~p,',[Index]),
259 printStuff(Tags,Stream,','),
260 printStuff(DRS,Stream,').'),
261 printBox(Stream,DRS),
262 nl(Stream).
263
264
268
269printXDRS(Stream,_,_,XDRS):-
270 option('--semantics',pdrs),
271 option('--format',no), !,
272 printBox(Stream,XDRS).
273
274printXDRS(Stream,Id,_Index,XDRS):-
275 option('--semantics',pdrs),
276 option('--format',xml), !,
277 format(Stream,'<xdrs xml:id="xdrs~p">~n',[Id]),
278 xdrs2xml(XDRS,Stream),
279 printBox(Stream,XDRS),
280 format(Stream,'</xdrs>~n',[]).
281
282printXDRS(Stream,Id,Index,XDRS):-
283 option('--semantics',pdrs),
284 XDRS = xdrs(Tags,DRS),
285 format(Stream,'id(~q,~p).~n',[Id,Index]),
286 format(Stream,'sem(~p,',[Index]),
287 printStuff(Tags,Stream,','),
288 printStuff(DRS,Stream,').'),
289 printBox(Stream,XDRS),
290 nl(Stream).
291
292
296
297printXDRS(Stream,_Id,_Index,XDRS):-
298 option('--semantics',drg), !,
299 XDRS = xdrs(_,Tuples),
300 write_tuples(Tuples,Stream),
301 nl(Stream).
302
303
307
308printXDRS(Stream,Id,Index,XDRS):-
309 option('--semantics',fol), !,
310 format(Stream,'id(~q,~p).~n',[Id,Index]),
311 XDRS = xdrs(_Tags,FOL),
312 numbervars(FOL,0,_),
313 format(Stream,'fol(~p,',[Index]),
314 write_term(Stream,FOL,[numbervars(true),quoted(true)]),
315 write(Stream,').'), nl(Stream).
316
317
321
322printXDRS(Stream,Id,Index,XDRS):-
323 option('--semantics',tacitus), !,
324 format(Stream,'id(~q,~p).~n',[Id,Index]),
325 XDRS = xdrs(Tags,TAC),
326 printTags(Tags,Stream,''),
327 printTAC(TAC,Stream).
328
332
333printXDRS(Stream,_,_,XDRS):-
334 option('--semantics',amr), !,
335 XDRS = xdrs(_,AMR),
336 printAMR(AMR,Stream),
337 nl(Stream).
338
339
343
344printBox(Stream,XDRS):-
345 option('--box',true),
346 option('--format',xml), !,
347 format(Stream,'~n<!-- ~n',[]),
348 leftMargin(Margin),
349 printDrs(Stream,XDRS,Margin),
350 format(Stream,'--> ~n~n',[]).
351
352printBox(Stream,XDRS):-
353 option('--box',true), !,
354 nl(Stream),
355 leftMargin(Margin),
356 printDrs(Stream,XDRS,Margin).
357
358printBox(_,_).
359
360
364
365leftMargin(Margin):- option('--format',prolog), !, Margin = '%%% '.
366leftMargin(Margin):- option('--format',latex), !, Margin = '%%% '.
367leftMargin(Margin):- option('--format',dot), !, Margin = '# '.
368leftMargin(Margin):- Margin = ''.
369
370
374
375printUtterance(Stream,Words):-
376 option('--semantics',amr), !,
377 format(Stream,'# ',[]),
378 printWords(Words,Stream),
379 nl(Stream).
380
381printUtterance(Stream,Words):-
382 option('--format',prolog), !,
383 format(Stream,'%%% ',[]),
384 printWords(Words,Stream),
385 nl(Stream).
386
387printUtterance(Stream,Words):-
388 option('--format',latex), !,
389 write(Stream,'\\section*{'),
390 printWords(Words,Stream),
391 write(Stream,'}'), nl(Stream).
392
393printUtterance(Stream,Words):-
394 option('--format',dot), !,
395 format(Stream,'# ',[]),
396 printWords(Words,Stream),
397 nl(Stream).
398
399printUtterance(Stream,Words):-
400 option('--format',xml), !,
401 format(Stream,'<!-- ',[]),
402 printWords(Words,Stream),
403 format(Stream,'--> ~n~n',[]).
404
405printUtterance(Stream,Words):-
406 option('--format',no), !,
407 printWords(Words,Stream),
408 nl(Stream).
409
410
414
415printWords([],_):- !.
416
417printWords([ID:[tok:Tok|R]|L],Stream):-
418 option('--format',xml),
419 atom_concat('--',Rest,Tok), !,
420 atom_concat('-',Rest,New),
421 printWords([ID:[tok:New|R]|L],Stream).
422
423printWords([_ID:[tok:Tok|_]|L],Stream):- !,
424 format(Stream,'~w ',[Tok]),
425 printWords(L,Stream).
426
427printWords([_Unknown|L],Stream):- !,
428 printWords(L,Stream).
429
430
434
435printStuff(Stuff,Stream,Closing):-
436 numbervars(Stuff,1,_),
437 write_term(Stream,Stuff,[numbervars(true),quoted(true)]),
438 format(Stream,'~w',[Closing]).
439
440
444
445printTags([],Stream,Ending):-
446 write(Stream,Ending).
447
448printTags([ID:[T|Ags]|L],Stream,_):- !,
449 write(Stream,ID), write(Stream,' '),
450 printTags([T|Ags],Stream,'\n'),
451 printTags(L,Stream,'').
452
453printTags([_:V|L],Stream,Ending):- !,
454 write(Stream,V), write(Stream,' '),
455 printTags(L,Stream,Ending)