sábado, 27 de diciembre de 2008

Convert xdxf to StarDict format in Linux

Para convertir de xdxf a StarDict formato es necesario tener instalada la herramienta tabfile o stardict-editor que permite convertir de un formato de texto tabulado a stardict. La herramienta tabfile, en Ubuntu 8.04 se encuenta en la siguiente ruta:

/usr/lib/stardict-tools/tabfile

Ahora sólo queda convertir de xdxf a este formato tabulado, para ello he realizado un pequeño script que usa el awk que lo permite hacer. El script es el siguiente:

----------- INICIO DEL SCRIPT: xdxf2tabfile -----------


#!/bin/bash
###############################################################################
### Script to calculate the estimated time to finish a process. ###
### ###
### LICENSE: ###
### estimatetime is free software: you can redistribute it and/or modify ###
### it under the terms of the GNU General Public License as published by ###
### the Free Software Foundation, either version 3 of the License, or ###
### (at your option) any later version. ###
### ###
### estimatetime is distributed in the hope that it will be useful, ###
### but WITHOUT ANY WARRANTY; without even the implied warranty of ###
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ###
### GNU General Public License for more details. ###
### ###
### You should have received a copy of the GNU General Public License ###
### along with InTiMe. If not, see . ###
### ###
### AUTHORS: ###
### José Manuel Gómez Soriano ###
###############################################################################
usage()
{
echo "Usage:" `basename $0` "file.xdxf > file.tab"
echo " " `basename $0` "-h"
echo `gettext "Convert the xdxf format to a text tab file."`
echo
echo -e " -h\t\t\t"`gettext "Show this help."`
}

while getopts "h" option
do
case "$option" in
h) usage; exit 0;;
[?]) usage; exit 1;;
esac
done
shift $(($OPTIND-1))

if [[ $# -ne 1 ]];
then
echo -e "ERROR: A file xdxf it is necessary as first parameter.\n" > /dev/stderr
usage
exit 1
fi

file=$1

if [[ !( -f $file ) ]]
then
echo -e "ERROR: The first parameter must be a file or -h.\n" > /dev/stderr
usage
exit 1
fi

awk '
BEGIN{
isword=0;
rep[" "]=" ";
rep["ɪ"]="ɪ";
rep["ú"]="ú";
rep["ə"]="ə";
rep["≈"]="≈";
rep["ó"]="ó";
rep["ñ"]="ñ";
rep["æ"]="æ";
rep["é"]="é";
rep["í"]="í";
rep["ʃ"]="ʃ";
rep["ʌ"]="ʌ";
rep["ɔ"]="ɔ";
rep["ʳ"]="ʳ";
rep["ɒ"]="ɒ";
rep["►"]=">";
rep["ɳ"]="ɳ";
rep["ʒ"]="ʒ";
rep["➣"]=">";
rep["á"]="á";
rep["¡"]="¡";
rep["♦"]="♦";
rep["ʊ"]="ʊ";
rep["¿"]="¿";
rep["ɜ"]="ɜ";
rep["ɑ"]="ɑ";
rep["Á"]="Á";
rep["ɵ"]="ɵ";
rep["Ÿ"]="Ÿ";
rep["ð"]="ð";
rep["➙"]=">";
rep["ü"]="ü";
rep["ð"]="ð";
rep["ɲ"]="ɲ";
rep["É"]="É";
rep["Ó"]="Ó";
rep["¨"]="¨";
rep["Í"]="Í";
rep["ê"]="ê";
rep["ª"]="ª";
rep["î"]="î";
rep["´"]="´";
rep["ç"]="ç";
rep["ï"]="ï";
rep["£"]="£";
rep["ɴ"]="ɴ";
rep["ρ"]="ρ";
rep["°"]="°";
rep["ã"]="ã";
rep["ô"]="ô";
rep["‚"]=",";
rep["Ú"]="Ú";
rep["à"]="à";
rep["â"]="â";
rep["è"]="è";
rep["œ"]="œ";
rep["•"]="·";
rep["º"]="º";
rep["è"]="è";
rep["è"]="è";
}
/.*<\/k>/{
gsub("|<\/k>","");
printf("%s\t",$0);
isword=1;
}
/<\/ar>/{print "";isword=0}
/[^<\/ar>]/{
if(isword==1) {
for(ex in rep)
gsub(ex,rep[ex]);
printf("%s\\n",$0)
}
}
' $file


----------- FINAL DEL SCRIPT: xdxf2tabfile -----------

El problema de este script es que no están incluidos todos los caracteres xx; pero si tu archivo xdxf estaba en utf-8 y no utilizaba estos caracteres entonces no habrá ningún problema. También puedes ir añadiendo estos caracteres en el array rep[].

Una vez ha sido creado este script los pasos son los siguientes:

xdxf2tabfile dic.xdxf > dic.tab
tabfile dic.tab

¡Y ha está!

No hay comentarios: