/*   -*- coding: utf-8 -*-  */
/****************************************************************************
*
*     Module SxmlNode
*     Commande : SxmlFindTextBuildDict.c
*
****************************************************************************/


#include <stdio.h>
#include <string.h>

#include "Buffer.h"
#include "SxmlNode.h"

Buffer *bufInput;
Buffer *bufKey;
Buffer *bufLastKey;
SxmlNode *elemNode;
SxmlNode *outputList;
  char *inputStr;
  char *outputKey;


    int getopt();
    extern char *optarg;

void purge()
{
  printf("%s\t", outputKey);
  SxmlPrint(outputList);
  putchar('\n');
  SxmlFree(outputList);
  outputList=NULL;
  free(outputKey);
}

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

  bufInput=NewBuffer();
  bufKey=NewBuffer();
  bufLastKey=NewBuffer();
  outputList=NULL;
  while ((inputStr=BufferGets(bufInput)))
    {
      char *posSep;

      posSep=strpbrk(inputStr," ,-");
      if (posSep) 
	{
	  BufferStrncpy(bufKey, inputStr, posSep-inputStr);
	  if (outputList) 
	    {
	      SxmlNode *listNode;
	      if (strcmp(BufferString(bufLastKey), BufferString(bufKey))!=0)
		{
		  purge();
		  outputKey=strdup(BufferString(bufKey));
		  outputList=SxmlLeafCreate("string", inputStr);
		  BufferStrcpy(bufLastKey,outputKey);
		  continue;
		}
	      if (SxmlNodeHasName(outputList,"word"))
		{
		  listNode=SxmlElementCreate("list");
		  SxmlAppendChild(listNode, SxmlLeafCreate("string", inputStr));
		  SxmlAppendChild(listNode, outputList);
		  outputList=listNode;
		  continue;
		}
	      if (SxmlNodeHasName(outputList,"string"))
		{
		  listNode=SxmlElementCreate("list");
		  if (strlen(inputStr) > strlen(SxmlLeafText(outputList)))
		    {
		      SxmlAppendChild(listNode, SxmlLeafCreate("string", inputStr));
		      SxmlAppendChild(listNode, outputList);
		    }
		  else
		    {
		      SxmlAppendChild(listNode, outputList);
		      SxmlAppendChild(listNode, SxmlLeafCreate("string", inputStr));
		    }
		  outputList=listNode;
		  continue;
		}
	    }
	}
      else
	{
	  if (outputList) purge();
	  outputKey=strdup(inputStr);
	  BufferStrcpy(bufLastKey,outputKey);
	  outputList=elemNode=SxmlLeafCreate("word", inputStr);
	}
    }
  if (outputList) purge();
  exit(EXIT_SUCCESS);
}


