File: grtoj.sh

package info (click to toggle)
jgraph 83-25
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,008 kB
  • sloc: ansic: 4,596; makefile: 145; sh: 106; awk: 104
file content (117 lines) | stat: -rw-r--r-- 3,066 bytes parent folder | download | duplicates (6)
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
#!/bin/sh

nawk '

BEGIN {
	xmarksize = ymarksize = .3
	marktype = "circle"
	vfont = "Times-Roman"
	vfontsize = 8
	efont = "Times-Roman"
	efontsize = 8
	fill = 1.
	xs = ys = 1.
	xmin = ymin = 999999.
	xmax = ymax = -999999.
	n = 0
	m = 0
	mode = 0
	NOLABEL = "_NOLABEL"
	pi = 3.141593
	deg90 = pi / 2.
	elabdist = .1
	vlab = elab = 1
	larrows = rarrows = 0
}

NF == 0 || substr($1, 1, 1) == "#" { next }

$1 == "xmarksize" { xmarksize = $2 ; next }
$1 == "ymarksize" { ymarksize = $2 ; next }
$1 == "marksize" { xmarksize = ymarksize = $2 ; next }
$1 == "marktype" { marktype = $2 ; next }
$1 == "vfont" { vfont = $2 ; next }
$1 == "vfontsize" { vfontsize = $2 ; next }
$1 == "efont" { efont = $2 ; next }
$1 == "efontsize" { efontsize = $2 ; next }
$1 == "font" { vfont = efont = $2 ; next }
$1 == "fontsize" { vfontsize = efontsize = $2 ; next }
$1 == "fill" { fill = $2 ; next }
$1 == "xs" { xs = $2 ; next }
$1 == "ys" { ys = $2 ; next }
$1 == "scale" { xs = ys = $2 ; next }
$1 == "elabdist" { elabdist = $2 ; next }
$1 == "vlab" { vlab = $2 ; next }
$1 == "elab" { elab = $2 ; next }
$1 == "lab" { vlab = elab = $2 ; next }
$1 == "larrows" { larrows = $2 ; next }
$1 == "rarrows" { rarrows = $2 ; next }
$1 == "arrows" { larrows = rarrows = $2 ; next }

$1 == "edges" {
	mode = 1
	printf "newgraph\n"
	printf "xaxis min %f max %f size %f nodraw\n", xmin, xmax, (xmax - xmin) * xs
	printf "yaxis min %f max %f size %f nodraw\n\n", ymin, ymax, (ymax - ymin) * ys
	next
}

$1 == "raw" { mode = 2 ; next }

{
	if (!mode) {
		x[n] = $1
		y[n] = $2
		vlabel[n] = (NF == 3 ? $3 : n)
		if (x[n] < xmin) xmin = x[n]
		else if (x[n] > xmax) xmax = x[n]
		if (y[n] < ymin) ymin = y[n]
		else if (y[n] > ymax) ymax = y[n]
		n++
	}
	else if (mode == 1) {
		src[m] = label_to_node($1)
		dst[m] = label_to_node($2)
		elabel[m] = (NF == 3 ? $3 : NOLABEL)
		m++
	}
	else
		print $0
}

END {
	printf "\n"
	for (i = 0; i < n; i++) {
		printf "newline marktype %s marksize %f %f fill %f pts %f %f\n", marktype, xmarksize, ymarksize, fill, x[i], y[i]
		if (vlab)
			printf "newstring x %f y %f vjc hjc font %s fontsize %d : %s\n", x[i], y[i], vfont, vfontsize, vlabel[i]
	}
	printf "\n"
	for (i = 0; i < m; i++) {
		printf "newline marktype %s marksize %f %f fill %f pts %f %f %f %f ", marktype, xmarksize, ymarksize, fill, x[src[i]], y[src[i]], x[dst[i]], y[dst[i]]
		if (larrows) printf "larrows "
		if (rarrows) printf "rarrows "
		printf "\n"
		if (elab && elabel[i] != NOLABEL) {
			midx = (x[src[i]] + x[dst[i]]) / 2.
			midy = (y[src[i]] + y[dst[i]]) / 2.
			ang = atan2(y[dst[i]] - y[src[i]], x[dst[i]] - x[src[i]])
			nang = ang - deg90
			px = midx + elabdist * cos(nang)
			py = midy + elabdist * sin(nang)
			rot = ang * 180. / pi
			rot = (rot < 0. ? rot + 360. : rot)
			rot = (rot >= 90. && rot <= 270. ? rot + 180. : rot);
			printf "newstring x %f y %f vjc hjc rotate %f font %s fontsize %d : %s\n", px, py, rot, efont, efontsize, elabel[i]
		}
	}
}

function label_to_node(label) {
	for (i = 0; i < n; i++)
		if (vlabel[i] == label)
			return(i)
	return(-1)
}

'