InDesign SDK  20.5
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ScriptInfo.h
1 //========================================================================================
2 //
3 // $File$
4 //
5 // Owner: Jonathan W. Brown
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 // Note: Changes to these classes must be reflected in ScriptInfoTypes.fh
24 // to ensure ReadWrite from the core scripting resources works correctly.
25 //
26 //========================================================================================
27 
28 #ifndef __SCRIPTINFO__
29 #define __SCRIPTINFO__
30 
31 #include "ScriptInfoDefs.h"
32 #include "GUID.h"
33 #include "ScriptData.h"
34 #include "ScriptingDefs.h"
35 #include "IDThreading.h" // for spin_mutex
36 
37 namespace ScriptInfo
38 {
39 
41 const int32 kVariableLength = 0x0 ;
42 
43 class TypeInfo ;
46 
52 class TypeInfo
53 {
54  public:
55  typedef object_type data_type ;
56 
58  TypeInfo( const ScriptElementID& siid = kInvalidScriptElementID, int32 length = 1 ) :
59  fType( siid ), fLength( length ), fMin(), fMax(), fDefault(),
60  fSubtypes(), fStructFieldName(), fFormatted( kFalse ) {}
61 
63  TypeInfo( const TypeInfoList& variableTypes, int32 length = 1 ) :
64  fType( kScriptInfoVariableType ), fLength( length ), fMin(), fMax(), fDefault(),
65  fSubtypes( variableTypes ), fStructFieldName(), fFormatted( kFalse ) {}
66 
68  void AddType( const TypeInfo& subType ) ;
70  void SetLength( int32 length ) { fLength = length ; }
71 
73  const ScriptElementID& GetType() const { return fType ; }
75  int32 GetLength() const { return fLength ; }
77  const ScriptData& GetMinimum() const { return fMin ; }
79  const ScriptData& GetMaximum() const { return fMax ; }
81  const ScriptData& GetDefault() const { return fDefault ; }
83  const TypeInfoList& GetVariableTypes() const ;
85  const TypeInfoList& GetStructFields() const ;
87  const PMString& GetStructFieldName() const { return fStructFieldName ; }
92  PMString GetFormattedStructFieldName( const RequestContext& context ) const ;
98  const ObjectScriptElement* GetRecordTypeObject( const RequestContext& context ) const ;
99 
101  bool16 HasRangeData() const { return ( !fMin.IsEmpty() || !fMax.IsEmpty() ) ; }
103  bool16 HasDefault() const { return !fDefault.IsEmpty() ; }
104 
106  bool16 IsBaseType() const { return ( kScriptInfoFirstBaseType <= fType && fType <= kScriptInfoLastBaseType ) ; }
108  bool16 IsArrayType() const { return ( fLength != 1 ) ; }
110  bool16 IsVariableType() const { return ( fType == kScriptInfoVariableType ) ; }
112  bool16 IsStructType() const { return ( fType == kScriptInfoStructType ) ; }
114  bool16 IsRecordType() const { return ( fType == kScriptInfoRecordType ) ; }
118  bool16 IsObjectType( const RequestContext& context ) const ;
123  bool16 IsEnumType( const RequestContext& context ) const ;
128  bool16 IsTypeDef( const RequestContext& context ) const ;
133  bool16 IsValidType( const RequestContext& context ) const ;
138  bool16 HasAnyValidType( const RequestContext& context ) const ;
144  bool16 IsValidValue( const ScriptData& value, const ObjectScriptElement* ) const ;
145 
151  void FormatType( const ObjectScriptElement* ) ;
152 
159  PMString GetTypeAsString( const ObjectScriptElement*, int32 includeInfo = kIncludeRangeData ) const ;
160 
167  PMString GetTypeAsString( const RequestContext& context, int32 includeInfo = kIncludeRangeData ) const ;
168 
170  bool16 operator==( const TypeInfo& ) const ;
172  void ReadWrite( IPMStream* s ) ;
173 
174  private:
175  ScriptElementID fType ; //either a base type (from ScriptingID.h), an object type, an enum type, or a typedef
176  int32 fLength ; //if != 1, this is an array; if == 0, this is a variable length array
177  ScriptData fMin ; //minimum value (empty, if none)
178  ScriptData fMax ; //maximum value (empty, if none)
179  ScriptData fDefault ; //default value (empty, if none)
180  TypeInfoList fSubtypes ; //the list of subtypes for a variable type, fields for a struct type, or governing object for a record type
181  PMString fStructFieldName ; //field name for a struct type
182  bool16 fFormatted ; //whether FormatType has been called
183 } ;
184 
185 DEFINEK2READWRITE( TypeInfo )
186 
187 //----------------------------------------------------------------------------
192 {
193  public:
194  typedef object_type data_type ;
195 
197  BaseScriptInfo() : fScriptID(), fName( new PMString() ), fDescription( new PMString() )
198  {
199  #ifdef ID_ENABLE_DEBUGGING
200  fWhoAmI = nil ;
201  #endif
202  }
204  BaseScriptInfo( const ScriptID& id, const PMString& name, const PMString& desc ) :
205  fScriptID( id ), fName( new PMString( name ) ), fDescription( new PMString( desc ) )
206  {
207  #ifdef ID_ENABLE_DEBUGGING
208  fWhoAmI = nil ;
209  #endif
210  }
212  BaseScriptInfo( const BaseScriptInfo& other ) { *this = other ; }
214  virtual ~BaseScriptInfo();
215 
217  const ScriptID& GetScriptID() const { return fScriptID ; }
218 
220  const PMString& GetName() const { return *fName ; }
222  void SetName( const PMString& name ) ;
227  const PMString& GetFormattedName( const FormatNamePolicy& policy ) const ;
233  virtual const PMString& GetFormattedName( const RequestContext& context, ScriptElementType as ) const ;
234 
237 
239  BaseScriptInfo& operator=( const BaseScriptInfo& ) ;
241  bool16 operator==( const BaseScriptInfo& ) const ;
243  virtual void ReadWrite( IPMStream* s ) ;
244 
245  protected:
247  PMString GetFormattedDescription( const ObjectScriptElement* ) const ;
249  static void FormatDescription( PMString& desc, const ObjectScriptElement* ) ;
250  mutable IDThreading::spin_mutex fMutex;
251 
253 
254  private:
255  ScriptID fScriptID ;
256  boost::shared_ptr<PMString> fName;
257  boost::shared_ptr<PMString> fDescription ;
258 
259  mutable FormatNamePolicy fLastFormatNamePolicy ;
260  mutable PMString fLastFormattedName ;
261 
262 #ifdef ID_ENABLE_DEBUGGING
263  public:
265  virtual ConstCString WhoAmI() const ;
266  mutable std::atomic<char *> fWhoAmI ;
267 #endif
268 } ;
269 
270 //----------------------------------------------------------------------------
275 {
276  public:
278  ScriptElement() {}
280  ScriptElement( const ScriptElementID& siid, const ScriptID& id, const PMString& name, const PMString& desc ) :
281  BaseScriptInfo( id, name, desc ), fScriptElementID( siid ) {}
283  virtual ~ScriptElement() {}
284 
286  const ElementContext& GetContext() const { return fContext ; }
288  const ScriptElementID& GetScriptElementID() const { return fScriptElementID ; }
290  const PluginID& GetPluginID() const { return fPluginID ; }
292  const ScriptRecordData& GetMetadata() const { return fMetadata ; }
294  ScriptRecordData& GetMetadata() { return fMetadata ; }
300  bool16 HasMetadata( const ScriptID& key, ScriptData& value ) const ;
305  bool16 HasMetadata( const ScriptIDValuePair& kvp ) const ;
306 
308  bool16 operator==( const ScriptElement& ) const ;
310  virtual void ReadWrite( IPMStream* s ) ;
311 
313  void SetContext( const ElementContext& context ) { fContext = context ; }
315  void SetPluginID( const PluginID& ) ;
316 
317  private:
318  ElementContext fContext ;
319  ScriptElementID fScriptElementID ;
320  PluginID fPluginID ;
321  ScriptRecordData fMetadata ;
322 
323 #ifdef ID_ENABLE_DEBUGGING
324  public:
326  virtual ConstCString WhoAmI() const ;
327 #endif
328 } ;
329 
330 //----------------------------------------------------------------------------
335 {
336  public:
342  virtual const PMString& GetFormattedName( const RequestContext& context, ScriptElementType as = kTypeDefElement ) const { return BaseScriptInfo::GetFormattedName( context, as ) ; }
343 
346 
348  bool16 operator==( const TypeDefScriptElement& ) const ;
350  virtual void ReadWrite( IPMStream* s ) ;
351 
352  private:
353  TypeInfo fType ;
354 } ;
355 
356 //----------------------------------------------------------------------------
361 {
362  public:
368  virtual const PMString& GetFormattedName( const RequestContext& context, ScriptElementType as = kSuiteElement ) const { return BaseScriptInfo::GetFormattedName( context, as ) ; }
369 } ;
370 
371 //----------------------------------------------------------------------------
376 {
377  public:
382 
384  bool16 HasSingular() const { return GetScriptID() != kInvalidScriptID ; }
386  bool16 HasCollection() const { return fCollection.GetScriptID() != kInvalidScriptID ; }
387 
392  const PMString& GetFormattedName( ScriptElementType as = kObjectElement ) const ;
394  const GUID& GetGUID() const { return fGUID ; }
396  const ScriptElementID& GetSuite() const { return fSuite ; }
397 
399  const BaseScriptInfo* GetCollectionInfo() const { return &fCollection ; }
401  BaseScriptInfo* GetCollectionInfo() { return &fCollection ; }
406  PMString GetCollectionFormattedName( ScriptElementType as = kObjectElement ) const ;
408  const GUID& GetCollectionGUID() const { return fCollectionGUID ; }
409 
415  bool16 IsPropertyReadOnly( const ScriptElementID& propertyID, bool16 obsoleteArg = kTrue ) const ;
421  bool16 IsPropertyReadOnly( const ScriptID& propertyID, bool16 obsoleteArg = kTrue ) const ;
422 
424  const ScriptElementID& GetBaseObject() const { return fBaseObject ; }
426  const ObjectScriptElement* FindBaseObject() const ;
431  bool16 IsObjectType( const ScriptElementID& id ) const ;
436  bool16 IsObjectType( const ScriptID& type ) const ;
438  bool16 IsPreferencesObject() const { return IsObjectType( ScriptID( c_PrefsObject ) ) ; }
440  bool16 IsSingletonChild() const { return !HasCollection() ; }
441 
444 
446  const ParentProviderPacket* FindParent( const ScriptElementID& id ) const ;
448  const ParentProviderPacket* FindParent( const ScriptID& id ) const ;
450  const ParentProviderPacket* FindParent( const PMString& name, ScriptElementType as = kObjectElement ) const ;
451 
453  const ChildProviderPacket* FindChild( const ScriptElementID& id ) const ;
455  const ChildProviderPacket* FindChildBySingularID( const ScriptID& id ) const ; //the ScriptID of the singular object
457  const ChildProviderPacket* FindChildByCollectionID( const ScriptID& id ) const ; //the ScriptID of the collection object
459  const ChildProviderPacket* FindChildBySingularName( const PMString& name, ScriptElementType as = kObjectElement ) const ; //the name of the singular object
461  const ChildProviderPacket* FindChildByCollectionName( const PMString& name, ScriptElementType as = kObjectElement ) const ; //the name of the collection object
462 
464  const MethodProviderPacket* FindMethod( const ScriptElementID& id ) const ;
466  const MethodProviderPacket* FindMethod( const ScriptID& id ) const ;
468  const MethodProviderPacket* FindMethod( const PMString& name, ScriptElementType as = kMethodElement ) const ;
469 
473  const CollectionMethodProviderPacket* FindCollectionMethod( const ObjectScriptElement* parent, const ScriptID& id ) const ;
475  const CollectionMethodProviderPacket* FindCollectionMethod( const ObjectScriptElement* parent, const PMString& name, ScriptElementType as = kMethodElement ) const ;
476 
478  const PropertyProviderPacket* FindProperty( const ScriptElementID& id ) const ;
480  const PropertyProviderPacket* FindProperty( const ScriptID& id ) const ;
482  const PropertyProviderPacket* FindProperty( const PMString& name, ScriptElementType as = kPropertyElement ) const ;
483 
485  PropertyProviderIterator FindProperties( const ClassID& attributeID ) const ;
486 
488  const EventProviderPacket* FindEvent( const ScriptElementID& id ) const ;
490  const EventProviderPacket* FindEvent( const ScriptID& id ) const ;
492  const EventProviderPacket* FindEvent( const PMString& name, ScriptElementType as = kEventElement ) const ;
493 
506  MethodProviderIterator Methods( bool16 iterateBaseObjects = kTrue ) const ;
516  PropertyProviderIterator Properties( bool16 iterateBaseObjects = kTrue ) const ;
517 
522  EventProviderIterator Events( bool16 iterateBaseObjects = kTrue ) const ;
523 
525  void AddSubclass( const ObjectScriptElement* subclass ) ;
527  void AddParent( const ParentProviderPacket& pp ) ;
529  void AddChild( const ChildProviderPacket& pp ) ;
531  void AddMethod( const MethodProviderPacket& pp ) ;
535  void AddProperty( const PropertyProviderPacket& pp ) ;
537  void AddEvent( const EventProviderPacket& pp ) ;
538 
540  bool16 operator==( const ObjectScriptElement& ) const ;
542  virtual void ReadWrite( IPMStream* s ) ;
543 
545  const RequestContext& GetRequestContext() const ;
546 
548  void SortChildren(PacketComp func);
549 
550  private:
552  const ParentProviderLookup& GetElements( AccessParents* ) const { return fParents ; }
554  const ChildProviderLookup& GetElements( AccessChildren* ) const { return fChildren ; }
556  const MethodProviderLookup& GetElements( AccessMethods* ) const { return fMethods ; }
558  const CollectionMethodProviderLookup& GetElements( AccessCollectionMethods* ) const { return fCollectionMethods ; }
560  const PropertyProviderLookup& GetElements( AccessProperties* ) const { return fProperties ; }
562  const EventProviderLookup& GetElements( AccessEvents* ) const { return fEvents ; }
569 
575  virtual const PMString& GetFormattedName( const RequestContext& context, ScriptElementType as = kObjectElement ) const { return BaseScriptInfo::GetFormattedName( context, as ) ; }
576 
577  private:
578  GUID fGUID ;
579  BaseScriptInfo fCollection ;
580  GUID fCollectionGUID ;
581  ScriptElementID fBaseObject ;
582  mutable const ObjectScriptElement* fBaseObjectCache ;
583  ScriptElementID fSuite ;
584 
585  //the following data is not read from the resource nor persisted; it is constructed at run-time
586  const RequestContext* fRequestContext ; //request context of this object
587  ParentProviderLookup fParents ; //parents of this object
588  ChildProviderLookup fChildren ; //objects of which this object is a parent
589  MethodProviderLookup fMethods ; //methods on this object
590  CollectionMethodProviderLookup fCollectionMethods ; //methods on a collection of this object
591  PropertyProviderLookup fProperties ; //properties on this object
592  EventProviderLookup fEvents ; //events on this object
593 
594  ObjectScriptElementList fSubclasses ; //subclasses of this object
595 
596  //the following vectors are used to cache a sorted list of previously found properties for performance reasons
598  mutable K2Vector<KeyValuePair<ScriptElementID, const PropertyProviderPacket*> > fPropertiesByScriptElementID ;
599  mutable K2Vector<const PropertyProviderPacket *> fPropertiesByFormattedName ;
600 } ;
601 
602 
603 //----------------------------------------------------------------------------
608 {
609  public:
611  MethodParam() : fOptional(kFalse) {}
613  MethodParam( const ScriptID& id, const PMString& name, const PMString& desc, const TypeInfo& type, bool16 optional ) :
614  BaseScriptInfo( id, name, desc ), fType( type ), fOptional( optional ) {}
615 
621  virtual const PMString& GetFormattedName( const RequestContext& context, ScriptElementType as = kMethodParameterElement ) const { return BaseScriptInfo::GetFormattedName( context, as ) ; }
625  TypeInfo GetParamType( const ObjectScriptElement* ) const ;
627  bool16 IsOptional() const { return fOptional ; }
629  const ScriptData& GetDefault() const { return fType.GetDefault() ; }
630 
632  bool16 operator==( const MethodParam& ) const ;
634  virtual void ReadWrite( IPMStream* s ) ;
635 
637  void SetParamType( const TypeInfo& type ) { fType = type ; }
638 
639  private:
640  TypeInfo fType ;
641  bool16 fOptional ;
642 } ;
643 
645 DEFINEK2READWRITE( MethodParam )
646 
647 
651 {
652  public:
656  MethodScriptElement( const ScriptElementID& siid, const ScriptID& id, const PMString& name, const PMString& desc, const TypeInfo& type, const PMString& returnDesc ) :
657  ScriptElement( siid, id, name, desc ), fReturnType( type ), fReturnDescription( returnDesc ), fParameters() {}
658 
664  virtual const PMString& GetFormattedName( const RequestContext& context, ScriptElementType as = kMethodElement ) const { return BaseScriptInfo::GetFormattedName( context, as ) ; }
668  TypeInfo GetReturnType( const ObjectScriptElement* ) const ;
670  PMString GetReturnDescription( const ObjectScriptElement* ) const ;
672  MethodParamList GetParameters( const ObjectScriptElement* ) const ;
674  MethodParamList& GetParameters() { return fParameters ; }
676  const MethodParam* FindParameter( const ObjectScriptElement*, const ScriptID& id ) const ;
677 
679  bool16 operator==( const MethodScriptElement& ) const ;
681  virtual void ReadWrite( IPMStream* s ) ;
682 
683  private:
684  TypeInfo fReturnType ;
685  PMString fReturnDescription ;
686  MethodParamList fParameters ;
687 } ;
688 
689 
690 //----------------------------------------------------------------------------
695 {
696  public:
702  virtual const PMString& GetFormattedName( const RequestContext& context, ScriptElementType as = kPropertyElement ) const { return BaseScriptInfo::GetFormattedName( context, as ) ; }
706  TypeInfo GetStorageType( const ObjectScriptElement*, bool16 includeAssignableTypes = kFalse ) const ;
708  const TypeInfoList& GetAssignableTypes() const { return fAssignableTypes ; }
709  TypeInfoList& GetAssignableTypes() { return fAssignableTypes ; }
711  const ClassID& GetAttributeID() const { return fAttributeID ; }
712 
714  bool16 operator==( const PropertyScriptElement& ) const ;
716  virtual void ReadWrite( IPMStream* s ) ;
717 
718  private:
719  TypeInfo fStorageType ;
720  TypeInfoList fAssignableTypes ;
721  ClassID fAttributeID ;
722 } ;
723 
724 
725 //----------------------------------------------------------------------------
730 {
731  public:
732  EventScriptElement() : ScriptElement(), fBubbles(kFalse), fCancelable(kFalse)
733  {}
739  virtual const PMString& GetFormattedName( const RequestContext& context, ScriptElementType as = kEventElement ) const { return BaseScriptInfo::GetFormattedName( context, as ) ; }
743  bool16 GetBubbles() const { return fBubbles ; }
745  bool16 GetCancelable() const { return fCancelable ; }
747  ClassID GetEventClassID() const { return fEventClassID ; }
749  ScriptID GetEventScriptID() const { return fEventScriptID ; }
750 
752  bool16 operator==( const EventScriptElement& ) const ;
754  virtual void ReadWrite( IPMStream* s ) ;
755 
756  private:
757  bool16 fBubbles ;
758  bool16 fCancelable ;
759  ClassID fEventClassID ;
760  ScriptID fEventScriptID ;
761 } ;
762 
763 
764 //----------------------------------------------------------------------------
768 class EnumValue : public BaseScriptInfo
769 {
770  public:
776  virtual const PMString& GetFormattedName( const RequestContext& context, ScriptElementType as = kEnumValueElement ) const { return BaseScriptInfo::GetFormattedName( context, as ) ; }
777 } ;
778 
780 DEFINEK2READWRITE( EnumValue )
781 
782 
786 {
787  public:
793  virtual const PMString& GetFormattedName( const RequestContext& context, ScriptElementType as = kEnumElement ) const { return BaseScriptInfo::GetFormattedName( context, as ) ; }
794 
796  const EnumValueList& GetValues() const { return fValues ; }
798  EnumValueList& GetValues() { return fValues ; }
799 
801  bool16 operator==( const EnumScriptElement& ) const ;
803  virtual void ReadWrite( IPMStream* s ) ;
804 
805  private:
806  EnumValueList fValues ;
807 } ;
808 
809 //----------------------------------------------------------------------------
815 {
816  public:
818  bool16 SkipPacket( const ParentProviderPacket* ) const { return kFalse ; }
820  static bool16 Matches( const ParentProviderPacket* p1, const ParentProviderPacket* p2 )
821  { return p1->Element()->GetScriptID() == p2->Element()->GetScriptID() ; }
822  static bool16 SortByName( const ParentProviderPacket* p1, const ParentProviderPacket* p2 )
823  { return p1->Element()->GetName().Compare( kFalse, p2->Element()->GetName() ) < 0 ; }
824 } ;
825 
831 {
832  public:
834  bool16 SkipPacket( const ChildProviderPacket* ) const { return kFalse ; }
836  static bool16 Matches( const ChildProviderPacket* p1, const ChildProviderPacket* p2 )
837  { return p1->Element()->GetScriptID() == p2->Element()->GetScriptID() ; }
838  static bool16 SortByName( const ChildProviderPacket* p1, const ChildProviderPacket* p2 )
839  { return p1->Element()->GetName().Compare( kFalse, p2->Element()->GetName() ) < 0 ; }
840 } ;
841 
847 {
848  public:
850  bool16 SkipPacket( const MethodProviderPacket* ) const { return kFalse ; }
852  static bool16 Matches( const MethodProviderPacket* p1, const MethodProviderPacket* p2 )
853  { return p1->Element()->GetScriptID() == p2->Element()->GetScriptID() ; }
854  static bool16 SortByName( const MethodProviderPacket* p1, const MethodProviderPacket* p2 )
855  { return p1->Element()->GetName().Compare( kFalse, p2->Element()->GetName() ) < 0 ; }
856 } ;
857 
863 {
864  public:
869  AccessCollectionMethods( const ObjectScriptElement* parent ) : fParent( parent ) {} ; //nil parent is OK
871  bool16 SkipPacket( const CollectionMethodProviderPacket* p ) const { return ( fParent && fParent != p->Parent() ) ; }
874  { return ( p1->Element()->GetScriptID() == p2->Element()->GetScriptID() ) && ( p1->Parent() == p2->Parent() ) ; }
875  static bool16 SortByName( const CollectionMethodProviderPacket* p1, const CollectionMethodProviderPacket* p2 )
876  {
877  int32 x = p1->Parent()->GetName().Compare( kFalse, p2->Parent()->GetName() ) ;
878  if ( x < 0 )
879  return kTrue ;
880  if ( x == 0 && p1->Element()->GetName().Compare( kFalse, p2->Element()->GetName() ) < 0 )
881  return kTrue ;
882  return kFalse ;
883  }
884 
885  private:
886  const ObjectScriptElement* fParent ;
887 } ;
888 
894 {
895  public:
900  AccessProperties( const ClassID& attributeID = kInvalidClass ) : fAttrID( attributeID ) {} ;
902  bool16 SkipPacket( const PropertyProviderPacket* p ) const { return ( fAttrID != kInvalidClass && fAttrID != p->Element()->GetAttributeID() ) ; }
904  static bool16 Matches( const PropertyProviderPacket* p1, const PropertyProviderPacket* p2 )
905  { return p1->Element()->GetScriptID() == p2->Element()->GetScriptID() ; }
906  static bool16 SortByName( const PropertyProviderPacket* p1, const PropertyProviderPacket* p2 )
907  { return p1->Element()->GetName().Compare( kFalse, p2->Element()->GetName() ) < 0 ; }
908  private:
909  ClassID fAttrID ;
910 } ;
911 
917 {
918  public:
920  bool16 SkipPacket( const EventProviderPacket* ) const { return kFalse ; }
922  static bool16 Matches( const EventProviderPacket* p1, const EventProviderPacket* p2 )
923  { return p1->Element()->GetScriptID() == p2->Element()->GetScriptID() ; }
924  static bool16 SortByName( const EventProviderPacket* p1, const EventProviderPacket* p2 )
925  { return p1->Element()->GetName().Compare( kFalse, p2->Element()->GetName() ) < 0 ; }
926  private:
927  ClassID fAttrID ;
928 } ;
929 
930 } // End namespace ScriptInfo
931 
932 #endif //__SCRIPTINFO__