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

/**********************************************************************
*
*  module   : SxmlNode
*  fichier  : SxmlCount.c
*  Auteur   : Jacques DUCLOY
*  Date     : fin 2017
*
***********************************************************************/
#include <stdio.h>     /* for printf */
#include <stdlib.h>    /* for exit */
#include "SxmlNode.h"

SxmlNode *docInput;

int SxmlNodeCountDocument;
int SxmlNodeCountNode;
int SxmlNodeCountElement;

void countNode(SxmlNode *n1);

void countElement(SxmlNode *x1)
{
  SxmlNode *x2;
  SxmlNode *lAtt;

  SxmlNodeCountNode++;
  SxmlNodeCountElement++;
  SxmlReset(x1);
  while ((x2=SxmlNextNode(x1)))
    {
      countNode(x2);
    }
  if((lAtt=SxmlGetListAttributes(x1)))
    {
      SxmlNode *att;
      while ((att=SxmlNextNode(lAtt)))SxmlNodeCountNode++;
    }
}

void printCount()
{
  printf("%d\t%d\t%d\n",   SxmlNodeCountDocument, SxmlNodeCountElement, SxmlNodeCountNode );
}

void countNode(SxmlNode *n1)
{
  switch(SxmlNodeType(n1))
    {
    case SXML_NODE_ELEMENT:
      countElement(n1);
      break;
    case SXML_NODE_TEXT:
      SxmlNodeCountNode++;
      break;
    }
}

int main (int argc, char **argv) 
{
  int cycle;
  int nCycle;
  cycle=500;
  nCycle=cycle;
  SxmlNodeCountDocument=0;
  SxmlNodeCountNode=0;
  SxmlNodeCountElement=0;
  while ((docInput=SxmlInputNextDocumentElement()))
    {
      SxmlNodeCountDocument++;
      countNode(docInput);
      nCycle--;
      if (nCycle==0)
	{
	  printCount();
	  nCycle=cycle;
	}
    }
  printCount();
}
