1 /* $XConsortium: UnivCharsetDesc.h /main/1 1996/07/29 17:07:49 cde-hp $ */
2 // Copyright (c) 1994 James Clark
3 // See the file COPYING for copying permission.
5 #ifndef UnivCharsetDesc_INCLUDED
6 #define UnivCharsetDesc_INCLUDED 1
18 namespace SP_NAMESPACE {
25 class SP_API UnivCharsetDesc {
29 // Note that this is a count, as in the SGML declaration,
30 // rather than a maximum.
47 UnivCharsetDesc(const Range *, size_t);
48 void set(const Range *, size_t);
49 Boolean descToUniv(WideChar from, UnivChar &to) const;
50 Boolean descToUniv(WideChar from, UnivChar &to, WideChar &alsoMax) const;
51 // Return 0 for no matches, 1 for 1, 2 for more than 1
52 unsigned univToDesc(UnivChar from, WideChar &to, ISet<WideChar> &toSet)
54 unsigned univToDesc(UnivChar from, WideChar &to, ISet<WideChar> &toSet,
57 void addRange(WideChar descMin, WideChar descMax, UnivChar univMin);
58 void addBaseRange(const UnivCharsetDesc &baseSet,
62 ISet<WideChar> &baseMissing);
63 WideChar maxDesc() const;
65 RangeMap<WideChar,UnivChar> descToUniv_;
66 friend class UnivCharsetDescIter;
69 class SP_API UnivCharsetDescIter {
71 UnivCharsetDescIter(const UnivCharsetDesc &);
72 Boolean next(WideChar &descMin, WideChar &descMax, UnivChar &univMin);
74 RangeMapIter<WideChar,UnivChar> iter_;
78 Boolean UnivCharsetDesc::descToUniv(WideChar from, UnivChar &to) const
81 return descToUniv_.map(from, to, tem);
85 Boolean UnivCharsetDesc::descToUniv(WideChar from, UnivChar &to,
86 WideChar &alsoMax) const
88 return descToUniv_.map(from, to, alsoMax);
92 unsigned UnivCharsetDesc::univToDesc(UnivChar from, WideChar &to,
93 ISet<WideChar> &toSet) const
96 return descToUniv_.inverseMap(from, to, toSet, tem);
100 unsigned UnivCharsetDesc::univToDesc(UnivChar from, WideChar &to,
101 ISet<WideChar> &toSet,
102 WideChar &count) const
104 return descToUniv_.inverseMap(from, to, toSet, count);
108 void UnivCharsetDesc::addRange(WideChar descMin,
112 descToUniv_.addRange(descMin, descMax, univMin);
116 UnivCharsetDescIter::UnivCharsetDescIter(const UnivCharsetDesc &desc)
117 : iter_(desc.descToUniv_)
122 Boolean UnivCharsetDescIter::next(WideChar &descMin,
126 return iter_.next(descMin, descMax, univMin);
133 #endif /* not UnivCharsetDesc_INCLUDED */