/**********************************************************************
*
*  projet   : Infometrics
*  module   : Cluster
*  commande : AssocClusterName
*  fichier  : AssocClusterName.c
*  Auteur   : Jacques DUCLOY
*  Date     : Octobre 93
*  $Id: AssocClusterName.c,v 1.2 2003/03/17 16:25:02 parmentf Exp $
*
***********************************************************************/
#include "ctype.h"
#include "SgmlInput.h"
#include "SgmlPath.h"
#include "StrSearch.h"

extern char *optarg;   
extern int   optind;

char *inputMot1;
char *inputMot2;
char *nameBuf;
int nameBufSize=0;

SgmlNode *cluster;
SgmlNode *listCluster;
StrSearchTable *tableClu;

void dressClu(clu)
     SgmlNode *clu;
{
  SgmlNode *cid;
  cid=SgmlGetSonTag(clu, "cid");
  SgmlAddSon
    (
     clu,
     SgmlCreateLeaf
       (
	"name",
	StrSearch(tableClu,SgmlLeafGetData(cid))
	)
     );
  
}

SgmlNode *lkw;

void addKw(mot)
     SgmlNode *mot;
{
  SgmlNode *kw;
  SgmlAddSon(lkw,kw=SgmlCreateMark("kw"));
  SgmlAddSon(kw, SgmlCreateLeaf("t",SgmlGetFirstData(mot)));
  SgmlAddSon(kw, SgmlCreateLeaf("f",SgmlGetAttValById(mot,"f")));
}


int main(argc,argv)
     int argc;
     char **argv;
{
  char *codeClu;

  listCluster=SgmlCreateMark("list");
  tableClu=StrSearchTableCreate(50,50);

  while(SgmlInputNextRecord())
    {
      int nameLength;
      SgmlAddSon(listCluster,SgmlCut(cluster=SgmlLast(SgmlInputRecord)));

      SgmlPathStrSearchFirstData(cluster, "lmot/1", inputMot1);
      SgmlPathStrSearchFirstData(cluster, "lmot/2", inputMot2);
      nameLength = strlen(inputMot1) +strlen(inputMot2)+4;
      nameBuf=malloc(nameLength);
      strcpy(nameBuf, inputMot1);
      strcat(nameBuf, " - ");
      strcat(nameBuf, inputMot2);

      SgmlAddSon(cluster,SgmlCreateLeaf("name",nameBuf));

      codeClu=SgmlGetAttValById(cluster,"i");
      SgmlAddSon(cluster,SgmlCreateLeaf("code",codeClu));

      StrSearchAdd(tableClu,codeClu,nameBuf);

    }

  if((cluster=SgmlFirst(listCluster)))
    {
      do
	{
	  SgmlNode *son;

	  SgmlPathStrDo(cluster, "lclu/asclu", son, {dressClu(son);});
	  SgmlAddSon(cluster,lkw=SgmlCreateMark("lkw"));
	  SgmlPathStrDo(cluster, "lmot/mot", son, {addKw(son);});
	  SgmlPrint(cluster);
	  putchar ('\n');
	}while((cluster=SgmlNext(cluster)));

    }

  return 0;
}
	
