1 // Copyright (c) 1994 James Clark
2 // See the file COPYING for copying permission.
3 #pragma ident "%Z%%M% %I% %E% SMI"
5 #ifndef Location_INCLUDED
6 #define Location_INCLUDED 1
22 namespace SP_NAMESPACE
{
27 class InputSourceOrigin
;
35 class SP_API Origin
: public Resource
{
38 virtual const EntityOrigin
*asEntityOrigin() const;
39 virtual const InputSourceOrigin
*asInputSourceOrigin() const;
40 virtual const Location
&parent() const = 0;
41 virtual Index
refLength() const;
42 virtual Boolean
origChars(const Char
*&) const;
43 virtual Boolean
inBracketedTextOpenDelim() const;
44 virtual Boolean
inBracketedTextCloseDelim() const;
45 virtual Boolean
isNumericCharRef(const Markup
*&markup
) const;
46 virtual Boolean
isNamedCharRef(Index ind
, NamedCharRef
&ref
) const;
47 virtual const EntityDecl
*entityDecl() const;
48 virtual Boolean
defLocation(Offset off
, const Origin
*&, Index
&) const;
49 virtual const Markup
*markup() const;
50 virtual const Entity
*entity() const;
51 virtual const ExternalInfo
*externalInfo() const;
52 virtual Offset
startOffset(Index ind
) const;
53 const StringC
*entityName() const;
56 class SP_API ProxyOrigin
: public Origin
{
58 ProxyOrigin(const Origin
*origin
);
59 const EntityOrigin
*asEntityOrigin() const;
60 const InputSourceOrigin
*asInputSourceOrigin() const;
61 const Location
&parent() const;
62 Index
refLength() const;
63 Boolean
origChars(const Char
*&) const;
64 Boolean
inBracketedTextOpenDelim() const;
65 Boolean
inBracketedTextCloseDelim() const;
66 Boolean
isNumericCharRef(const Markup
*&markup
) const;
67 Boolean
isNamedCharRef(Index ind
, NamedCharRef
&ref
) const;
68 const EntityDecl
*entityDecl() const;
69 Boolean
defLocation(Offset off
, const Origin
*&, Index
&) const;
70 const Markup
*markup() const;
71 const Entity
*entity() const;
72 const ExternalInfo
*externalInfo() const;
73 Offset
startOffset(Index ind
) const;
75 const Origin
*origin_
;
78 class SP_API Location
{
81 Location(Origin
*, Index
);
82 Location(ConstPtr
<Origin
>, Index
);
83 void operator+=(Index i
) { index_
+= i
; }
84 void operator-=(Index i
) { index_
-= i
; }
85 Index
index() const { return index_
; }
86 const ConstPtr
<Origin
> &origin() const { return origin_
; }
87 void clear() { origin_
.clear(); }
88 void swap(Location
&to
) {
89 origin_
.swap(to
.origin_
);
90 Index tem
= to
.index_
;
95 ConstPtr
<Origin
> origin_
;
99 class SP_API ExternalInfo
{
102 virtual ~ExternalInfo();
105 class SP_API NamedCharRef
{
113 NamedCharRef(Index
, RefEndType
, const StringC
&);
114 Index
refStartIndex() const;
115 RefEndType
refEndType() const;
116 const StringC
&origName() const;
117 void set(Index
, RefEndType
, const Char
*, size_t);
119 Index refStartIndex_
;
120 RefEndType refEndType_
;
124 struct SP_API InputSourceOriginNamedCharRef
{
125 Index replacementIndex
;
126 size_t origNameOffset
;
128 NamedCharRef::RefEndType refEndType
;
131 class SP_API InputSourceOrigin
: public Origin
{
133 virtual void noteCharRef(Index replacementIndex
, const NamedCharRef
&) = 0;
134 virtual void setExternalInfo(ExternalInfo
*) = 0;
135 virtual InputSourceOrigin
*copy() const = 0;
136 static InputSourceOrigin
*make();
137 static InputSourceOrigin
*make(const Location
&refLocation
);
140 // a delimiter specified in bracketed text
142 class SP_API BracketOrigin
: public Origin
{
144 enum Position
{ open
, close
};
145 BracketOrigin(const Location
&, Position
);
146 const Location
&parent() const;
147 Boolean
inBracketedTextOpenDelim() const;
148 Boolean
inBracketedTextCloseDelim() const;
154 class SP_API ReplacementOrigin
: public Origin
{
156 ReplacementOrigin(const Location
&, Char origChar
);
157 const Location
&parent() const;
158 Boolean
origChars(const Char
*&) const;
164 class SP_API MultiReplacementOrigin
: public Origin
{
166 MultiReplacementOrigin(const Location
&, StringC
&origChars
);
167 const Location
&parent() const;
168 Boolean
origChars(const Char
*&) const;
175 Index
NamedCharRef::refStartIndex() const
177 return refStartIndex_
;
181 NamedCharRef::RefEndType
NamedCharRef::refEndType() const
187 const StringC
&NamedCharRef::origName() const
196 #endif /* not Location_INCLUDED */