/*   -*- coding: utf-8 -*-  */

/**********************************************************************
*
*  module   : Nlm
*  fichier  : NlmPubMedMeshFre.c
*  Auteur   : Jacques DUCLOY
*  Date     : fin 2017
*
***********************************************************************/

#include <stdio.h>     /* for printf */
#include <stdlib.h>    /* for exit */
#include <getopt.h>
#include "SxPath.h"
#include "Buffer.h"
#include "StrDict.h"
#include "TeiHandler.h"

SxmlNode *docInput;

StrDict *NlmMeshQualifierEnToFr;
StrDict *NlmMeshTermEnToFr;

Buffer *bufPath;
Buffer *bufMesh;

int main()
{
  bufPath=NewBuffer();
  bufMesh=NewBuffer();

  BufferStrcpy(bufPath, getenv("DILIB_BOTTOM"));
  BufferStrcat(bufPath, "/Bases/Nlm/MeshQualifierEnToFr.dict");
  NlmMeshQualifierEnToFr=StrDictFromFile(BufferString(bufPath));

  BufferStrcpy(bufPath, getenv("DILIB_BOTTOM"));
  BufferStrcat(bufPath, "/Bases/Nlm/MeshEnToFr.dict");
  NlmMeshTermEnToFr=StrDictFromFile(BufferString(bufPath));

  while(TeiInputNextRecord())
     {    
       SxmlNode *kwd;
       docInput=SxmlParent (Tei_root);
       kwd=SxmlFirstChild(Tei_textClass);
       while (kwd)
	 {
	   if ((SxmlHasAttribute(kwd, "scheme", "MESH"))
	       &&(SxmlHasAttribute(kwd, "xml:lang", "en")))
	     {
	       char *qualifier;
	       SxmlNode *termNode;
	       qualifier=SxmlGetAttribute(kwd,"qualifier");
	       if(!qualifier)
		 {
		   SxmlReset(kwd);
		   while ((termNode=SxmlNextNode(kwd)))
		     {
		       char *termFr;
		       termFr=StrDictSearch(NlmMeshTermEnToFr, SxmlLeafText(termNode));
		       if (termFr) 
			 {
			   TeiKeywordsPutTerm("MESH", NULL, NULL, "fr", termFr);
			   /* TeiKeywordsPutTerm("KwdFr", NULL, NULL, "fr", termFr); */
			   BufferStrcpy(bufMesh, termFr);
			   BufferStrcat(bufMesh," (MeSH)");
			   TeiKeywordsPutTerm("KwdFr", NULL, NULL, "fr", BufferString(bufMesh));
			 }
		     }
		 }
	       else
		 {
		   char *qualifier2;
		   qualifier2=StrDictSearch(NlmMeshQualifierEnToFr, qualifier);
		   SxmlReset(kwd);
		   while ((termNode=SxmlNextNode(kwd)))
		     {
		       char *termFr;
		       termFr=StrDictSearch(NlmMeshTermEnToFr, SxmlLeafText(termNode));
		       if (termFr) 
			 {
			   TeiKeywordsPutTerm("MESH", NULL, qualifier2, "fr", termFr);
			   BufferStrcpy(bufMesh, termFr);
			   BufferStrcat(bufMesh," (");
			   BufferStrcat(bufMesh, qualifier2);
			   BufferStrcat(bufMesh,")");
			   TeiKeywordsPutTerm("KwdFr", NULL, NULL, "fr", BufferString(bufMesh));
			 }
		     }
		 }
	     }
	   kwd=SxmlNextSibling(kwd);
	 }
       
       SxmlPrint (SxmlInputRecord);
     }
   exit(EXIT_SUCCESS);
}
