Initial import of the CDE 2.1.30 sources from the Open Group.
This commit is contained in:
242
cde/programs/dtinfo/dtinfogen/infolib/etc/AusText.C
Normal file
242
cde/programs/dtinfo/dtinfogen/infolib/etc/AusText.C
Normal file
@@ -0,0 +1,242 @@
|
||||
/* $XConsortium: AusText.C /main/3 1996/09/10 16:04:23 cde-hal $
|
||||
*
|
||||
* (c) Copyright 1996 Digital Equipment Corporation.
|
||||
* (c) Copyright 1996 Hewlett-Packard Company.
|
||||
* (c) Copyright 1996 International Business Machines Corp.
|
||||
* (c) Copyright 1996 Sun Microsystems, Inc.
|
||||
* (c) Copyright 1996 Novell, Inc.
|
||||
* (c) Copyright 1996 FUJITSU LIMITED.
|
||||
* (c) Copyright 1996 Hitachi.
|
||||
*/
|
||||
|
||||
/* imported interfaces */
|
||||
#include "OL-Data.h"
|
||||
#include "Task.h"
|
||||
#include "FlexBuffer.h"
|
||||
#include "Token.h"
|
||||
#include "OLAF.h"
|
||||
#include "BookCaseDB.h"
|
||||
#include "BookTasks.h"
|
||||
#include "NodeData.h"
|
||||
#include "NodeTask.h"
|
||||
#include "GraphicsTask.h"
|
||||
#include "BookTasks.h"
|
||||
#include "Dispatch.h"
|
||||
#include "SGMLName.h"
|
||||
#include "DataRepository.h"
|
||||
#include "AusTextStorage.h"
|
||||
|
||||
/* exported interfaces */
|
||||
#include "AusText.h"
|
||||
|
||||
const unsigned char WORD_SEP = ' ';
|
||||
|
||||
// charater strings
|
||||
const int OLIAS_SCOPE_TITLE = OLAF::Title;
|
||||
const int OLIAS_SCOPE_EXAMPLE = OLAF::Example;
|
||||
const int OLIAS_SCOPE_INDEX = OLAF::Index;
|
||||
const int OLIAS_SCOPE_TABLE = OLAF::Table;
|
||||
const int OLIAS_SCOPE_GRAPHIC = OLAF::Graphic;
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
AusText::AusText(NodeData *f_node, const Token &t):SearchEngine(f_node, t)
|
||||
{
|
||||
store = new DataRepository;
|
||||
f_search_store = NULL;
|
||||
|
||||
// NOTE: We need to activate default zone here because AusText::markup
|
||||
// is not being called for the top element in the section.
|
||||
// Do not forget to deactivate it on the other end!
|
||||
store->ActivateZone ( DataRepository::Default, t.level() );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
AusText::~AusText()
|
||||
{
|
||||
store->deActivateZone ( f_base );
|
||||
|
||||
if ( store ) { delete store; }
|
||||
if ( f_search_store ) { delete f_search_store; }
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
void
|
||||
AusText::write_start_tag ( const Token &t)
|
||||
{
|
||||
|
||||
const AttributeRec *a;
|
||||
|
||||
int level = t.level();
|
||||
|
||||
if ( a = t.LookupAttr( OLAF::OL_scope ) ) {
|
||||
|
||||
switch ( a->getAttValue() ) {
|
||||
|
||||
case OLIAS_SCOPE_EXAMPLE :
|
||||
store->ActivateZone( DataRepository::Example, level );
|
||||
break;
|
||||
|
||||
case OLIAS_SCOPE_GRAPHIC :
|
||||
store->ActivateZone( DataRepository::Graphic, level );
|
||||
break;
|
||||
|
||||
case OLIAS_SCOPE_INDEX :
|
||||
store->ActivateZone( DataRepository::Index, level );
|
||||
break;
|
||||
|
||||
case OLIAS_SCOPE_TABLE :
|
||||
store->ActivateZone( DataRepository::Table, level );
|
||||
break;
|
||||
|
||||
case OLIAS_SCOPE_TITLE :
|
||||
store->ActivateZone( DataRepository::Head, level );
|
||||
break;
|
||||
|
||||
default : throw(Unexpected("Not a valid zone"));
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
#if 0
|
||||
else {
|
||||
store->ActivateZone ( DataRepository::Default, level );
|
||||
}
|
||||
#endif
|
||||
|
||||
store->put( WORD_SEP );
|
||||
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
void
|
||||
AusText::write_end_tag( const Token & t)
|
||||
{
|
||||
store->deActivateZone( t.level() );
|
||||
store->put( WORD_SEP );
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
void
|
||||
AusText::write_terms( FlexBuffer *termsbuf )
|
||||
{
|
||||
int bufsize = termsbuf->GetSize();
|
||||
const char *buffer = termsbuf->GetBuffer();
|
||||
|
||||
store->write( buffer, bufsize );
|
||||
termsBuffer = termsbuf;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
void
|
||||
AusText::write_buffer()
|
||||
{
|
||||
BookCaseTask *f_bc = f_parent->node()->book()->bookcase();
|
||||
const char *BookCaseName = f_bc->bookcasename();
|
||||
const char *pathname = f_bc->database()->path();
|
||||
|
||||
f_search_store = new AusTextStore( pathname, BookCaseName );
|
||||
assert(f_search_store != NULL);
|
||||
|
||||
const char *book_short_title = f_parent->node()->book()->book_short_title();
|
||||
const char *book_id = f_parent->node()->book()->locator();
|
||||
const char *nodelocator = f_parent->node()->locator();
|
||||
const char *node_title = f_parent->node()->title();
|
||||
|
||||
f_search_store->insert(book_short_title,
|
||||
book_id,
|
||||
nodelocator,
|
||||
node_title,
|
||||
store
|
||||
);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
void
|
||||
AusText::markup( const Token & t )
|
||||
{
|
||||
if ( f_base > 0 ) {
|
||||
|
||||
ComplexTask::markup(t);
|
||||
|
||||
if ( t.type() == START ) {
|
||||
|
||||
|
||||
if ( Dispatch::OutsideIgnoreScope() ) {
|
||||
if ( t.LookupAttr( OLAF::OL_Graphic ) ) {
|
||||
CollectObject = t.level();
|
||||
|
||||
f_graphics = new GraphicsTask ( this, t );
|
||||
assert ( f_graphics != NULL );
|
||||
addSubTask( f_graphics );
|
||||
|
||||
}
|
||||
|
||||
#if TABLES
|
||||
else if( t.LookupAttr( OLAF::OL_Table ) ) {
|
||||
CollectObject = t.level();
|
||||
addSubTask(new SearchableTableTask(this, t));
|
||||
}
|
||||
#endif
|
||||
|
||||
write_start_tag ( t );
|
||||
|
||||
}
|
||||
}
|
||||
else if ( t.type() == END ) {
|
||||
|
||||
if ( Dispatch::OutsideIgnoreScope() ) {
|
||||
if ( CollectObject >= 0 ) {
|
||||
|
||||
if ( CollectObject == t.level() ) {
|
||||
|
||||
CollectObject = -1;
|
||||
|
||||
if ( f_graphics ) {
|
||||
if ( f_graphics->HasSearchTerms() ) {
|
||||
hasTerms = 1;
|
||||
FlexBuffer *buf = (FlexBuffer *)f_graphics->GetTerms();
|
||||
write_terms ( buf );
|
||||
}
|
||||
KILLSUBTASK( f_graphics );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
write_end_tag( t );
|
||||
|
||||
if ( f_base == t.level() ) {
|
||||
f_base = -1;
|
||||
write_buffer();
|
||||
}
|
||||
} /* OutsideIgnoreScope */
|
||||
|
||||
} /* if ( t.type() == END ) */
|
||||
|
||||
} /* if ( f_base > 0 ) */
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
void
|
||||
AusText::data ( const char *str, size_t sz )
|
||||
{
|
||||
|
||||
if ( f_base > 0 ) {
|
||||
ComplexTask::data( str, sz );
|
||||
|
||||
if ( Dispatch::OutsideIgnoreScope() ) {
|
||||
|
||||
/* @@ for tables, this isn't quite right... */
|
||||
if ( CollectObject < 0 ) {
|
||||
|
||||
|
||||
if ( sz == 0 ) { return; }
|
||||
store->write( str, sz );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user