summaryrefslogtreecommitdiffstats
path: root/bin/templ/pbfields
blob: f0a2ff7e29bfc60b5f9b6a065af1a74569259762 (plain)
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
#!/usr/bin/awk -f

BEGIN {
    fieldstr = "pkgname pkgver pkgrel pkgdesc epoch"                    \
        " *arch *license *options"                                      \
        " install changelog"                                            \
        " *depends *makedepends *checkdepends *optdepends"              \
        " *conflicts *provides"                                         \
        " url *source *noextract *md5sums *sha512sums"
    max = split(fieldstr, fields)
    for (i=1; i<=max; i++) {
        if (sub(/^[*]/, "", fields[i])) arrfield[fields[i]] = 1;
        else strfield[fields[i]] = 1;
    }

    COLS = 78
    FS = "\n"; RS = ""
}

NF < 2 { next }

$1 ~ /depends$|conflicts|provides/ {
    for (i=2; i<=NF; i++) $i = sprintf("'%s'", $i)
}

$1 == "source" {
    for (i=2; i<=NF; i++) $i = sprintf("\"%s\"", $i)
}

$1 == "pkgdesc" {
    gsub(/[$"`]/, "\\\\&", $2)
    $2 = sprintf("\"%s\"", $2)
}

strfield[$1] { output[$1] = $2 }

arrfield[$1] {
    output[$1] = wraparray(length($1) + 2)
}

END {
    OFS = "="; ORS = "\n";
    for (i=1; i<=max; i++) {
        name = fields[i]
        if (name in output) print name, output[name]
    }
}

function wraparray (indent)
{
    if (NF == 1) return "()" # this shouldn't happen but just in case.

    line = ""
    delete lines
    linecount = 0

    i = 2
    while (i <= NF) {
        linelen = length(line)

        if ((indent + linelen + 1 + length($i) > COLS) && linelen > 0) {
            lines[++linecount] = line
            line = ""
        }
        else {
            if (linelen == 0) line = $(i++)
            else line = line " " $(i++)
        }
    }

    if (length(line) > 0) lines[++linecount] = line

    indtxt = sprintf("%" indent "s", "")
    txt = "(" lines[1]
    for (i=2; i<=linecount; i++) txt = txt "\n" indtxt lines[i]
    txt = txt ")"

    return txt
}