MagickCore  7.1.0
xml-tree-private.h
Go to the documentation of this file.
1 /*
2  Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization
3  dedicated to making software imaging solutions freely available.
4 
5  You may not use this file except in compliance with the License. You may
6  obtain a copy of the License at
7 
8  https://imagemagick.org/script/license.php
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 
16  MagickCore private xml-tree methods.
17 */
18 #ifndef MAGICKCORE_XML_TREE_PRIVATE_H
19 #define MAGICKCORE_XML_TREE_PRIVATE_H
20 
21 #include "MagickCore/locale_.h"
22 #include "MagickCore/memory_.h"
23 #include "MagickCore/string_.h"
24 #include "MagickCore/splay-tree.h"
25 #include "MagickCore/xml-tree.h"
26 
27 #if defined(__cplusplus) || defined(c_plusplus)
28 extern "C" {
29 #endif
30 
31 static inline char *SubstituteXMLEntities(const char *content,
32  const MagickBooleanType pedantic)
33 {
34  char
35  *canonical_content;
36 
37  const char
38  *p;
39 
40  size_t
41  extent;
42 
43  ssize_t
44  i;
45 
46  /*
47  Substitute predefined entities.
48  */
49  i=0;
50  canonical_content=AcquireString((char *) NULL);
51  extent=MagickPathExtent;
52  for (p=content; *p != '\0'; p++)
53  {
54  if ((i+MagickPathExtent) > (ssize_t) extent)
55  {
56  extent+=MagickPathExtent;
57  canonical_content=(char *) ResizeQuantumMemory(canonical_content,extent,
58  sizeof(*canonical_content));
59  if (canonical_content == (char *) NULL)
60  return(canonical_content);
61  }
62  switch (*p)
63  {
64  case '&':
65  {
66  i+=FormatLocaleString(canonical_content+i,extent,"&");
67  break;
68  }
69  case '<':
70  {
71  i+=FormatLocaleString(canonical_content+i,extent,"&lt;");
72  break;
73  }
74  case '>':
75  {
76  i+=FormatLocaleString(canonical_content+i,extent,"&gt;");
77  break;
78  }
79  case '"':
80  {
81  i+=FormatLocaleString(canonical_content+i,extent,"&quot;");
82  break;
83  }
84  case '\n':
85  {
86  if (pedantic == MagickFalse)
87  {
88  canonical_content[i++]=(char) (*p);
89  break;
90  }
91  i+=FormatLocaleString(canonical_content+i,extent,"&#xA;");
92  break;
93  }
94  case '\t':
95  {
96  if (pedantic == MagickFalse)
97  {
98  canonical_content[i++]=(char) (*p);
99  break;
100  }
101  i+=FormatLocaleString(canonical_content+i,extent,"&#x9;");
102  break;
103  }
104  case '\r':
105  {
106  i+=FormatLocaleString(canonical_content+i,extent,"&#xD;");
107  break;
108  }
109  default:
110  {
111  canonical_content[i++]=(char) (*p);
112  break;
113  }
114  }
115  }
116  canonical_content[i]='\0';
117  return(canonical_content);
118 }
119 
120 extern MagickPrivate char
121  *CanonicalXMLContent(const char *,const MagickBooleanType),
122  *FileToXML(const char *,const size_t);
123 
124 extern MagickPrivate const char
126 
129 
131  *AddPathToXMLTree(XMLTreeInfo *,const char *,const size_t),
133  *GetXMLTreePath(XMLTreeInfo *,const char *),
134  *InsertTagIntoXMLTree(XMLTreeInfo *,XMLTreeInfo *,const size_t),
137  *SetXMLTreeAttribute(XMLTreeInfo *,const char *,const char *);
138 
139 #if defined(__cplusplus) || defined(c_plusplus)
140 }
141 #endif
142 
143 #endif
MagickPrivate const char ** GetXMLTreeProcessingInstructions(XMLTreeInfo *, const char *)
Definition: xml-tree.c:1004
MagickPrivate MagickBooleanType GetXMLTreeAttributes(const XMLTreeInfo *, SplayTreeInfo *)
Definition: xml-tree.c:773
MagickPrivate XMLTreeInfo * SetXMLTreeAttribute(XMLTreeInfo *, const char *, const char *)
Definition: xml-tree.c:2417
MagickExport ssize_t FormatLocaleString(char *magick_restrict string, const size_t length, const char *magick_restrict format,...)
Definition: locale.c:467
MagickExport void * ResizeQuantumMemory(void *memory, const size_t count, const size_t quantum)
Definition: memory.c:1457
MagickPrivate XMLTreeInfo * GetXMLTreeOrdered(XMLTreeInfo *)
MagickBooleanType
Definition: magick-type.h:169
MagickExport char * AcquireString(const char *source)
Definition: string.c:94
MagickPrivate XMLTreeInfo * PruneTagFromXMLTree(XMLTreeInfo *)
static char * SubstituteXMLEntities(const char *content, const MagickBooleanType pedantic)
#define MagickPathExtent
MagickPrivate XMLTreeInfo * AddPathToXMLTree(XMLTreeInfo *, const char *, const size_t)
MagickPrivate XMLTreeInfo * InsertTagIntoXMLTree(XMLTreeInfo *, XMLTreeInfo *, const size_t)
MagickPrivate char * CanonicalXMLContent(const char *, const MagickBooleanType)
MagickPrivate XMLTreeInfo * ParseTagFromXMLTree(XMLTreeInfo *)
#define MagickPrivate
MagickPrivate char * FileToXML(const char *, const size_t)
Definition: xml-tree.c:524
MagickPrivate XMLTreeInfo * GetXMLTreePath(XMLTreeInfo *, const char *)