/*          KLONE3      settembre 91     */ 

/*  PREDICATI DI STAMPA */


/* pretty print */

pretty_print(A) :-
        generic_concept(A),
        print_header(g_conc,A),
        print_section(super_c,A,nonfullview),
      /*  read(B), */
        print_section(roles,A,nonfullview),
        skip_line(1).
 pretty_print(A) :-
        individual_concept(A),
        print_header(i_conc,A),
        print_section(indiv_c,A,nonfullview),
      /*  read(B), */
        print_section(roles,A,nonfullview),
        skip_line(1).
 pretty_print(A) :-
        work(B),
        net_node(g_role,A,C,B),
        print_header(g_role,A),
        print_section(concept,A,C,nonfullview),
       /* read(D), */
        print_section(super_r,A,C,nonfullview),
      /*   read(D), */
        print_section(facets,A,C,nonfullview),
        skip_line(1).
 pretty_print(A,B) :-
        generic_role(A),
        print_header(g_role,A),
        print_section(concept,A,B,nonfullview),
      /*  read(C), */
        print_section(super_r,A,B,nonfullview),
      /*  read(C),   */
        print_section(facets,A,B,nonfullview),
        skip_line(1).


/* usate da pretty_print */

 print_header(g_conc,A) :-
        write_line(2,[' ** ',A,' ** is a Generic Concept with']),
        skip_line(1).
 print_header(i_conc,A) :-
        write_line(2,[' ** ',A,' ** is a Individual Concept with']),
        skip_line(1).
 print_header(g_role,A) :-
        write_line(2,[' ** ',A,' ** is a Generic Role with']),
        skip_line(1).


 print_section(super_c,A,B) :-
        (
          setof(C,C^super_c(A,C),D),
          D\=[],
          print_section_header(super_c),
          print_set(super_c,D,B)
        ;
          write_line(4,[no,'Super Concepts'])
        ).
 print_section(indiv_c,A,B) :-
        (
          setof(C,C^indiv_c(A,C),D),
          D\=[],
          print_section_header(indiv_c),
          print_set(indiv_c,D,B)
        ;
          write_line(4,[no,'Super Concepts'])
        ).
 print_section(roles,A,B) :-
         generic_concept(A),
         (
          work(C),
          (
            setof(D,D^has_inherited_role(A,D),E)
          ;
            E=[]
          ),
          (
            setof(F,F^net_arc(role,A,F,C),G)
          ;
            G=[]
          ),
          (
            E\=[]
          ;
            G\=[]
          ),
          print_section_header(roles),
          print_set(inherited_roles,E,B),
          print_set(local_roles,G,A,B)
        ;
          write_line(4,[no,'Roles'])
        ).
 print_section(roles,A,B) :-
        (
          individual_concept(A),
          work(C),
          setof(D,D^net_arc(role,A,D,C),E),
          E\=[],
          print_section_header(roles),
          print_set(local_roles,E,A,B)
        ;
          write_line(4,[no,'Roles'])
        ).
 print_section(super_r,A,B,C) :-
        (
          work(D),
          (
            setof(E,E^net_arc(mods,A,B,E,F,D),G)
          ;
            G=[]
          ),
          (
            setof(H,H^net_arc(diffs,A,B,H,I,D),J)
          ;
            J=[]
          ),
          (
            G\=[]
          ;
            J\=[]
          ),
          print_section_header(super_r),
          print_set(mods_super_r,G,C),
          print_set(diffs_super_r,J,C)
        ;
          write_line(4,[no,'Super Roles'])
        ).
 print_section(concept,A,B,C) :-
        print_section_header(concept),
        write_line(8,[B]).
 print_section(facets,A,B,nonfullview) :-
        (
          print_section_header(facets),
          print_sub_section(role_descr,vr_facet,A,B,nonfullview),
          print_sub_section(role_descr,number_facet,A,B,nonfullview),
          print_sub_section(role_descr,modality_facet,A,B,nonfullview)
        ;
          write(3,[no,local,value])
        ).
 print_section(facets,A,B,fullview) :-
        print_section_header(facets),
        print_sub_section(role_descr,vr_facet,A,B,fullview),
        print_sub_section(role_descr,number_facet,A,B,fullview),
        print_sub_section(role_descr,modality_facet,A,B,fullview).


 print_set(inherited_vr,[]).
 print_set(inherited_vr,[A|B]) :-
        work(C),
        net_arc(vr_facet,D,E,A),
        write_line(12,[A,'(from :',D,')']),
        print_set(inherited_vr,B).
 print_set(super_c,[],A).
 print_set(super_c,[A|B],C) :-
        write_line(5,[A]),
        print_set(super_c,B,C).
 print_set(indiv_c,[],A).
 print_set(indiv_c,[A|B],C) :-
        write_line(5,[A]),
        print_set(indiv_c,B,C).
 print_set(inherited_roles,[],A).
 print_set(inherited_roles,[A|B],C) :-
        print_inherited_role(A,C),
        print_set(inherited_roles,B,C).
 print_set(mods_super_r,[],A).
 print_set(mods_super_r,[A|B],C) :-
        [A|B]\==[],
        write_line(5,[A,'(mods)']),
        print_set(mods_super_r,B,C).
 print_set(diffs_super_r,[],A).
 print_set(diffs_super_r,[A|B],C) :-
        [A|B]\==[],
        write_line(5,[A,'(diffs)']),
        print_set(diffs_super_r,B,C).
 print_set(local_roles,[],A,B).
 print_set(local_roles,[A|B],C,D) :-
        print_local_role(A,C,D),
        print_set(local_roles,B,C,D).

 print_inherited_role(A,nonfullview) :-
        work(B),
        net_arc(role,C,A,B),
        write_line(5,[A,':']),
        write_line(8,['( from :',C,')']).
 print_inherited_role(A,fullview) :-
        work(B),
        net_arc(role,C,A,B),
        write_line(5,[A,':']),
        write_line(8,['( from :',C,')']),
        print_sub_section(conc_descr,vr_facet,A,C,fullview),
        print_sub_section(conc_descr,number_facet,A,C,fullview),
        print_sub_section(conc_descr,modality_facet,A,C,fullview).
 
 print_local_role(A,B,nonfullview) :-
        generic_role(A),
        write_line(5,[A,':']),
        print_sub_section(conc_descr,super_r,B,A),
        print_sub_section(conc_descr,vr_facet,A,B,nonfullview),
        print_sub_section(conc_descr,number_facet,A,B,nonfullview),
        print_sub_section(conc_descr,modality_facet,A,B,nonfullview).
 print_local_role(A,B,nonfullview) :-
        instance_role(A),
        write_line(5,[A,':']),
        print_sub_section(conc_descr,satisfies,A,B,nonfullview),
        print_sub_section(conc_descr,value_facet,A,B,nonfullview).
 print_local_role(A,B,fullview) :-
        is_role(A),
        write_line(5,[A,':']),
        print_sub_section(conc_descr,super_r,B,A),
        print_sub_section(conc_descr,vr_facet,A,B,fullview),
        print_sub_section(conc_descr,number_facet,A,B,fullview),
        print_sub_section(conc_descr,modality_facet,A,B,fullview).




 print_section_header(super_c) :-
        write_line(4,[' Super Concepts :']),
        write_line(4,[' ------']).
 print_section_header(indiv_c) :-
        write_line(4,[' Individuates :']),
        write_line(4,[' ------------']).
 print_section_header(roles) :-
        write_line(4,[' Roles :']),
        write_line(4,[' -----']).
 print_section_header(concept) :-
        write_line(4,[' Associated Concept :']),
        write_line(4,[' ------------------']).
 print_section_header(super_r) :-
        write_line(4,[' Super Roles :']),
        write_line(4,[' -----------']).
 print_section_header(facets) :-
        write_line(4,[' Facets :']),
        write_line(4,[' ------']).
 

print_sub_section(conc_descr,super_r,A,B) :-
        work(C),
        (
          setof(D,D^net_arc(mods,B,A,D,E,C),F),
          F\=[],
          write_line(8,['( mods : ',F,')'])
        ;
          true
        ),
        (
          setof(G,G^net_arc(diffs,B,A,G,H,C),I),
          I\=[],
          write_line(8,['( diffs : ',I,')'])
        ;
          true
        ).
 print_sub_section(conc_descr,vr_facet,A,B,nonfullview) :-
        (
          work(C),
          net_arc(vr_facet,A,B,D,C),
          write_line(10,['V/R',=,D])
        ;
          true
        ).
 print_sub_section(conc_descr,vr_facet,A,B,fullview) :-
        (
          vr_facet(A,B,C),
          write_line(10,['V/R',=,C])
        ;
          true
        ).
 print_sub_section(conc_descr,number_facet,A,B,nonfullview) :-
        (
          work(C),
          net_arc(number_facet,A,B,[D,E],C),
          (
            D\=E,
            write_line(10,['Num',=,D,',',E])
          ;
            D=E,
            write_line(10,['Num',=,D])
          )
        ;
          true
        ).
 print_sub_section(conc_descr,number_facet,A,B,fullview) :-
        (
          number_facet(A,B,[C,D]),
          (
            C\=D,
            write_line(10,['Num',=,C,',',D])
          ;
            C=D,
            write_line(10,['Num',=,C])
          )
        ;
          true
        ).
 print_sub_section(conc_descr,modality_facet,A,B,nonfullview) :-
        (
          work(C),
          net_arc(modality_facet,A,B,D,C),
          write_line(10,['Mod',=,D])
        ;
          true
        ).
 print_sub_section(conc_descr,modality_facet,A,B,fullview) :-
        (
          modality_facet(A,B,C),
          write_line(10,['Mod',=,C])
        ;
          true
        ).
 print_sub_section(conc_descr,value_facet,A,B,nonfullview) :-
        (
          has_value(A,B,C),
          write_line(10,['Value',=,C])
        ;
          true
        ).
 print_sub_section(conc_descr,satisfies,A,B,nonfullview) :-
        (
          satisfies(A,B,C,D),
          write_line(10,['Satisfies',C,D])
        ;
          true
        ).
 print_sub_section(role_descr,vr_facet,A,B,nonfullview) :-
        print_sub_section(conc_descr,vr_facet,A,B,nonfullview).
 print_sub_section(role_descr,number_facet,A,B,nonfullview) :-
        print_sub_section(conc_descr,number_facet,A,B,nonfullview).
 print_sub_section(role_descr,modality_facet,A,B,nonfullview) :-
        print_sub_section(conc_descr,modality_facet,A,B,nonfullview).
 print_sub_section(role_descr,vr_facet,A,B,fullview) :-
        work(C),
        net_arc(vr_facet,A,B,D,C),
        write_line(8,['V/R',=,D]).
 print_sub_section(role_descr,vr_facet,A,B,fullview) :-
        (
          work(C),
          not net_arc(vr_facet,A,B,D,C),
          super_r(A,B,E,F),
          setof(G,G^vr_facet(E,F,G),H),
          H\=[],
          print_set(inherited_vr,H)
        ;
          true
        ).
 print_sub_section(role_descr,number_facet,A,B,fullview) :-
        work(C),
        net_arc(number_facet,A,B,D,C),
        write_line(8,['Num',=,D]).
 print_sub_section(role_descr,number_facet,A,B,fullview) :-
        work(C),
        not net_arc(number_facet,A,B,D,C),
        not super_r(A,B,E,F),
        number_facet(A,B,[G,H]),
        (
          G\==H,
          write_line(8,['Num',=,'[',G,',',H,']',' ( default )'])
        ;
          G==H,
          write_line(8,['Num',=,G,' ( default )'])
        ).
 print_sub_section(role_descr,number_facet,A,B,fullview) :-
        work(C),
        not net_arc(number_facet,A,B,D,C),
        super_r(A,B,E,F),
        number_facet(E,F,[G,H]),
        (
          G\=H,
          write_line(8,['Num',=,'[',G,',',H,']',' ( from :',E,')'])
        ;
          G=H,
          write_line(8,['Num',=,G,' ( from :',E,')'])
        ).
 print_sub_section(role_descr,modality_facet,A,B,fullview) :-
        work(C),
        net_arc(modality_facet,A,B,D,C),
        write_line(8,['Mod',=,D]).
 print_sub_section(role_descr,modality_facet,A,B,fullview) :-
        work(C),
        not net_arc(modality_facet,A,B,D,C),
        super_r(A,B,E,F),
        modality_facet(E,F,G),
        write_line(8,['Mod',=,G,'   ( from :',E,')']).
 print_sub_section(role_descr,modality_facet,A,B,fullview) :-
        work(C),
        not net_arc(modality_facet,A,B,D,C),
        not super_r(A,B,E,F),
        modality_facet(A,B,G),
        write_line(8,['Mod',=,G,'   ( default )']).



/* utilities di stampa */

 write_line(A,[B|C]) :-
        nl,
        tab(A),
        write_ln([B|C]).
 write_ln([]).
 write_ln([A|B]) :-
        write(A),
        tab(1),
        write_ln(B).
 skip_line(1) :-
        nl.
 skip_line(A) :-
        nl,
        B is A-1,
        skip_line(B).

/* stampa messaggi */

 msg(super_c,[A],1) :-
        '!',
        write_line(3,['>>',A,'<<',':',not,a,generic,concept]),
        skip_line(1).
 msg(super_c,[A],2) :-
        '!',
        write_line(3,[the,fact,':']),
        skip_line(1),
        tab(10),
        write_fact(has_super_concept,[A,A]),
        skip_line(1),
        write_line(3,[is,inconsistent,'!']),
        skip_line(1).
 msg(assume,A,1) :-
        nl,
        tab(3),
        write('?? deve essere : >> assume( < expr > ) <<'),
        nl,
        nl.
 msg(assume,A,2) :-
        write_line(3,[assume,'/',A,': operazione non ancora definita']),
        skip_line(2).
 msg(assume,A,3) :-
        nl,
        tab(3),
        write('assumo gia` : >> '),
        write(A),
        write(' <<'),
        nl,
        nl.
 msg(assume,A,4) :-
        nl,
        tab(3),
        write('?? deve essere : >> assume ( < rel > (<obj1>,<obj2>))'),
        write(' <<'),
        nl,
        nl.

