From c897a106bd939efe5a38aa1135e265a69c9776a1 Mon Sep 17 00:00:00 2001 From: Henrik Tidefelt Date: Tue, 18 Nov 2008 02:21:12 +0100 Subject: [PATCH] Mutators for Catalog states. While working on this, there was a problem with order of initialization of globals. Problem was solved by making the initialization order explicit, by listing objects for initialization in main.cc. This requires an ugly const_cast. However, if one remembers to test new methods being added, one will immediately detect if methods have not been registered. Hence, there is no real danger in requiring all warm types with methods to be listed in main.cc. --- doc/parts/state-types/containers.sxml | 65 +++++++++++- examples/features/multipage.shape | 20 ++-- examples/features/remove.shape | 2 +- source/classtypes.cc | 19 ++-- source/classtypes.h | 5 +- source/coremisc.cc | 190 --------------------------------- source/hottypes.cc | 4 +- source/main.cc | 17 +++ source/multipage.cc | 194 +++++++++++++++++++++++++++++++++- 9 files changed, 303 insertions(+), 213 deletions(-) diff --git a/doc/parts/state-types/containers.sxml b/doc/parts/state-types/containers.sxml index dd50136b..f6b1a7f1 100644 --- a/doc/parts/state-types/containers.sxml +++ b/doc/parts/state-types/containers.sxml @@ -232,16 +232,77 @@ will not remove the stroke from the page, since the value being tacked - +

Define the bounding box key to be used for pages subsequently tacked on to the catalog. These pages will get equal media boxes in the end, being the smallest that contains all the bounding boxes of the pages in the group.

+
+ + + + + + +

Clear the bounding box key to be used for pages subsequently tacked on to the catalog. Pages will get a media box equal to their own bounding box.

+
+
+ + + + + + + + + + + + + + + + + + +

Change the page labeling properties to use for future pages being added to the state.

+
+ +

All arguments may be omitted, and their names explain their meanings. If omitted, the corresponding property is not changed by the mutator.

+

The parameter can be any of 'none, 'decimal, 'ROMAN, 'roman, 'ALPHABET, or 'alphabet.

+
+
+ + + + + + +

None.

+
-

Clear the bounding box key to be used for pages subsequently tacked on to the catalog. Pages will get a media box equal to their own bounding box.

+

Returns the string that would be used as page label for the next page being added to the state.

+
+
+
+
+ + + + + + + + + + +

None.

+
+ +

Returns the document page number (as opposed to logic page number) for the next page being added to the state.

diff --git a/examples/features/multipage.shape b/examples/features/multipage.shape index ba4cf77b..f5d11f97 100644 --- a/examples/features/multipage.shape +++ b/examples/features/multipage.shape @@ -13,9 +13,9 @@ clock: \ hour minute .> [stroke (0cm,0cm)--(minuteLength*[dir minuteAngle])] } -[setpagelabel •catalog prefix:`Am ´ number:'8] -[setbboxgroup •catalog 'clock] -•stdout << `First page's label: ´ << [nextpagelabel •catalog] << `¢n´ +•catalog.[setpagelabel prefix:`Am ´ number:'8] +•catalog.[setbboxgroup 'clock] +•stdout << `First page's label: ´ << •catalog.[nextpagelabel] << `¢n´ •catalog << [clock 8 0] & [destination level:'0 text:`Morning´ color:[rgb 0.5 0.5 0] open:true] @@ -32,17 +32,17 @@ clock: \ hour minute .> << [clock 9 0] & [destination level:'1 text:`Nine´] -[setpagelabel •catalog number:[nextpagenumber •catalog]+'1] -•stdout << `Skipping to page: ´ << [nextpagenumber •catalog] << `¢n´ +•catalog.[setpagelabel number:•catalog.[nextpagenumber]+'1] +•stdout << `Skipping to page: ´ << •catalog.[nextpagenumber] << `¢n´ -•catalog << [clock [nextpagenumber •catalog]*1 0] +•catalog << [clock •catalog.[nextpagenumber]*1 0] /** Note how the various part of the page label may be set independently of each other. **/ -[setpagelabel •catalog prefix:`Pm ´] -[setpagelabel •catalog number:'33] -[setpagelabel •catalog style:'alphabet] -•stdout << `Later page's label: ´ << [nextpagelabel •catalog] << `¢n´ +•catalog.[setpagelabel prefix:`Pm ´] +•catalog.[setpagelabel number:'33] +•catalog.[setpagelabel style:'alphabet] +•stdout << `Later page's label: ´ << •catalog.[nextpagelabel] << `¢n´ •catalog << [clock 3 10] & [destination level:'0 text:`Afternoon´ italic:true] diff --git a/examples/features/remove.shape b/examples/features/remove.shape index c7e5f124..36653c6f 100644 --- a/examples/features/remove.shape +++ b/examples/features/remove.shape @@ -1,6 +1,6 @@ •stuff: newGroup -[setbboxgroup •catalog 'all] +•catalog.[setbboxgroup 'all] •stuff << [tag 'a ( newText << `A´ )] •catalog << (•stuff) diff --git a/source/classtypes.cc b/source/classtypes.cc index 7809ebb0..f7d83628 100644 --- a/source/classtypes.cc +++ b/source/classtypes.cc @@ -712,19 +712,26 @@ Lang::MetaClass::gcMark( Kernel::GCMarkedSet & marked ) Lang::SystemFinalClass::SystemFinalClass( RefCountPtr< const char > _prettyName ) - : Lang::Class( _prettyName ) + : Lang::Class( _prettyName ), registerMutatorFunction_( 0 ) { } -Lang::SystemFinalClass::SystemFinalClass( RefCountPtr< const char > _prettyName, void (registerMutatorFunction)( SystemFinalClass * ) ) - : Lang::Class( _prettyName ) -{ - registerMutatorFunction( this ); -} +Lang::SystemFinalClass::SystemFinalClass( RefCountPtr< const char > _prettyName, RegisterMutatorFunction registerMutatorFunction ) + : Lang::Class( _prettyName ), registerMutatorFunction_( registerMutatorFunction ) +{ } Lang::SystemFinalClass::~SystemFinalClass( ) { } void +Lang::SystemFinalClass::initMutators( ) +{ + if( registerMutatorFunction_ != 0 ) + { + registerMutatorFunction_( this ); + } +} + +void Lang::SystemFinalClass::registerMutator( Lang::CoreFunction * fun ) { typedef typeof mutators_ MapType; diff --git a/source/classtypes.h b/source/classtypes.h index 3cbf55e9..1722a6c9 100644 --- a/source/classtypes.h +++ b/source/classtypes.h @@ -183,10 +183,13 @@ namespace Shapes class SystemFinalClass : public Lang::Class { std::map< const char *, RefCountPtr< const Lang::Function >, charPtrLess > mutators_; + typedef void ( * RegisterMutatorFunction )( SystemFinalClass * ); + RegisterMutatorFunction registerMutatorFunction_; public: SystemFinalClass( RefCountPtr< const char > _prettyName ); - SystemFinalClass( RefCountPtr< const char > _prettyName, void (registerMutatorFunction)( SystemFinalClass * ) ); + SystemFinalClass( RefCountPtr< const char > _prettyName, RegisterMutatorFunction registerMutatorFunction ); virtual ~SystemFinalClass( ); + void initMutators( ); void registerMutator( Lang::CoreFunction * fun ); virtual Kernel::ValueRef method_new( Kernel::EvalState * evalState, Kernel::Arguments & args, const Ast::SourceLocation & callLoc ) const; diff --git a/source/coremisc.cc b/source/coremisc.cc index 4cfec82f..247f7993 100644 --- a/source/coremisc.cc +++ b/source/coremisc.cc @@ -286,191 +286,6 @@ namespace Shapes } }; - class Core_nextpagenumber : public Lang::CoreFunction - { - public: - Core_nextpagenumber( const char * title ) - : CoreFunction( title, new Kernel::EvaluatedFormals( title, true ) ) - { - formals_->appendCoreStateFormal( "catalog" ); - } - - virtual void - call( Kernel::EvalState * evalState, Kernel::Arguments & args, const Ast::SourceLocation & callLoc ) const - { - args.applyDefaults( ); - - typedef Kernel::WarmCatalog StateType; - StateType * state = Helpers::down_cast_CoreState< StateType >( title_, args, 0, callLoc ); - - Kernel::ContRef cont = evalState->cont_; - cont->takeValue( Kernel::ValueRef( new Lang::Integer( state->getNextPageNumber( ) ) ), - evalState ); - } - }; - - class Core_nextpagelabel : public Lang::CoreFunction - { - public: - Core_nextpagelabel( const char * title ) - : CoreFunction( title, new Kernel::EvaluatedFormals( title, true ) ) - { - formals_->appendCoreStateFormal( "catalog" ); - } - - void - call( Kernel::EvalState * evalState, Kernel::Arguments & args, const Ast::SourceLocation & callLoc ) const - { - args.applyDefaults( ); - - typedef Kernel::WarmCatalog StateType; - StateType * state = Helpers::down_cast_CoreState< StateType >( title_, args, 0, callLoc ); - - Kernel::ContRef cont = evalState->cont_; - cont->takeValue( Kernel::ValueRef( new Lang::String( state->getNextPageLabel( ) ) ), - evalState ); - } - }; - - class Core_setpagelabel : public Lang::CoreFunction - { - public: - Core_setpagelabel( const char * title ) - : CoreFunction( title, new Kernel::EvaluatedFormals( title, true ) ) - { - formals_->appendCoreStateFormal( "catalog" ); - - formals_->appendEvaluatedCoreFormal( "prefix", Kernel::THE_VOID_VARIABLE ); - formals_->appendEvaluatedCoreFormal( "style", Kernel::THE_VOID_VARIABLE ); - formals_->appendEvaluatedCoreFormal( "number", Kernel::THE_VOID_VARIABLE ); - } - - virtual void - call( Kernel::EvalState * evalState, Kernel::Arguments & args, const Ast::SourceLocation & callLoc ) const - { - args.applyDefaults( ); - - typedef Kernel::WarmCatalog StateType; - StateType * state = Helpers::down_cast_CoreState< StateType >( title_, args, 0, callLoc ); - - size_t argsi = 0; - typedef const Lang::String PrefixValType; - RefCountPtr< PrefixValType > prefixVal = Helpers::down_cast_CoreArgument< PrefixValType >( title_, args, argsi, callLoc, true ); - RefCountPtr< const char > prefix = state->getNextPagePrefix( ); - if( prefixVal != NullPtr< PrefixValType >( ) ) - { - prefix = prefixVal->val_; - } - - ++argsi; - typedef const Lang::Symbol StyleType; - RefCountPtr< StyleType > style = Helpers::down_cast_CoreArgument< StyleType >( title_, args, 1, callLoc, true ); - - static Lang::Symbol STYLE_none( "none" ); - static Lang::Symbol STYLE_decimal( "decimal" ); - static Lang::Symbol STYLE_ROMAN( "ROMAN" ); - static Lang::Symbol STYLE_roman( "roman" ); - static Lang::Symbol STYLE_ALPHABET( "ALPHABET" ); - static Lang::Symbol STYLE_alphabet( "alphabet" ); - - Kernel::WarmCatalog::PageLabelEntry::Style styleVal; - if( style == NullPtr< StyleType >( ) ) - { - styleVal = state->getNextPageStyle( ); - } - else - { - if( *style == STYLE_none ) - { - styleVal = Kernel::WarmCatalog::PageLabelEntry::NONE; - } - else if( *style == STYLE_decimal ) - { - styleVal = Kernel::WarmCatalog::PageLabelEntry::DECIMAL; - } - else if( *style == STYLE_ROMAN ) - { - styleVal = Kernel::WarmCatalog::PageLabelEntry::ROMAN; - } - else if( *style == STYLE_roman ) - { - styleVal = Kernel::WarmCatalog::PageLabelEntry::rOMAN; - } - else if( *style == STYLE_ALPHABET ) - { - styleVal = Kernel::WarmCatalog::PageLabelEntry::ALPHABET; - } - else if( *style == STYLE_alphabet ) - { - styleVal = Kernel::WarmCatalog::PageLabelEntry::aLPHABET; - } - else - { - std::ostringstream oss; - oss << "Valid page label styles are the symbols { " - << STYLE_none.name( ).getPtr( ) << ", " - << STYLE_decimal.name( ).getPtr( ) << ", " - << STYLE_ROMAN.name( ).getPtr( ) << ", " - << STYLE_roman.name( ).getPtr( ) << ", " - << STYLE_alphabet.name( ).getPtr( ) << ", " - << STYLE_ALPHABET.name( ).getPtr( ) - << " }." ; - throw Exceptions::CoreOutOfRange( title_, args, argsi, strrefdup( oss ) ); - } - } - - ++argsi; - typedef const Lang::Integer NumberType; - RefCountPtr< NumberType > numberVal = Helpers::down_cast_CoreArgument< NumberType >( title_, args, argsi, callLoc, true ); - size_t number; - if( numberVal != NullPtr< NumberType >( ) ) - { - if( numberVal->val_ < 1 ) - { - throw Exceptions::CoreOutOfRange( title_, args, argsi, "PDF only allows strictly positive page numbers." ); - } - number = static_cast< size_t >( numberVal->val_ ); - } - else - { - number = state->getNextPageNumber( ); - } - - state->setLabel( prefix, styleVal, number ); - - Kernel::ContRef cont = evalState->cont_; - cont->takeHandle( Kernel::THE_SLOT_VARIABLE, - evalState ); - } - }; - - class Core_setbboxgroup : public Lang::CoreFunction - { - public: - Core_setbboxgroup( const char * title ) - : CoreFunction( title, new Kernel::EvaluatedFormals( title, true ) ) - { - formals_->appendCoreStateFormal( "catalog" ); - - formals_->appendEvaluatedCoreFormal( "key", Kernel::THE_VOID_VARIABLE ); - } - - virtual void - call( Kernel::EvalState * evalState, Kernel::Arguments & args, const Ast::SourceLocation & callLoc ) const - { - args.applyDefaults( ); - - typedef Kernel::WarmCatalog StateType; - StateType * state = Helpers::down_cast_CoreState< StateType >( title_, args, 0, callLoc ); - - state->setBBoxGroup( Helpers::down_cast_CoreArgument< const Lang::Symbol >( title_, args, 0, callLoc, true ) ); - - Kernel::ContRef cont = evalState->cont_; - cont->takeHandle( Kernel::THE_SLOT_VARIABLE, - evalState ); - } - }; - class Core_locate : public Lang::CoreFunction { public: @@ -544,11 +359,6 @@ Kernel::registerCore_misc( Kernel::Environment * env ) env->initDefineCoreFunction( new Lang::Core_hot( "hot" ) ); env->initDefineCoreFunction( new Lang::Core_ampersand_dynamic( "bindings" ) ); - env->initDefineCoreFunction( new Lang::Core_nextpagenumber( "nextpagenumber" ) ); - env->initDefineCoreFunction( new Lang::Core_nextpagelabel( "nextpagelabel" ) ); - env->initDefineCoreFunction( new Lang::Core_setpagelabel( "setpagelabel" ) ); - env->initDefineCoreFunction( new Lang::Core_setbboxgroup( "setbboxgroup" ) ); - env->initDefineCoreFunction( new Lang::Core_locate( "locate" ) ); env->initDefineCoreFunction( new Lang::Core_sourceof( "sourceof" ) ); } diff --git a/source/hottypes.cc b/source/hottypes.cc index e4f47787..646777ed 100644 --- a/source/hottypes.cc +++ b/source/hottypes.cc @@ -267,8 +267,8 @@ namespace Shapes state->erase( ); Kernel::ContRef cont = evalState->cont_; - cont->takeValue( Lang::THE_VOID, - evalState ); + cont->takeHandle( Kernel::THE_SLOT_VARIABLE, + evalState ); } }; diff --git a/source/main.cc b/source/main.cc index 538f04cb..6f0cbb90 100644 --- a/source/main.cc +++ b/source/main.cc @@ -1607,6 +1607,19 @@ namespace Shapes { cls->setSelfRef( cls ); } + void initMutators( RefCountPtr< const Lang::Class > cls ) + { + Lang::SystemFinalClass * typedPtr = dynamic_cast< Lang::SystemFinalClass * >( const_cast< Lang::Class * >( cls.getPtr( ) ) ); + if( typedPtr != 0 ) + { + typedPtr->initMutators( ); + } + else + { + std::cerr << "Helpers::initMutators was called with object of bad type." << std::endl ; + exit( Interaction::EXIT_INTERNAL_ERROR ); + } + } } } @@ -1640,6 +1653,10 @@ setupGlobals( ) Helpers::setSelfRef( Lang::TransformedInstance::TypeID ); + Helpers::initMutators( Kernel::WarmGroup2D::TypeID ); + Helpers::initMutators( Kernel::WarmGroup3D::TypeID ); + Helpers::initMutators( Kernel::WarmCatalog::TypeID ); + { Lang::SystemVirtualInterface * tmp = new Lang::SystemVirtualInterface( strrefdup( "Geometric2D" ) ); Lang::Geometric2D::TypeID = RefCountPtr< const Lang::Class >( tmp ); diff --git a/source/multipage.cc b/source/multipage.cc index 76a58373..a6885df3 100644 --- a/source/multipage.cc +++ b/source/multipage.cc @@ -8,6 +8,7 @@ #include "continuations.h" #include "globals.h" #include "shapesexceptions.h" +#include "shapescore.h" #include @@ -262,6 +263,188 @@ Kernel::WarmCatalog::PageLabelEntry::PageLabelEntry( size_t pageIndex, const Ref Kernel::WarmCatalog::PageLabelEntry::~PageLabelEntry( ) { } +namespace Shapes +{ + namespace Kernel + { + + template< class T > + class Mutator_setbboxgroup : public Lang::CoreFunction + { + public: + Mutator_setbboxgroup( const char * title ) + : CoreFunction( title, new Kernel::EvaluatedFormals( title, true ) ) + { + formals_->appendEvaluatedCoreFormal( "key", Kernel::THE_VOID_VARIABLE ); + } + virtual void + call( Kernel::EvalState * evalState, Kernel::Arguments & args, const Ast::SourceLocation & callLoc ) const + { + args.applyDefaults( ); + + typedef T StateType; + StateType * state = Helpers::mutator_cast_self< StateType >( args.getMutatorSelf( ) ); + state->setBBoxGroup( Helpers::down_cast_CoreArgument< const Lang::Symbol >( title_, args, 0, callLoc, true ) ); + + Kernel::ContRef cont = evalState->cont_; + cont->takeValue( Lang::THE_VOID, + evalState ); + } + }; + + template< class T > + class Mutator_setpagelabel : public Lang::CoreFunction + { + public: + Mutator_setpagelabel( const char * title ) + : CoreFunction( title, new Kernel::EvaluatedFormals( title, true ) ) + { + formals_->appendEvaluatedCoreFormal( "prefix", Kernel::THE_VOID_VARIABLE ); + formals_->appendEvaluatedCoreFormal( "style", Kernel::THE_VOID_VARIABLE ); + formals_->appendEvaluatedCoreFormal( "number", Kernel::THE_VOID_VARIABLE ); + } + virtual void + call( Kernel::EvalState * evalState, Kernel::Arguments & args, const Ast::SourceLocation & callLoc ) const + { + args.applyDefaults( ); + + typedef T StateType; + StateType * state = Helpers::mutator_cast_self< StateType >( args.getMutatorSelf( ) ); + + size_t argsi = 0; + typedef const Lang::String PrefixValType; + RefCountPtr< PrefixValType > prefixVal = Helpers::down_cast_CoreArgument< PrefixValType >( title_, args, argsi, callLoc, true ); + RefCountPtr< const char > prefix = state->getNextPagePrefix( ); + if( prefixVal != NullPtr< PrefixValType >( ) ) + { + prefix = prefixVal->val_; + } + + ++argsi; + typedef const Lang::Symbol StyleType; + RefCountPtr< StyleType > style = Helpers::down_cast_CoreArgument< StyleType >( title_, args, argsi, callLoc, true ); + + static Lang::Symbol STYLE_none( "none" ); + static Lang::Symbol STYLE_decimal( "decimal" ); + static Lang::Symbol STYLE_ROMAN( "ROMAN" ); + static Lang::Symbol STYLE_roman( "roman" ); + static Lang::Symbol STYLE_ALPHABET( "ALPHABET" ); + static Lang::Symbol STYLE_alphabet( "alphabet" ); + + Kernel::WarmCatalog::PageLabelEntry::Style styleVal; + if( style == NullPtr< StyleType >( ) ) + { + styleVal = state->getNextPageStyle( ); + } + else + { + if( *style == STYLE_none ) + { + styleVal = Kernel::WarmCatalog::PageLabelEntry::NONE; + } + else if( *style == STYLE_decimal ) + { + styleVal = Kernel::WarmCatalog::PageLabelEntry::DECIMAL; + } + else if( *style == STYLE_ROMAN ) + { + styleVal = Kernel::WarmCatalog::PageLabelEntry::ROMAN; + } + else if( *style == STYLE_roman ) + { + styleVal = Kernel::WarmCatalog::PageLabelEntry::rOMAN; + } + else if( *style == STYLE_ALPHABET ) + { + styleVal = Kernel::WarmCatalog::PageLabelEntry::ALPHABET; + } + else if( *style == STYLE_alphabet ) + { + styleVal = Kernel::WarmCatalog::PageLabelEntry::aLPHABET; + } + else + { + std::ostringstream oss; + oss << "Valid page label styles are the symbols { " + << STYLE_none.name( ).getPtr( ) << ", " + << STYLE_decimal.name( ).getPtr( ) << ", " + << STYLE_ROMAN.name( ).getPtr( ) << ", " + << STYLE_roman.name( ).getPtr( ) << ", " + << STYLE_alphabet.name( ).getPtr( ) << ", " + << STYLE_ALPHABET.name( ).getPtr( ) + << " }." ; + throw Exceptions::CoreOutOfRange( title_, args, argsi, strrefdup( oss ) ); + } + } + + ++argsi; + typedef const Lang::Integer NumberType; + RefCountPtr< NumberType > numberVal = Helpers::down_cast_CoreArgument< NumberType >( title_, args, argsi, callLoc, true ); + size_t number; + if( numberVal != NullPtr< NumberType >( ) ) + { + if( numberVal->val_ < 1 ) + { + throw Exceptions::CoreOutOfRange( title_, args, argsi, "PDF only allows strictly positive page numbers." ); + } + number = static_cast< size_t >( numberVal->val_ ); + } + else + { + number = state->getNextPageNumber( ); + } + + state->setLabel( prefix, styleVal, number ); + + Kernel::ContRef cont = evalState->cont_; + cont->takeHandle( Kernel::THE_SLOT_VARIABLE, + evalState ); + } + }; + + template< class T > + class Mutator_nextpagelabel : public Lang::CoreFunction + { + public: + Mutator_nextpagelabel( const char * title ) + : CoreFunction( title, new Kernel::EvaluatedFormals( title, true ) ) + { + } + virtual void + call( Kernel::EvalState * evalState, Kernel::Arguments & args, const Ast::SourceLocation & callLoc ) const + { + args.applyDefaults( ); + + typedef T StateType; + StateType * state = Helpers::mutator_cast_self< StateType >( args.getMutatorSelf( ) ); + Kernel::ContRef cont = evalState->cont_; + cont->takeValue( Kernel::ValueRef( new Lang::String( state->getNextPageLabel( ) ) ), + evalState ); + } + }; + + template< class T > + class Mutator_nextpagenumber : public Lang::CoreFunction + { + public: + Mutator_nextpagenumber( const char * title ) + : CoreFunction( title, new Kernel::EvaluatedFormals( title, true ) ) + { + } + virtual void + call( Kernel::EvalState * evalState, Kernel::Arguments & args, const Ast::SourceLocation & callLoc ) const + { + args.applyDefaults( ); + + typedef T StateType; + StateType * state = Helpers::mutator_cast_self< StateType >( args.getMutatorSelf( ) ); + Kernel::ContRef cont = evalState->cont_; + cont->takeValue( Kernel::ValueRef( new Lang::Integer( state->getNextPageNumber( ) ) ), + evalState ); + } + }; + } +} Kernel::WarmCatalog::WarmCatalog( ) : pageLabelsActivated_( false ), @@ -273,7 +456,16 @@ Kernel::WarmCatalog::WarmCatalog( ) Kernel::WarmCatalog::~WarmCatalog( ) { } -RefCountPtr< const Lang::Class > Kernel::WarmCatalog::TypeID( new Lang::SystemFinalClass( strrefdup( "#Catalog" ) ) ); +void +WarmCatalog_register_mutators( Lang::SystemFinalClass * dstClass ) +{ + dstClass->registerMutator( new Kernel::Mutator_setbboxgroup< Kernel::WarmCatalog >( "setbboxgroup" ) ); + dstClass->registerMutator( new Kernel::Mutator_setpagelabel< Kernel::WarmCatalog >( "setpagelabel" ) ); + dstClass->registerMutator( new Kernel::Mutator_nextpagelabel< Kernel::WarmCatalog >( "nextpagelabel" ) ); + dstClass->registerMutator( new Kernel::Mutator_nextpagenumber< Kernel::WarmCatalog >( "nextpagenumber" ) ); +} + +RefCountPtr< const Lang::Class > Kernel::WarmCatalog::TypeID( new Lang::SystemFinalClass( strrefdup( "#Catalog" ), WarmCatalog_register_mutators ) ); TYPEINFOIMPL_STATE( WarmCatalog ); void -- 2.11.4.GIT