Blame


1 aa83d772 2004-05-17 devnull awk ' # gen.key
2 aa83d772 2004-05-17 devnull # Input: Each input line has one of the following two forms:
3 aa83d772 2004-05-17 devnull # string (tab) numlist
4 aa83d772 2004-05-17 devnull # string " %key " sort.key (tab) numlist
5 aa83d772 2004-05-17 devnull # Output: Each output line has the form:
6 aa83d772 2004-05-17 devnull # sort.key (tab) string (tab) numlist
7 aa83d772 2004-05-17 devnull
8 aa83d772 2004-05-17 devnull BEGIN { FS = OFS = "\t" }
9 aa83d772 2004-05-17 devnull
10 aa83d772 2004-05-17 devnull / %key / { # use sort.key if it is provided
11 aa83d772 2004-05-17 devnull i = index($1, " %key ")
12 aa83d772 2004-05-17 devnull print substr($1, i+6), substr($1, 1, i-1), $2
13 aa83d772 2004-05-17 devnull next
14 aa83d772 2004-05-17 devnull }
15 aa83d772 2004-05-17 devnull
16 aa83d772 2004-05-17 devnull { # generate sort.key (in $2, by modifying string) if it is not provided
17 aa83d772 2004-05-17 devnull $3 = $2
18 aa83d772 2004-05-17 devnull $2 = $1
19 aa83d772 2004-05-17 devnull
20 aa83d772 2004-05-17 devnull #Modify sort.key
21 aa83d772 2004-05-17 devnull # Remove some troff commands
22 aa83d772 2004-05-17 devnull gsub(/\\f\(..|\\f.|\\s[+-][0-9]|\\s[0-9][0-9]?/, "", $2)
23 aa83d772 2004-05-17 devnull
24 aa83d772 2004-05-17 devnull # underscore -> 0, so "foo_gorp" sorts before "food"
25 aa83d772 2004-05-17 devnull gsub(/_/, "0", $2)
26 aa83d772 2004-05-17 devnull
27 aa83d772 2004-05-17 devnull # quote character is %, space character is ~
28 aa83d772 2004-05-17 devnull quoted = 0
29 aa83d772 2004-05-17 devnull if ($2 ~ /%/) { # hide quoted literals in Q
30 aa83d772 2004-05-17 devnull quoted = 1
31 aa83d772 2004-05-17 devnull gsub(/%%/, "QQ0QQ", $2)
32 aa83d772 2004-05-17 devnull gsub(/%\[/, "QQ1QQ", $2)
33 aa83d772 2004-05-17 devnull gsub(/%\]/, "QQ2QQ", $2)
34 aa83d772 2004-05-17 devnull gsub(/%\{/, "QQ3QQ", $2)
35 aa83d772 2004-05-17 devnull gsub(/%\}/, "QQ4QQ", $2)
36 aa83d772 2004-05-17 devnull gsub(/%~/, "QQ5QQ", $2)
37 aa83d772 2004-05-17 devnull }
38 aa83d772 2004-05-17 devnull gsub(/%e/, "\\", $2) # implement troff escape
39 aa83d772 2004-05-17 devnull gsub(/~/, " ", $2) # remove tildes
40 aa83d772 2004-05-17 devnull gsub(/[%\[\]\{\}]/, "", $2) # remove % and font-changing []{}
41 aa83d772 2004-05-17 devnull if (quoted) { # restore literals but without escape charcter
42 aa83d772 2004-05-17 devnull gsub(/QQ0QQ/, "%", $2)
43 aa83d772 2004-05-17 devnull gsub(/QQ1QQ/, "[", $2)
44 aa83d772 2004-05-17 devnull gsub(/QQ2QQ/, "]", $2)
45 aa83d772 2004-05-17 devnull gsub(/QQ3QQ/, "{", $2)
46 aa83d772 2004-05-17 devnull gsub(/QQ4QQ/, "}", $2)
47 aa83d772 2004-05-17 devnull gsub(/QQ5QQ/, "~", $2)
48 aa83d772 2004-05-17 devnull }
49 aa83d772 2004-05-17 devnull if ($2 ~ /^[^a-zA-Z]+$/) # purely nonalphabetic lines go first
50 aa83d772 2004-05-17 devnull $2 = " " $2
51 aa83d772 2004-05-17 devnull else if ($2 ~ /^[0-9]/) # lines with eading digits come next
52 aa83d772 2004-05-17 devnull $2 = " " $2
53 aa83d772 2004-05-17 devnull # otherwise whatever final.sort does
54 aa83d772 2004-05-17 devnull }
55 aa83d772 2004-05-17 devnull
56 aa83d772 2004-05-17 devnull { print $2, $1, $3 }
57 aa83d772 2004-05-17 devnull ' $*