rllib  1
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
Public Member Functions | Private Member Functions | Private Attributes | List of all members
rlSvgCat Class Reference

#include <rlsvgcat.h>

Public Member Functions

 rlSvgCat ()
 
virtual ~rlSvgCat ()
 
int open (const char *infile, const char *outfile=0)
 
int reopenSocket (const char *infile, int s)
 
void cat ()
 
void close ()
 

Private Member Functions

int outUntil (int i, const char *tag)
 
int outUntilEnd (int i)
 
int outValue (int i)
 
void catline ()
 

Private Attributes

void * fin
 
void * fout
 
int s
 
char line [256 *256]
 

Detailed Description

This class will normalize SVG XML files so that

  • lines are left justified
  • 1 tag per line

Definition at line 26 of file rlsvgcat.h.

Constructor & Destructor Documentation

rlSvgCat::rlSvgCat ( )

Definition at line 21 of file rlsvgcat.cpp.

{
fin = fout = 0;
s = -1;
}
rlSvgCat::~rlSvgCat ( )
virtual

Definition at line 27 of file rlsvgcat.cpp.

{
close();
}

Member Function Documentation

void rlSvgCat::cat ( )

Definition at line 95 of file rlsvgcat.cpp.

{
while(fgets(line,sizeof(line)-1,(FILE *) fin) != 0)
{
}
}
void rlSvgCat::catline ( )
private

Definition at line 182 of file rlsvgcat.cpp.

{
int i = 0;
FILE *out = (FILE *) fout;
while(line[i] != '\0' && line[i] != '\n')
{
while(line[i] == ' ' || line[i] == '\t' ) i++; // eliminate leading spaces
// compare tags
if (strncmp(&line[i],"<?",2) == 0)
{
fputc(line[i++],out);
fputc(line[i++],out);
i = outUntil(i,"?>");
fputc('\n',out);
}
else if(strncmp(&line[i],"<!",2) == 0) // comment
{
fprintf(out,"%s",&line[i]);
if(strstr(&line[i],">") != NULL) return;
while(fgets(line,sizeof(line)-1,(FILE *) fin) != 0)
{
fprintf(out,"%s",line);
if(strstr(line,">") != NULL) return;
}
return;
}
else if(strncmp(&line[i],"<desc",5) == 0)
{
fprintf(out,"%s",&line[i]);
return;
}
else if(strncmp(&line[i],"</",2) == 0)
{
if(strncmp(&line[i],"</svg>",6) == 0)
{
fprintf(out,"</svg>");
return;
}
if(strncmp(&line[i],"</SVG>",6) == 0)
{
fprintf(out,"</SVG>");
return;
}
fputc(line[i++],out);
fputc(line[i++],out);
i = outUntil(i,">");
fputc('\n',out);
}
else if(strncmp(&line[i],"<",1) == 0)
{
fputc(line[i++],out);
i = outUntilEnd(i);
}
else if(strncmp(&line[i],"/>",2) == 0)
{
fputc(line[i++],out);
fputc(line[i++],out);
fputc('\n',out);
}
else if(strncmp(&line[i],">",1) == 0)
{
fputc(line[i++],out);
fputc('\n',out);
}
else
{
i = outValue(i);
fputc('\n',out);
}
i++;
}
}
void rlSvgCat::close ( )

Definition at line 32 of file rlsvgcat.cpp.

{
if(s == -1)
{
if(fout != 0 && fout != stdout) fclose((FILE *) fout);
}
else
{
fflush((FILE *) fout);
}
if(fin != 0) fclose((FILE *) fin);
fin = fout = 0;
}
int rlSvgCat::open ( const char *  infile,
const char *  outfile = 0 
)

Definition at line 46 of file rlsvgcat.cpp.

{
fin = fout = NULL;
fin = (void *) fopen(infile,"r");
if(fin == 0)
{
printf("could not open %s\n",infile);
return -1;
}
if(outfile != 0)
{
fout = (void *) fopen(outfile,"w");
if(fout == 0)
{
printf("could not write %s\n",outfile);
return -1;
}
}
else
{
fout = (void *) stdout;
}
return 0;
}
int rlSvgCat::outUntil ( int  i,
const char *  tag 
)
private

Definition at line 103 of file rlsvgcat.cpp.

{
FILE *out = (FILE *) fout;
int len = strlen(tag);
while(line[i] != '\0' && line[i] != '\n')
{
if(strncmp(&line[i],tag,len) == 0)
{
for(int it=0; it<len; it++)
{
fputc(line[i++],out);
}
if(line[i] == '<') i--;
break;
}
else
{
fputc(line[i++],out);
}
}
return i;
}
int rlSvgCat::outUntilEnd ( int  i)
private

Definition at line 126 of file rlsvgcat.cpp.

{
FILE *out = (FILE *) fout;
while(line[i] != '\0' && line[i] != '\n')
{
if(line[i] == '>')
{
//xlehrig fputc(line[i++],out);
fputc(line[i],out);
break;
}
if(line[i] == ' ' || line[i] == '\t')
{
break;
}
else
{
fputc(line[i++],out);
}
}
fputc('\n',out);
return i;
}
int rlSvgCat::outValue ( int  i)
private

Definition at line 150 of file rlsvgcat.cpp.

{
//printf("outValue=%s",&line[i]);
FILE *out = (FILE *) fout;
while(line[i] != '\0' && line[i] != '\n')
{
if(line[i] == '<')
{
i--;
break;
}
else if(line[i] == '>')
{
fputc('\n',out);
fputc(line[i],out);
break;
}
else if(line[i] == '/' && line[i+1] == '>')
{
fputc('\n',out);
fputc(line[i++],out);
fputc(line[i],out);
break;
}
else
{
fputc(line[i++],out);
}
}
return i;
}
int rlSvgCat::reopenSocket ( const char *  infile,
int  s 
)

Definition at line 71 of file rlsvgcat.cpp.

{
s = socket;
if(s < 0)
{
s = -1;
return -1;
}
fin = fout = NULL;
fin = (void *) fopen(infile,"r");
if(fin == 0)
{
printf("could not open %s\n",infile);
return -1;
}
fout = fdopen(s,"w");
if(fout == NULL)
{
s = -1;
return -1;
}
return 0;
}

Member Data Documentation

void* rlSvgCat::fin
private

Definition at line 40 of file rlsvgcat.h.

void * rlSvgCat::fout
private

Definition at line 40 of file rlsvgcat.h.

char rlSvgCat::line[256 *256]
private

Definition at line 42 of file rlsvgcat.h.

int rlSvgCat::s
private

Definition at line 41 of file rlsvgcat.h.


The documentation for this class was generated from the following files: