/***********************************************************************
 *
 *               Projet   : DilibPro
 *               Module   : CharSet
 *               Fichier  : CharSetAtoS.c
 *               Auteur   : J. DUCLOY
 *               Date     : Aout 93
 *  $Id: CharSetAtoS.c,v 1.2 2005/08/30 09:43:24 parmentf Exp $
 ***********************************************************************
 *
 * Copyright (c) 1994 CNRS/CRIN & INRIA Lorraine
 * 
 ***********************************************************************/
#include "CharSetTabO.h"
#include "Buffer.h"
#include <string.h>

char *CharSetAsciiToSgml(char *s1)
{
  static int firstCall=1;
  static Buffer* bufConv;
  int l1;
  int i1;          /* indice s1 */
  int c1;
  
  l1 =strlen (s1);
  if (firstCall)
    {
      firstCall=0;
      bufConv=BufferCreate(l1+1,l1/2+1);
    }
  BufferReset(bufConv);
  i1=0;
  
  while((c1=s1[i1++]&0377))
    {
      switch(c1)
	{
	case '&':
	  BufferStrcat(bufConv,"&amp;");
	  break;
	case '<':
	  BufferStrcat(bufConv,"&lt;");
	  break;
	case '>':
	  BufferStrcat(bufConv,"&gt;");
	  break;
	case '#':
	  BufferStrcat(bufConv,"&num;");
	  break;
	default:
	  if (CharSetTabO[c1]=='#')
	    {
	      BufferCharCat(bufConv,'\\');
              BufferCharCat(bufConv,(((c1&0300)>>6)+'0'));
              BufferCharCat(bufConv,(((c1&070)>>3)+'0'));
              BufferCharCat(bufConv,((c1&7)+'0'));
	    }
	  else
	    {
	      BufferCharCat(bufConv,c1);
	    }
	  break;
	}
    }
  return BufferString(bufConv);
}
