<!--
//*** Danger: l'utilisation illicite de ce programme peut être dangereuse pour votre ordinateur

// Auteur: Renaud Bouret
// Création: 2002-03-24
// Mise à jour: 2002-07-26

// Constantes globales pour tous les modules
var kDelimChamp = "	";
var kUniMin = 19968;
var kUniMax = 40869;
var kCrisse = 147;
var kDebKana = 12354;
var kFinKana = 12538;


function TrouverLigneDef(sDico, sUni) {
//On renvoie la ligne de définition de sUni
//var kUniMin = 19968;  //...définie globalement
var kDelimLig = "*";
//var kDelimChamp = "|";  //...définie globalement
var iDeb;
var iFin;
var sSou;
var tChamp;

    //VerifierCrissage(sDico);
    sSou = "";
    //sUni = sUni & kDelimChamp;  //2002-07-06 pour n'accepter que les Unicode Cjk
    if (sUni < kUniMin) return(""); 
    sUni = CrissageNum(sUni, kCrisse, 48, 57, 1);
    iDeb = sDico.indexOf(sUni);
    if (iDeb != -1) {
        sSou = sDico.substr(iDeb);
        iFin = sSou.indexOf(kDelimLig);
        if (iFin != -1) {
            sSou = sSou.substr(0, iFin);
        }
    }
    return(sSou);
}

function TrouverLigneDefLatin(sDico, sLatin) {
// On renvoie toutes les lignes de définition de car contenant sLatin
// Voir TrouverLigDef pour le principe
// Le mot sLatin reçu ici est en clair
//   et contient au moins quelques lettres (pour éviter de trouver trop de choses)

    sLatin = CrissageNum(sLatin, kCrisse, 48, 255, 1);
    return(TrouverLigneDefNet(sDico, sLatin));
}


function TrouverLigneDefNet(sDico, sPron) {
// On renvoie toutes les lignes de définition de car contenant sPron (mot non encrissé)
// Voir TrouverLigDef pour le principe
// Le mot sPron reçu ici contient au moins quelques lettres (pour éviter de trouver trop de choses)
var kDelimLig = "*";
var iDeb, iFin, sDes, sReste, sLig;

    sDes = "";
    iDeb = sDico.indexOf(sPron);
    while (iDeb != -1) {
        iFin = sDico.indexOf(kDelimLig, iDeb);
        if (iFin != -1) {
            iDeb = sDico.lastIndexOf(kDelimLig, iDeb);  //reculer sur début de ligne
            iDeb = iDeb + 1  //revenir sur le début de la ligne
            sLig = sDico.substr(iDeb, iFin - iDeb);
            sDes = sDes + sLig + kDelimLig;
        }
        iDeb = sDico.indexOf(sPron, iFin);
    }
    return(sDes);
}


function DefExiste(sDico, sUni) {
// Vrai en sortie si sUni se trouve dans le dico
//var kDelimLig = "*";
var iDeb;
//var iFin;
//var sSou;
//var tChamp;

    //VerifierCrissage(sDico);
    sUni = CrissageNum(sUni, kCrisse, 48, 57, 1);
    //sSou = "";
    iDeb = sDico.indexOf(sUni + kDelimChamp);
    if (iDeb != -1)
        return(true);
    else
        return(false);
}


function TrouverHomophones(sDico, sPin) {
//On renvoie la chaîne de tous les caractères homophones à sPin
//sPin se trouve dans le champ [1] des enregistrements
var kDelimLig = "*";
//var kDelimChamp = "|";  ...définie globalement
var iDeb;
var iFin;
var sSou;
var sDes;
var sFouille;
var tChamp;
var sChi;

    //VerifierCrissage(sDico);
    sDes = "";
    iDeb = sDico.indexOf(sPin);
    while (iDeb != -1) {
        iFin = sDico.indexOf(kDelimLig, iDeb);
        if (iFin != -1) {
            iDeb = sDico.lastIndexOf(kDelimLig, iDeb); //reculer sur fin ligne précédente
            iDeb = iDeb + 1;  //revenir sur début ligne actuelle
            sLig = sDico.substr(iDeb, iFin - iDeb);  //extraire ligne actuelle
            tChamp = sLig.split(kDelimChamp);  //découper ligne pour séparer le pinyin [1] du hanzi [0]
            sFouille = " " + tChamp[1] + " ";  //sFouille contient un ou plusieurs pinyin entourés d'espace
            iDeb = sFouille.indexOf(" " + sPin + " ");  //vérifier si pinyin exact est dans sFouille
            if (iDeb != -1) {  //si pinyin dans le bon champ
                sChi = CrissageNum(tChamp[0], kCrisse, 48, 57, 0);
                sDes = sDes + "&#" + sChi + "; " ;  //rajouter hanzi à notre suite (en format &#nnnnn;)
            }
        }
        iDeb = sDico.indexOf(sPin, iFin);
    }
    return(sDes);
}

function TrouverHomophonesVar(sDico, sPin) {
// Comme TrouverHomophones mais sPin peut contenir plusieurs pinyin
// cf: '32793|bà / pá|herse / râteau|*'
var kDelimPin = "/";
var tChamp;
var i;
var sDes;
var re;
var sSou;

    //VerifierCrissage(sDico);
    tChamp = sPin.split(kDelimPin);
    re = / /;
    sDes = "";
    for (i = 0; i < tChamp.length; i++) {
        sSou = tChamp[i];
        sSou = sSou.replace(re, "");
        sSou = TrouverHomophones(sDico, sSou);
        if (sSou != "") {
          if(sDes != "") sSou = " " + kDelimPin + " " + sSou;
          sDes = sDes + sSou + " ";
        }
    }
    return(sDes);
}


var bCrissage = 1;  //contourner decrissage
function VerifierCrissage(s) {
    if (bCrissage == 0) {
        Crissage(s, 169);
        bCrissage = 1;
    }
}
function Crissage(s, iCle) {
var sCar;

    for (i = 0; i < s.length; i++) {
        sCar = s.charCodeAt(i);
        s[i] = sCar + 1;
    }
}
function ZCrissage(s, iCle) {
var i;
var sCar;
var sDes;
    for (i = 0; i < 4; i++) {  //(i = 0; i < s.length; i++)
        //sCar = s[i];
        sCar = sSou.CharAt(i);
        //sCar = s.charCodeAt(i);
        //sCar = s.substring(i, i);
        //sCar = sCar.charCodeAt(0);
        //sDes = sDes ^ iCle;
        sCar = sCar ^ iCle;
        sCar = String.fromCharCode(sCar);
        s[i] = sCar;
    }
//alert(s);
}
-->
