InDesign SDK  20.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
CConversionProvider.h
1 //========================================================================================
2 //
3 // $File$
4 //
5 // Owner: Robin Briggs
6 //
7 // $Author$
8 //
9 // $DateTime$
10 //
11 // $Revision$
12 //
13 // $Change$
14 //
15 // Copyright 1997-2010 Adobe Systems Incorporated. All rights reserved.
16 //
17 // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance
18 // with the terms of the Adobe license agreement accompanying it. If you have received
19 // this file from a source other than Adobe, then your use, modification, or
20 // distribution of it requires the prior written permission of Adobe.
21 //
22 //
23 // ADOBE CONFIDENTIAL
24 //
25 // Purpose of Interface:
26 // Helper base class for writing file format converters.
27 //
28 // Interfaces -----
29 //
30 //========================================================================================
31 
32 #include "IConversionProvider.h"
33 
34 // ----- Includes -----
35 
36 #include "CPMUnknown.h"
37 #include "K2Vector.h"
38 
39 // ----- ID.h files -----
40 
41 #include "VersionID.h"
42 
43 
44 
45 
46 //---------------------------------------------------------------------------------------
47 // CConversionProvider
48 //---------------------------------------------------------------------------------------
49 
61 class CConversionProvider : public CPMUnknown<IConversionProvider>
62 {
63 public:
65  virtual ~CConversionProvider();
66 
67  virtual int32 CountConversions() const = 0;
68  virtual void GetNthConversion(int32 n, VersionID *fromVersion, VersionID *toVersion) const = 0;
69 
70  virtual int32 CountRemovedPlugins(const VersionID &fromVersion, const VersionID &toVersion) const;
71  virtual PluginID GetNthRemovedPlugin(const VersionID &fromVersion, const VersionID &toVersion, int32 n) const;
72  virtual int32 CountIgnoredPlugins(const VersionID &fromVersion, const VersionID &toVersion) const;
73  virtual PluginID GetNthIgnoredPlugin(const VersionID &fromVersion, const VersionID &toVersion, int32 n) const;
74 
75  virtual int32 CountClassAliases() const;
76  virtual int32 CountImplementationAliases() const;
77  virtual void GetNthClassAlias(int32 n, ClassID &fromID, VersionID &fromVersion, ClassID &toID, VersionID &toVersion) const;
78  virtual void GetNthImplementationAlias(int32 n, ImplementationID &fromID, VersionID &fromVersion, ImplementationID &toID, VersionID &toVersion) const;
79 
80  virtual int32 CountPlugins() const;
81  virtual PluginID GetNthPlugin(int32 n) const;
82 
83  virtual bool16 DoesConversionRenumberClass(int32 conversionIndex) const;
84  virtual bool16 DoesConversionRenumberImplementation(int32 conversionIndex) const;
85 
86  virtual IConversionProvider::ConversionStatus ShouldConvertImplementation(ImplementationID tag, ClassID context, int32 conversionIndex) const;
87  virtual IConversionProvider::ConversionStatus ShouldConvertClass(ClassID clsID, ImplementationID context, int32 conversionIndex) const;
88 
89  virtual ImplementationID ConvertTag(ImplementationID tag, ClassID forClass, int32 conversionIndex,
90  int32 inLength, IPMStream *oldData, IPMStream *newData, IterationStatus whichIteration);
91 
92  virtual ClassID ConvertClass(ClassID clsID, ImplementationID embeddedContext, int32 conversionIndex,
93  int32 inLength, IPMStream *oldData, IPMStream *newData, IterationStatus whichIteration);
94 
95 protected:
102  void RemoveImplementation(ImplementationID implID, ClassID classID, int32 majorFormat, int32 minorFormat);
103 
109  void RemoveClass(ClassID classID, int32 majorFormat, int32 minorFormat)
110  {RemoveImplementation(kInvalidImpl, classID, majorFormat, minorFormat);}
111 
117  void RemovePlugin(PluginID plugin, int32 majorFormat, int32 minorFormat);
118 
124  void IgnorePlugin(PluginID plugin, int32 majorFormat, int32 minorFormat);
125 
136  void MoveClass(ClassID fromClass, PluginID fromPlugin, int32 fromMajorFormat, int32 fromMinorFormat,
137  ClassID toClass, int32 toMajorFormat, int32 toMinorFormat);
138 
149  void MoveImplementation(ImplementationID fromImpl, PluginID fromPlugin, int32 fromMajorFormat, int32 fromMinorFormat,
150  ImplementationID toImpl, int32 toMajorFormat, int32 toMinorFormat);
151 
152 private:
153  static bool InRange(const VersionID &fromV, const VersionID &testV, const VersionID &toV)
154  {return ((testV > fromV) && (testV <= toV));}
155 
156 private:
160  class ImplInfo
161  {
162  public:
163  typedef base_type data_type;
164  ImplInfo()
165  : fImplID(kInvalidImpl), fBossID(kInvalidClass), fFormat()
166  {}
167  ImplInfo(ImplementationID implID, ClassID bossID, const FormatID &format)
168  : fImplID(implID), fBossID(bossID), fFormat(format)
169  {}
170  ImplInfo(const ImplInfo &other)
171  : fImplID(other.fImplID), fBossID(other.fBossID), fFormat(other.fFormat)
172  {}
173 
174  ImplementationID GetImplementation() const
175  {return fImplID;}
176  ClassID GetBoss() const
177  {return fBossID;}
178  const FormatID &GetFormat() const
179  {return fFormat;}
180 
181  bool operator==(const ImplInfo &other) const
182  {return((fImplID == other.fImplID) && (fBossID == other.fBossID) && (fFormat == other.fFormat));}
183 
184  private:
185  ImplementationID fImplID; // Which Implementation was added or removed
186  ClassID fBossID; // Boss was it added or removed to/from
187  FormatID fFormat; // Format number when the implementation was added/removed
188  };
189 
190 
194  class PluginInfo
195  {
196  public:
197  typedef base_type data_type;
198 
199  PluginInfo()
200  : fPlugin(kInvalidPlugin), fFormat()
201  {}
202  PluginInfo(PluginID plugin)
203  : fPlugin(plugin), fFormat()
204  {}
205  PluginInfo(PluginID plugin, const FormatID &format)
206  : fPlugin(plugin), fFormat(format)
207  {}
208  PluginInfo(const PluginInfo &other)
209  : fPlugin(other.fPlugin), fFormat(other.fFormat)
210  {}
211 
212  PluginID GetPlugin() const
213  {return fPlugin;}
214  const FormatID &GetFormat() const
215  {return fFormat;}
216 
217  bool16 operator==(const PluginInfo &other) const
218  {return (fPlugin == other.fPlugin);}
219 
220  private:
221  PluginID fPlugin; // Removed plugin
222  FormatID fFormat; // Format number when it was removed
223  };
224 
225 
229  template <class T>
230  class AliasInfo
231  {
232  public:
233  typedef base_type data_type;
234 
235  AliasInfo(T fromID, const VersionID &from, T toID, const VersionID &to)
236  : fFromID(fromID), fFromVersion(from), fToID(toID), fToVersion(to)
237  {}
238 
239  T GetFromID() const
240  {return fFromID;}
241  T GetToID() const
242  {return fToID;}
243  const VersionID &GetFromVersion() const
244  {return fFromVersion;}
245  const VersionID &GetToVersion() const
246  {return fToVersion;}
247 
248  bool operator ==(const AliasInfo &other) const
249  {return (fFromID == other.fFromID) && (fFromVersion == other.fFromVersion) &&
250  (fToID == other.fToID) && (fToVersion == other.fToVersion);}
251 
252  private:
253  T fFromID; // Former Class or Implementation ID
254  VersionID fFromVersion; // Where did the ID move from?
255  T fToID; // New Class or Implementation ID
256  VersionID fToVersion; // Where did it move to?
257  };
258 
259  typedef K2Vector<ImplInfo> ImplInfoVector;
260  typedef AliasInfo<ClassID> ClassAliasInfo;
261  typedef K2Vector<ClassAliasInfo> ClassAliasVector;
262  typedef AliasInfo<ImplementationID> ImplAliasInfo;
263  typedef K2Vector<ImplAliasInfo> ImplAliasVector;
264  typedef K2Vector<PluginInfo> PluginInfoVector;
265 
266 private:
267  PluginID fPlugin;
268  ImplInfoVector fImplList;
269  ClassAliasVector fClassAliasList;
270  ImplAliasVector fImplAliasList;
271  PluginInfoVector fRemoveList;
272  PluginInfoVector fIgnoreList;
273 };
274 
275