Ice Sheet System Model  4.18
Code documentation
KML_Unknown.cpp
Go to the documentation of this file.
1 
5 /*Headers:*/
6 /*{{{*/
7 #ifdef HAVE_CONFIG_H
8  #include <config.h>
9 #else
10 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11 #endif
12 
13 #include "./KMLFileReadUtils.h"
14 #include "./KML_Unknown.h"
15 #include "../shared/shared.h"
16 /*}}}*/
17 
18 /*Constructors/destructor/copy*/
20 
21  name =NULL;
22  value =NULL;
23 
24 }
25 /*}}}*/
27 
28  if (name ) xDelete<char>(name);
29  if (value ) xDelete<char>(value);
30 
31 }
32 /*}}}*/
33 
34 /*Other*/
35 void KML_Unknown::Echo(){/*{{{*/
36 
37  bool flag=true;
38 
39  if(flag) _printf0_("KML_Unknown " << name << ":\n");
41 
42  if(value){
43  if(flag) _printf0_(" value: \"" << value << "\"\n");
44  }
45  else{
46  if(flag) _printf0_(" value: [none]\n");
47  }
48 
49  return;
50 }
51 /*}}}*/
52 void KML_Unknown::DeepEcho(){/*{{{*/
53 
54  char indent[81]="";
55 
56  KML_Unknown::DeepEcho(indent);
57 
58  return;
59 }
60 /*}}}*/
61 void KML_Unknown::DeepEcho(const char* indent){/*{{{*/
62 
63  char* valuei;
64  char* vtoken;
65  char nl[]={'\n','\0'};
66  bool flag=true;
67 
68  if(flag) _printf0_(indent << "KML_Unknown " << name << ":\n");
69  KML_Object::DeepEcho(indent);
70 
71  if (value ) {
72  valuei=xNew<char>(strlen(value)+1);
73  memcpy(valuei,value,(strlen(value)+1)*sizeof(char));
74 
75  vtoken=strtok(valuei,nl);
76  if(flag) _printf0_(indent << " value: \"" << vtoken);
77 
78  while((vtoken=strtok(NULL,nl)))
79  if(flag) _printf0_("\n" << indent << " " << vtoken);
80  if(flag) _printf0_("\"\n");
81 
82  xDelete<char>(valuei);
83  }
84  else
85  if(flag) _printf0_(indent << " value: [none]\n");
86 
87  return;
88 }
89 /*}}}*/
90 void KML_Unknown::Write(FILE* filout,const char* indent){/*{{{*/
91 
92  char* valuei;
93  char* vtoken;
94  char nl[]={'\n','\0'};
95 
96  fprintf(filout,"%s<%s",indent,name);
97  WriteAttrib(filout," ");
98  fprintf(filout,">\n");
99  WriteCommnt(filout,indent);
100 
101  if (value ) {
102  valuei=xNew<char>(strlen(value)+1);
103  memcpy(valuei,value,(strlen(value)+1)*sizeof(char));
104 
105  vtoken=strtok(valuei,nl);
106  fprintf(filout,"%s %s\n",indent,vtoken);
107 
108  while((vtoken=strtok(NULL,nl)))
109  fprintf(filout,"%s %s\n",indent,vtoken);
110 
111  xDelete<char>(valuei);
112  }
113 
114  KML_Object::Write(filout,indent);
115 
116  fprintf(filout,"%s</%s>\n",indent,name);
117 
118  return;
119 }
120 /*}}}*/
121 void KML_Unknown::Read(FILE* fid,char* kstr){/*{{{*/
122 
123  char* kstri;
124  char* value2=NULL;
125  int ncom=0;
126  char** pcom=NULL;
127  char nl[]={'\n','\0'};
128 
129 /* get object name */
130 
131  name=KMLFileTagName(NULL,
132  kstr);
133 // _printf0_("KML_Unknown::Read -- opening name=" << name << ".\n");
134 
135 /* get object attributes and check for solo tag */
136 
137  if (KMLFileTagAttrib(this,
138  kstr))
139  return;
140 
141 /* loop over and process fields within opening and closing tags */
142 
143  while((kstri=KMLFileToken(fid, &ncom,&pcom))){
144 // _printf0_("KML_Unknown::Read -- kstri=" << kstri << ".\n");
145  if (!strncmp(&kstri[0],"</", 2) &&
146  !strncmp(&kstri[2],name,strlen(name))) {
147 // _printf0_("KML_Unknown::Read -- closing name=" << name << ".\n");
148  xDelete<char>(kstri);
149  break;
150  }
151  else if (!strncmp(kstri,"</",2))
152  {_error_("KML_Unknown::Read -- Unexpected closing tag " << kstri << ".\n");}
153 
154  else if (strncmp(kstri,"<",1)) {
155  if (value) {
156  value2=xNew<char>(strlen(value)+1+strlen(kstri)+1);
157  memcpy(value2,value,(strlen(value)+1)*sizeof(char));
158  xDelete<char>(value);
159  value=value2;
160  value2=NULL;
161 // value=(char *) xrealloc(value,(strlen(value)+1+strlen(kstri)+1)*sizeof(char));
162  strcat(value,nl);
163  strcat(value,kstri);
164  }
165  else {
166  value=xNew<char>(strlen(kstri)+1);
167  memcpy(value,kstri,(strlen(kstri)+1)*sizeof(char));
168  }
169  }
170 
171  else if (!strncmp(kstri,"<",1))
172  KML_Object::Read(fid,kstri);
173 
174  xDelete<char>(kstri);
175  }
176 
177  this->AddCommnt(ncom,pcom);
178 
179  for(ncom=ncom; ncom>0; ncom--)
180  xDelete<char>(pcom[ncom-1]);
181  xDelete<char*>(pcom);
182 
183  return;
184 }
185 /*}}}*/
KML_Unknown::DeepEcho
void DeepEcho()
Definition: KML_Unknown.cpp:52
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
KML_Object::WriteAttrib
virtual void WriteAttrib(FILE *fid, const char *indent)
Definition: KML_Object.cpp:288
KMLFileTagName
char * KMLFileTagName(char *pname, char *ktag)
Definition: KMLFileReadUtils.cpp:236
KML_Unknown::~KML_Unknown
~KML_Unknown()
Definition: KML_Unknown.cpp:26
KMLFileReadUtils.h
: header file for kml file reading utilities.
KMLFileTagAttrib
int KMLFileTagAttrib(KML_Object *kobj, char *ktag)
Definition: KMLFileReadUtils.cpp:287
KML_Object::Read
virtual void Read(FILE *fid, char *kstr)=0
Definition: KML_Object.cpp:143
KMLFileToken
char * KMLFileToken(FILE *fid, int *pncom=NULL, char ***ppcom=NULL)
Definition: KMLFileReadUtils.cpp:18
KML_Object::Write
virtual void Write(FILE *fid, const char *indent)=0
Definition: KML_Object.cpp:122
KML_Unknown::Write
void Write(FILE *fid, const char *indent)
Definition: KML_Unknown.cpp:90
KML_Object::DeepEcho
virtual void DeepEcho()
Definition: KML_Object.cpp:72
KML_Unknown::Read
void Read(FILE *fid, char *kstr)
Definition: KML_Unknown.cpp:121
KML_Unknown::KML_Unknown
KML_Unknown()
Definition: KML_Unknown.cpp:19
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
KML_Object::Echo
virtual void Echo()
Definition: KML_Object.cpp:61
KML_Unknown::name
char * name
Definition: KML_Unknown.h:18
KML_Unknown::Echo
void Echo()
Definition: KML_Unknown.cpp:35
KML_Unknown.h
: header file for kml_unknown object
KML_Object::AddCommnt
virtual void AddCommnt(int ncom, char **pcom)
Definition: KML_Object.cpp:301
KML_Object::WriteCommnt
virtual void WriteCommnt(FILE *fid, const char *indent)
Definition: KML_Object.cpp:326
KML_Unknown::value
char * value
Definition: KML_Unknown.h:19