Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
xDataExtras.cc
Go to the documentation of this file.
1/*
2# <<BEGIN-copyright>>
3# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
4# Produced at the Lawrence Livermore National Laboratory
5# Written by Bret R. Beck, [email protected].
6# CODE-461393
7# All rights reserved.
8#
9# This file is part of GIDI. For details, see nuclear.llnl.gov.
10# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
11#
12# Redistribution and use in source and binary forms, with or without modification,
13# are permitted provided that the following conditions are met:
14#
15# 1) Redistributions of source code must retain the above copyright notice,
16# this list of conditions and the disclaimer below.
17# 2) Redistributions in binary form must reproduce the above copyright notice,
18# this list of conditions and the disclaimer (as noted below) in the
19# documentation and/or other materials provided with the distribution.
20# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
21# used to endorse or promote products derived from this software without
22# specific prior written permission.
23#
24# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
25# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
26# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
27# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
28# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
31# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
33# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34# <<END-copyright>>
35*/
36#include <stdio.h>
37#include <stdlib.h>
38#include <string.h>
39
40#include "xData.h"
41
42#if defined __cplusplus
43namespace GIDI {
44using namespace GIDI;
45#endif
46
47typedef struct xmlTextStruct_s {
49 long length;
50 char *text;
52
53static int xData_parseReconstructXML2( xData_rootElement *root, xmlTextStruct *XML, char *text, long textLength );
54static int addStringToXML( xmlTextStruct *XML, char *s, long len );
55static void xData_parseOutlinePrintRoot( FILE *f, xData_rootElement *root, int outputText );
56/*
57************************************************************
58*/
60
61 int err;
62 xmlTextStruct XML = { 0, 0, NULL };
63
64 err = xData_parseReconstructXML2( &(xData_doc->root), &XML, NULL, 0 );
65 //if( err == 0 ) addStringToXML( &XML, "\n", -1 );
66 if( err == 0 ) addStringToXML( &XML, (char*) "\n", -1 );
67 return( XML.text );
68}
69/*
70************************************************************
71*/
72static int xData_parseReconstructXML2( xData_rootElement *root, xmlTextStruct *XML, char *text, long textLength ) {
73
74 long i, textOffset = 0;
75 xData_element *child;
76
77 for( child = root->children; child != NULL; child = child->next ) {
78 //if( textOffset < child->textOffset ) {
79 if( textOffset < (int) child->textOffset ) {
80 if( addStringToXML( XML, &(text[textOffset]), child->textOffset - textOffset ) ) return( 1 );
81 textOffset = child->textOffset;
82 }
83 //if( addStringToXML( XML, "<", -1 ) != 0 ) return( 1 );
84 if( addStringToXML( XML, (char*) "<", -1 ) != 0 ) return( 1 );
85 if( addStringToXML( XML, child->name, -1 ) != 0 ) return( 1 );
86 for( i = 0; i < child->attributes.number; i++ ) {
87 //if( addStringToXML( XML, " ", -1 ) != 0 ) return( 1 );
88 if( addStringToXML( XML, (char*) " ", -1 ) != 0 ) return( 1 );
89 if( addStringToXML( XML, child->attributes.attributes[i].name, -1 ) != 0 ) return( 1 );
90 //if( addStringToXML( XML, "=\"", -1 ) != 0 ) return( 1 );
91 if( addStringToXML( XML, (char*) "=\"", -1 ) != 0 ) return( 1 );
92 if( addStringToXML( XML, child->attributes.attributes[i].value, -1 ) != 0 ) return( 1 );
93 //if( addStringToXML( XML, "\"", -1 ) != 0 ) return( 1 );
94 if( addStringToXML( XML, (char*) "\"", -1 ) != 0 ) return( 1 );
95 }
96 //if( addStringToXML( XML, ">", -1 ) != 0 ) return( 1 );
97 if( addStringToXML( XML, (char*) ">", -1 ) != 0 ) return( 1 );
98 if( xData_parseReconstructXML2( &(child->childrenRoot), XML, child->text.text, child->text.length ) != 0 ) return( 1 );
99 //if( addStringToXML( XML, "</", -1 ) != 0 ) return( 1 );
100 if( addStringToXML( XML, (char*) "</", -1 ) != 0 ) return( 1 );
101 if( addStringToXML( XML, child->name, -1 ) != 0 ) return( 1 );
102 //if( addStringToXML( XML, ">", -1 ) != 0 ) return( 1 );
103 if( addStringToXML( XML, (char*) ">", -1 ) != 0 ) return( 1 );
104 }
105 if( textOffset < textLength ) if( addStringToXML( XML, &(text[textOffset]), textLength - textOffset ) ) return( 1 );
106 return( 0 );
107}
108/*
109************************************************************
110*/
111static int addStringToXML( xmlTextStruct *XML, char *s, long len ) {
112
113 long lenS, length, inc;
114 char *p;
115
116 if( len >= 0 ) {
117 lenS = len; }
118 else {
119 lenS = strlen( s );
120 }
121 length = XML->length + lenS + 1;
122 if( XML->allocated < length ) {
123 inc = ( 140 * XML->allocated ) / 100;
124 if( inc < 10000 ) inc = 10000;
125 if( length < inc ) length = inc;
126 XML->text = (char *) realloc( XML->text, length );
127 XML->allocated = length;
128 if( XML->text == NULL ) return( 1 );
129 }
130 p = &(XML->text[XML->length]);
131 if( len >= 0 ) {
132 strncpy( p, s, len ); }
133 else {
134 strcpy( p, s );
135 }
136 XML->length += lenS;
137 return( 0 );
138}
139/*
140************************************************************
141*/
142int xData_parseOutline( FILE *f, xData_document *xData_doc, int outputText ) {
143
144 xData_parseOutlinePrintRoot( f, &(xData_doc->root), outputText );
145 return( 0 );
146}
147/*
148************************************************************
149*/
150static void xData_parseOutlinePrintRoot( FILE *f, xData_rootElement *root, int outputText ) {
151
152 int i, depth = root->depth;
153 xData_element *child;
154
155 for( child = root->children; child != NULL; child = child->next ) {
156 for( i = 0; i < depth; i++ ) fprintf( f, " " );
157 fprintf( f, "name = %s at line = %ld column = %ld textOffset = %ld; attris:",
158 //child->name, child->docInfo.line, child->docInfo.column, child->textOffset );
159 child->name, (long int)child->docInfo.line, (long int)child->docInfo.column, (long int)child->textOffset );
160 for( i = 0; i < child->attributes.number; i++ ) {
161 fprintf( f, " %s = \"%s\"", child->attributes.attributes[i].name, child->attributes.attributes[i].value );
162 }
163 if( outputText && child->text.text != NULL ) fprintf( f, "; text: %s", child->text.text );
164 fprintf( f, "\n" );
165 xData_parseOutlinePrintRoot( f, &(child->childrenRoot), outputText );
166 }
167}
168
169#if defined __cplusplus
170}
171#endif
char * name
Definition: xData.h:122
char * value
Definition: xData.h:123
xData_attribute * attributes
Definition: xData.h:129
size_t line
Definition: xData.h:117
size_t column
Definition: xData.h:118
xData_rootElement root
Definition: xData.h:208
xData_docInfo docInfo
Definition: xData.h:177
xData_attributionList attributes
Definition: xData.h:186
xData_element * next
Definition: xData.h:183
xData_text text
Definition: xData.h:189
char * name
Definition: xData.h:184
size_t textOffset
Definition: xData.h:188
xData_rootElement childrenRoot
Definition: xData.h:182
xData_element * children
Definition: xData.h:172
char * text
Definition: xData.h:136
size_t length
Definition: xData.h:135
struct xmlTextStruct_s xmlTextStruct
int xData_parseOutline(FILE *f, xData_document *xData_doc, int outputText)
Definition: xDataExtras.cc:142
char * xData_parseReconstructXML(xData_document *xData_doc)
Definition: xDataExtras.cc:59