1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#ifndef __SVG_Adapter_hpp__
#define __SVG_Adapter_hpp__
// =================================================================================================
// Copyright 2020 Adobe
// All Rights Reserved.
//
// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms
// of the Adobe license agreement accompanying it.
//
// This file includes implementation of SVG metadata, according to Scalable Vector Graphics (SVG) 1.1 Specification.
// "https://www.w3.org/TR/2003/REC-SVG11-20030114/"
// Copyright 1994-2002 World Wide Web Consortium, (Massachusetts Institute of Technology,
// Institut National de Recherche en Informatique et en Automatique, Keio University).
// All Rights Reserved . http://www.w3.org/Consortium/Legal
//
// =================================================================================================
#include "public/include/XMP_Environment.h" // ! Must be the first #include!
#include "source/XMLParserAdapter.hpp"
// =================================================================================================
// Derived SVG parser adapter for Expat.
// =================================================================================================
#ifndef BanAllEntityUsage
#define BanAllEntityUsage 0
#endif
struct XML_ParserStruct; // ! Hack to avoid exposing expat.h to all clients.
typedef struct XML_ParserStruct *XML_Parser;
typedef std::map<std::string, XMP_Int64>::iterator IteratorStringXMP_Int64;
#define kURI_SVG "http://www.w3.org/2000/svg"
struct OffsetStruct
{
XMP_Int64 startOffset;
XMP_Int64 nextOffset;
XMP_Int64 endOffset;
std::string parent;
OffsetStruct() : startOffset( -1 ), nextOffset( -1 ), endOffset( -1 ) {}
OffsetStruct( std::string reqParent ) : startOffset( -1 ), nextOffset( -1 ), endOffset( -1 ), parent( reqParent ) {}
};
typedef std::map<std::string, OffsetStruct>::iterator IteratorStringOffsetStruct;
class SVG_Adapter : public XMLParserAdapter {
public:
XML_Parser parser;
XMP_NamespaceTable * registeredNamespaces;
#if BanAllEntityUsage
bool isAborted;
#endif
SVG_Adapter( );
virtual ~SVG_Adapter();
virtual void ParseBuffer( const void * buffer, size_t length, bool last = true );
virtual XMP_Bool ParseBufferNoThrow( const void * buffer, size_t length, bool last = true );
virtual OffsetStruct GetElementOffsets( std::string elementName );
virtual void RegisterElement( std::string elementName, std::string reqParent );
virtual XMP_Int64 GetPIOffset( std::string PIName, XMP_Uns32 requiredIndex = 1 );
virtual void RegisterPI( std::string PIName );
virtual XMP_Bool IsParsingRequire();
std::multimap<std::string, XMP_Int64> mPIWithOffsetMap;
std::map<std::string, OffsetStruct> mOffsetsMap;
XMP_Int64 firstSVGElementOffset;
std::string mPrevRequiredElement;
XMP_Uns32 depth;
};
// =================================================================================================
#endif // __SVG_Adapter_hpp__
|