/***********************************************************************
*
*      Projet  : DilibPro
*      Module  : Sgml
*      Fichier : SgmlLeaf.c
*      Auteur  : J. Ducloy
*
*      Derniere mise a jour Novembre 94
*
*      $Id: SgmlLeaf.c,v 1.2 2005/06/22 13:35:32 parmentf Exp $
*
************************************************************************
*
* Copyright (c) 1994 CNRS/CRIN & INRIA Lorraine
* 
************************************************************************/
#include "SgmlNode.h"

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

/************************************************************************
*                  SgmlCreateLeaf
*
*   fonction de creation d'une feuille reduite a une balise et une donnee
*
*
***************************************************************************/

SgmlNode  *SgmlCreateLeaf(char *Gid, char *data)
{
      SgmlNode *Mark;

      Mark = SgmlCreateMark(Gid);
      SgmlAddData(Mark,data);

      return (Mark);
}

/***********************************************************************
*
*          predicat SgmlIsLeaf
*
***********************************************************************/
SgmlNode *SgmlIsLeaf(SgmlNode *n)
{
  SgmlNode *son;

  if (!n)return (NULL);
  if (!(son=SgmlFirst(n))) return(NULL);
  if (SgmlNext(son)) return(NULL);
  if (SgmlTypeData(son)) return(n);
  else return(NULL);
}

/************************************************************************
*
*         SgmlLeafGetData
*
*************************************************************************/
char *SgmlLeafGetData(SgmlNode *leaf)
{
  if (leaf)
    {
      SgmlNode *n1;
      if ((n1=SgmlFirst(leaf))) return (SgmlDataString(n1));
      else return NULL;
    }
  else return (NULL);
}

/**************************************************************************
*
* SgmlLeafStrncpy
*
* realisation de la fonction strncpy sur la partie data d'un leaf
*
***************************************************************************/
char *SgmlLeafStrncpy(SgmlNode *leaf, char *str, int n)
{
      SgmlNode *dataNode;
      if((dataNode=SgmlFirst(leaf)));
      else SgmlAddLast(leaf,(dataNode=SgmlCreateData()));
      return(SgmlDataStrncpy(dataNode, str,n));
}

/**************************************************************************
*
* SgmlLeafStrcat
*
* realisation de la fonction strcat sur la partie data d'un leaf
*
***************************************************************************/
char *SgmlLeafStrCat(SgmlNode *leaf, char *str)
{
      SgmlNode *dataNode;
      if((dataNode=SgmlFirst(leaf)));
      else SgmlAddLast(leaf,(dataNode=SgmlCreateData()));
      return (SgmlDataStrCat(dataNode, str));
}

/**************************************************************************
*
* SgmlCreateLeafStrncpy
*
* creation d'un leaf avec strncpy
*
***************************************************************************/
SgmlNode  *SgmlCreateLeafStrncpy(char *Gid, char *data, int n)
{
      SgmlNode *leaf;
      SgmlNode *dataNode;

      leaf = SgmlCreateMark(Gid);
      SgmlAddLast(leaf,(dataNode=SgmlCreateData()));
      SgmlDataStrncpy(dataNode, data ,n);

      return (leaf);
}

