64 lines
1.1 KiB
Bash
Executable File
64 lines
1.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
transcode()
|
|
{
|
|
local file
|
|
|
|
if (( $# == 0 )); then
|
|
iconv -f EUC-JP -t UTF-8
|
|
return
|
|
fi
|
|
for file in "$@"; do
|
|
iconv -f EUC-JP -t UTF-8 "$file"
|
|
printf '\n'
|
|
done
|
|
}
|
|
|
|
transcode "$@" | awk '
|
|
function fail(s) {
|
|
print "skk2ktrans: " FILENAME ":" FNR ": " s >"/dev/stderr"
|
|
bad = 1
|
|
exit 1
|
|
}
|
|
function add(k, v, id) {
|
|
sub(/;.*/, "", v)
|
|
if(v == "" || v ~ /^[([#]/ || v ~ /[[:space:]]/)
|
|
return
|
|
id = k SUBSEP v
|
|
if(seen[id])
|
|
return
|
|
seen[id] = 1
|
|
if(!(k in row))
|
|
order[++nkey] = k
|
|
else
|
|
row[k] = row[k] " "
|
|
row[k] = row[k] v
|
|
}
|
|
/^;;/ || /^[[:space:]]*$/ {
|
|
next
|
|
}
|
|
{
|
|
if(!match($0, /[[:space:]]+/))
|
|
fail("missing candidate list")
|
|
key = substr($0, 1, RSTART-1)
|
|
field = substr($0, RSTART+RLENGTH)
|
|
if(key == "" || key ~ /^;/ || field !~ /^\/.*\/$/)
|
|
fail("invalid row")
|
|
if(field ~ /\\/)
|
|
fail("escaped candidates are unsupported")
|
|
if(field ~ /\/[([#]/)
|
|
fail("expression candidates are unsupported")
|
|
n = split(substr(field, 2, length(field)-2), value, "/")
|
|
for(i = 1; i <= n; i++)
|
|
add(key, value[i])
|
|
}
|
|
END {
|
|
if(bad)
|
|
exit 1
|
|
for(i = 1; i <= nkey; i++)
|
|
print order[i] "\t" row[order[i]]
|
|
}
|
|
'
|