File: drawtree

package info (click to toggle)
wims 2%3A4.29a%2Bdfsg1-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 185,704 kB
  • sloc: xml: 366,687; javascript: 120,570; ansic: 62,341; java: 62,170; sh: 7,744; perl: 3,937; yacc: 3,217; cpp: 1,915; lex: 1,805; makefile: 1,084; lisp: 914; pascal: 601; python: 520; php: 318; asm: 7
file content (151 lines) | stat: -rw-r--r-- 5,218 bytes parent folder | download | duplicates (2)
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
!if $wims_read_parm!=slib_header
  !goto proc
!endif
slib_author=Bernadette, Perrin-Riou

slib_example=[1,2,3;2,4,5;3,6,7],[[A,B,C],[a,b,c,d,e,f]],middle point\
[1,2,3;2,4,5;3,6,7],[[A,B,C],[a,b,c,d,e]],middle point html

!exit

:proc

!reset slib_segments slib_texts slib_circles slib_disks
!distribute item $wims_read_parm into slib_G,slib_text
slib_doption=!item 3 to -1 of $wims_read_parm
slib_option=$slib_doption
!default slib_color1=blue
!default slib_color2=lightgreen
!default slib_color3=lightyellow
slib_text=!declosing $slib_text
!if [ isin $slib_text
  !distribute item $slib_text into slib_textp, slib_textm
!else
  slib_textp=$slib_text
!endif
slib_textp=!declosing $slib_textp
slib_textm=!declosing $slib_textm
slib_G=!declosing $slib_G
slib_G=!translate internal ; to $\
$ in $slib_G
slib_col=!column 1 of $slib_G
slib_NG=!linecnt $slib_G
slib_n=!lines2items $slib_G
slib_n=!listuniq $slib_n
## slib_n=!item -1 of $slib_n
slib_complement=!listcomplement $slib_col in $slib_n
!for slib_i in $slib_complement
  slib_G=!append line $slib_i to $slib_G
!next slib_i
!read slib/data/columnsort 1,numeric, $slib_G
slib_G=$slib_out
slib_n=!linecnt $slib_G
slib_A1=0
slib_height1=1
slib_sizey=1
slib_cnt1=0
slib_cnt=1
slib_width1=15
slib_Sizey=0
slib_position=$empty

slib_milieu=0,-1
!for slib_k=1 to $slib_n
  slib_L=!line $slib_k of $slib_G
  slib_i=!item 1 of $slib_L
  slib_position_prov=$(slib_A$slib_i),$[-$(slib_height$slib_i)]
  slib_position=!append line $slib_position_prov to $slib_position
  slib_a=!item 2 to -1 of $slib_L
  slib_ss=!itemcnt $slib_L
  !for slib_b in $slib_a
    slib_j=!positionof $slib_b in $slib_a
    !if $slib_b <> 0 and $slib_b<>$empty
      slib_jj=$[$slib_cnt+1]
      #sa hauteur
      slib_height$slib_jj=$[$(slib_height$slib_i)+1]
      #la hauteur de l'arbre
      slib_sizey=$[max($slib_sizey, $(slib_height$slib_jj))]
      # Ne sert  rien ?
      slib_cnt$(slib_height$slib_jj)=$[$(slib_cnt$(slib_height$slib_jj))+1]
      #nombre de sommets
      slib_cnt=$[$slib_cnt +1]
      #position
      slib_test=$[($slib_ss)%2]
      !ifval $slib_test=1
        slib_A$slib_jj=$[$(slib_A$slib_i)+($slib_j-($slib_ss)/2)*$(slib_width$slib_i)]
      !else
        slib_A$slib_jj=$[$(slib_A$slib_i)+($slib_j-($slib_ss)/2-1)*$(slib_width$slib_i)]
      !endif
      #calcul de la largeur donne au sommet $slib_jj pour ses fils ventuels
      slib_width$slib_jj=$[$(slib_width$slib_i)/($slib_ss-0.5)]
      slib_milieu_prov=$[($(slib_A$slib_i)+2*$(slib_A$slib_jj))/3],$[-($(slib_height$slib_i)+2*$(slib_height$slib_jj))/3]
      slib_milieu=!append line $slib_milieu_prov to $slib_milieu
    !endif
  !next slib_b
!next slib_k
slib_s=!line -1 of $slib_position
slib_s=!item 1 of $slib_s

#Trace du dessin
slib_dessin=xrange $[-($slib_s)-5], $[$slib_s+5]\
yrange $[-($slib_sizey)-0.5],-0.5\
linewidth 2
slib_cnt=!linecnt $slib_G
!for slib_k=1 to $slib_cnt
  slib_u=!line $slib_k of $slib_G
  slib_i=!item 1 of $slib_u
  slib_u=!item 2 to -1 of $slib_u
  slib_position_prov=!line $slib_k of $slib_position
  !for slib_j in $slib_u
    !if $slib_j notsametext sentinelle
      #trace de la droite
      slib_position_prov1=!line $slib_j of $slib_position
      slib_segments=!append item $slib_position_prov,$slib_position_prov1 to $slib_segments
      #on coupe les segments au milieu pour mettre un cercle et ventuellement du texte

      !if middle iswordof $slib_doption
        slib_milieu_prov=!line $slib_j of $slib_milieu
        slib_disks=!append line disk $slib_milieu_prov,30,white to $slib_disk
        slib_circles=!append line fcircle $slib_milieu_prov, 30,$slib_color3 to $slib_circles
        !if $slib_textm <> $empty
          slib_textk=!item $slib_j of $slib_textm
          slib_milieu_prov1=!item 1 of $slib_milieu_prov
          slib_milieu_prov2=!item 2 of $slib_milieu_prov
          slib_milieu_prov=$[$slib_milieu_prov1-0.9], $[$slib_milieu_prov2+0.1]
          slib_texts=!append line text black,$slib_milieu_prov, large,$slib_textk to $slib_texts
        !endif
      !endif
    !endif
  !next slib_j
  !if point iswordof $slib_doption
    slib_disks=!append line disk $slib_position_prov,30,white to $slib_disks
    slib_circles=!append line fcircle $slib_position_prov,30,$slib_color2 to $slib_circles
  !endif
  !if $(slib_textp[$slib_k]) <> $empty
    slib_position_prov1=!item 1 of $slib_position_prov
    slib_position_prov2=!item 2 of $slib_position_prov
    slib_position_prov=$[$slib_position_prov1-0.9], $[$slib_position_prov2+0.1]
    slib_texts=!append line text black,$slib_position_prov, large,$(slib_textp[$slib_k]) to $slib_texts
  !endif
!next slib_k
slib_dessin=xrange $[-($slib_s)-5], $[$slib_s+5]\
yrange $[-($slib_sizey)-0.5],-0.5\
linewidth 2\
segments $slib_color1, $slib_segments\
$slib_disks\
$slib_circles\
$slib_texts

slib_out=$slib_dessin
!if url iswordof $slib_doption or html iswordof $slib_doption
  insdraw_size=300,300
  !insdraw $slib_out
  slib_out=$ins_url
  !if html iswordof $slib_doption
    slib_out=<img src="$ins_url" alt="">
  !else
    slib_out=$slib_out,[$slib_G],[$slib_position],[$slib_milieu],$insdraw_size
  !endif
!else
   slib_out=[$slib_dessin],[$slib_G],[$slib_position],[$slib_milieu]
!endif