1#!/bin/sh
2# makealias: make alias compressed dic and aff files
3# Usage: alias.sh dic aff (not alias.sh aff dic!)
4# Version: 2007-10-26
5
6case $# in
70|1)
8echo 'makealias: make alias compressed dic and aff files
9Usage: makealias file.dic file.aff (not makefile file.aff file.dic!)' >/dev/stderr
10exit;;
11esac
12
13DIC=`basename $1 .dic`
14AFF=`basename $2 .aff`
15
16# FLAG type definition must be before alias definitions
17grep '^FLAG' $2 >"${AFF}_alias.aff"
18
19awk 'BEGIN{n=1;m=1}
20function cutslash(st) {
21    if (split(st,t,"/") > 1) return t[1]
22    return st
23}
24function ltrim(st) {
25    sub(/^ +/,"",st)
26    return st
27}
28FILENAME ~ /.dic$/ && $1 ~ "/[^ \t]" {
29    split($1,t,"/")
30    if(!a[t[2]]){
31        a[t[2]]=n
32        b[n]=t[2]
33        n++
34    }
35    if (NF > 1) {
36        $1 = ""
37        if(!a2[$0]){
38            a2[$0]=m
39            c[m]=$0
40            m++
41        }
42        print t[1]"/"a[t[2]] "\t" a2[$0]
43    } else {
44        print t[1]"/"a[t[2]]
45    }
46    next
47}
48FILENAME ~ /.dic$/ && NF > 1 {
49    x = $1
50    $1 = ""
51    if(!a2[$0]){
52        a2[$0]=m
53        c[m]=$0
54        m++
55    }
56    print cutslash(x) "\t" a2[$0]
57    next
58}
59FILENAME ~ /.dic$/ { print cutslash($1) }
60FILENAME ~ /.aff$/ && /^[PS]FX/ && ($4 ~ /\/[^	 ]/) && NF > 4 {
61    split($4,t,"/")
62    if(!a[t[2]]){
63        a[t[2]]=n
64        b[n]=t[2]
65        n++
66    }
67    begin = $1 " " $2 " " $3 " " (t[1]"/"a[t[2]]) " " $5
68    if ($6!="") ok = 1; else ok = 0;
69    $1 = ""
70    $2 = ""
71    $3 = ""
72    $4 = ""
73    $5 = ""
74    if(ok){
75        if(!a2[$0]){
76            a2[$0]=m
77            c[m]=$0
78            m++
79        }
80        print begin " " a2[$0] >>"/dev/stderr"
81    } else print begin >>"/dev/stderr"
82    next
83}
84FILENAME ~ /.aff$/ && /^[PS]FX/ && NF > 4 {
85    begin = $1 " " $2 " " $3 " " cutslash($4) " " $5
86    if ($6!="") ok = 1; else ok = 0;
87    $1 = ""
88    $2 = ""
89    $3 = ""
90    $4 = ""
91    $5 = ""
92    if(ok) {
93        if (!a2[$0]){
94            a2[$0]=m
95            c[m]=$0
96            m++
97        }
98        print begin " " a2[$0] >>"/dev/stderr"
99    } else print begin >>"/dev/stderr"
100    next
101}
102FILENAME ~ /.aff$/ { print $0 >>"/dev/stderr" }
103END{
104    if (n>1) {
105        print "AF", n-1 >>"'${AFF}_alias.aff'"
106        for(i=1;i<n;i++) print "AF", b[i],"#",i >>"'${AFF}_alias.aff'"
107    }
108    if (m>1) {
109        print "AM", m-1 >>"'${AFF}_alias.aff'"
110        for(i=1;i<m;i++) print "AM " ltrim(c[i]) >>"'${AFF}_alias.aff'"
111    }
112}' $1 $2 >${DIC}_alias.dic 2>${AFF}_alias.$$
113grep -v '^FLAG' ${AFF}_alias.$$ >>${AFF}_alias.aff
114echo "output: ${DIC}_alias.dic, ${AFF}_alias.aff"
115rm ${AFF}_alias.$$
116