diff --git a/src/experimental/ofx/parser/.cvsignore b/src/experimental/ofx/parser/.cvsignore deleted file mode 100644 index 282522db03..0000000000 --- a/src/experimental/ofx/parser/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -Makefile -Makefile.in diff --git a/src/experimental/ofx/parser/DtdParser.C b/src/experimental/ofx/parser/DtdParser.C deleted file mode 100644 index d57c4ee85c..0000000000 --- a/src/experimental/ofx/parser/DtdParser.C +++ /dev/null @@ -1,341 +0,0 @@ -// $Id$ -// Copyright (C) 1997 ISOGEN International Corp. and TechnoTeacher, Inc. -// All Rights Reserved. -// -// -// This file and its associated materials are copyrighted material of -// ISOGEN International Corp. (ISOGEN) and TechnoTeacher, -// Inc. (TechnoTeacher). License to copy and use this file and its -// associated materials is granted to everyone, free of charge, with -// the following restrictions: (1) The ISOGEN and TechnoTeacher -// copyright statement must be maintained in any copies. (2) New -// materials derived from these materials must indicate their source, -// including references to the ISOGEN and TechnoTeacher web sites -// (www.isogen.com and www.techno.com). (3) These materials may not be -// sold in any form without the express written permission of ISOGEN -// and TechnoTeacher. [However, feel free to sell things you create -// from these materials as long as the things you create are truly -// different in function--we want to encourage people to learn from -// these materials and benefit from having learned--we just don't want -// others to sell what we're giving away.] -// - -#include "config.h" -#include "DtdParser.h" - -#include "macros.h" -#include "sptchar.h" -#include "CodingSystemKit.h" - -#include "PosixStorage.h" -#ifdef SP_WININET -#include "WinInetStorage.h" -#else -#include "URLStorage.h" -#endif -#include "LiteralStorage.h" -#include "NotationStorage.h" -#include "ExtendEntityManager.h" -#include "SOEntityCatalog.h" - -#include "ErrorCountEventHandler.h" - -#ifndef SP_DEFAULT_ENCODING -#ifdef WIN32 -#define SP_DEFAULT_ENCODING SP_T("WINDOWS") -#else -#define SP_DEFAULT_ENCODING SP_T("IS8859-1") -#endif -#endif /* not SP_DEFAULT_ENCODING */ - -#ifndef SGML_SEARCH_PATH_DEFAULT -#define SGML_SEARCH_PATH_DEFAULT SP_T("") -#endif - -#ifndef SGML_CATALOG_FILES_DEFAULT -#define SGML_CATALOG_FILES_DEFAULT SP_T("") -#endif /* not SGML_CATALOG_FILES_DEFAULT */ - -#ifdef SP_NAMESPACE -namespace SP_NAMESPACE { -#endif - -#ifdef SP_MSDOS_FILENAMES -const Char FILE_SEP = ';'; -#else -const Char FILE_SEP = ':'; -#endif - -DtdParser:: -DtdParser( const char * requiredInternalCode) -: internalCharsetIsDocCharset_( 1), - codingSystem_( 0), - mapCatalogDocument_(0), - mgr_( &nullMgr_) -{ - initCodingSystem( requiredInternalCode); -} - -void -DtdParser:: -setMessenger( Messenger * mgr) -{ - mgr_ = mgr ? mgr : &nullMgr_; -} - -class DtdParserEventHandler -: public ErrorCountEventHandler -{ - public: - DtdParserEventHandler( Messenger *); - void message( MessageEvent *); - private: - Messenger * mgr_; -}; - -DtdParserEventHandler:: -DtdParserEventHandler( Messenger * mgr) -: mgr_( mgr) -{ -} - -void -DtdParserEventHandler:: -message( MessageEvent * event) -{ - // ignore ParserMessages::documentEndProlog and ParserMessages::documentElementUndefined - if ( event->message().type->number() != 45 && event->message().type->number() != 319) { - mgr_->dispatchMessage( event->message()); - } - ErrorCountEventHandler::message( event); -} - -ConstPtr< Dtd> -DtdParser:: -parseDtd( const StringC & sysid) -{ - DtdParserEventHandler handler( mgr_); - - SgmlParser::Params sdParams; - sdParams.sysid = convertInput( SP_T( " ")); - sdParams.entityManager = entityManager().pointer(); - sdParams.options = &options_; - sdParser_.init( sdParams); - sdParser_.parseAll( handler, handler.cancelPtr()); - - SgmlParser::Params params; - params.sysid = sysid; - params.entityType = SgmlParser::Params::dtd; -// unnecessary, since params.doctypeName starts out empty anyway. -// params.doctypeName = convertInput( SP_T( "")); - params.entityManager = entityManager().pointer(); - params.options = &options_; - params.parent = &sdParser_; - parser_.init( params); - parser_.parseAll( handler, handler.cancelPtr()); - - Ptr< Dtd> dtd( parser_.baseDtd()); - delete dtd->removeElementType( params.doctypeName); - - return dtd; -} - -Boolean -stringMatches( const SP_TCHAR * s, const char * key) -{ - for (; *key != '\0'; s++, key++) { - if (*s != tolower(*key) && *s != toupper(*key)) - return 0; - } - return *s == '\0'; -} - -void -DtdParser:: -initCodingSystem( const char * requiredInternalCode) -{ - const char *name = requiredInternalCode; -#ifdef SP_MULTI_BYTE - char buf[256]; - if (!name) { - const SP_TCHAR *internalCode = tgetenv(SP_T("SP_SYSTEM_CHARSET")); - if (internalCode) { - buf[255] = '\0'; - for (size_t i = 0; i < 255; i++) { - buf[i] = internalCode[i]; - if (buf[i] == '\0') - break; - } - name = buf; - } - } - if (requiredInternalCode) - internalCharsetIsDocCharset_ = 0; - else { - const SP_TCHAR *useInternal = tgetenv(SP_T("SP_CHARSET_FIXED")); - if (useInternal - && (stringMatches(useInternal, "YES") - || stringMatches(useInternal, "1"))) - internalCharsetIsDocCharset_ = 0; - } -#endif /* SP_MULTI_BYTE */ - codingSystemKit_ = CodingSystemKit::make(name); - const SP_TCHAR *codingName = tgetenv(internalCharsetIsDocCharset_ - ? SP_T("SP_BCTF") - : SP_T("SP_ENCODING")); - if (codingName) - codingSystem_ = lookupCodingSystem(codingName); -#ifdef SP_MULTI_BYTE - if (!codingSystem_ && !internalCharsetIsDocCharset_) - codingSystem_ = lookupCodingSystem(SP_DEFAULT_ENCODING); -#endif - if (!codingSystem_ -#ifndef SP_WIDE_SYSTEM - || codingSystem_->fixedBytesPerChar() > 1 -#endif - ) - codingSystem_ = codingSystemKit_->identityCodingSystem(); -} - -const CodingSystem * -DtdParser:: -lookupCodingSystem( const AppChar * codingName) -{ -#define MAX_CS_NAME 50 - if (tcslen(codingName) < MAX_CS_NAME) { - char buf[MAX_CS_NAME]; - int i; - for (i = 0; codingName[i] != SP_T('\0'); i++) { - SP_TUCHAR c = codingName[i]; -#ifdef SP_WIDE_SYSTEM - if (c > (unsigned char)-1) - return 0; -#endif - buf[i] = char(c); - } - buf[i] = '\0'; - return codingSystemKit_->makeCodingSystem(buf, internalCharsetIsDocCharset_); - } - return 0; -} - -StringC -DtdParser:: -convertInput( const SP_TCHAR * s) -{ -#ifdef SP_WIDE_SYSTEM - StringC str(s, wcslen(s)); -#else - StringC str(codingSystem()->convertIn(s)); -#endif - for (size_t i = 0; i < str.size(); i++) - if (str[i] == '\n') - str[i] = '\r'; - return str; -} - -Boolean -DtdParser:: -makeSystemId( int nFiles, AppChar * const * files, StringC & result) -{ - Vector filenames(nFiles == 0 ? 1 : nFiles); - int i; - for (i = 0; i < nFiles; i++) - filenames[i] = convertInput(tcscmp(files[i], SP_T("-")) == 0 - ? SP_T("0") - : files[i]); - if (nFiles == 0) - filenames[0] = convertInput(SP_T("0")); - return entityManager()->mergeSystemIds(filenames, - mapCatalogDocument_, - systemCharset(), - *mgr_, - result); -} - -Ptr< ExtendEntityManager> & -DtdParser:: -entityManager() -{ - if (!entityManager_.isNull()) - return entityManager_; - PosixStorageManager *sm - = new PosixStorageManager("OSFILE", - &systemCharset(), -#ifndef SP_WIDE_SYSTEM - codingSystem(), -#endif - 5); - size_t i; - for (i = 0; i < searchDirs_.size(); i++) - sm->addSearchDir(convertInput(searchDirs_[i])); - { - const AppChar *e = tgetenv(SP_T("SGML_SEARCH_PATH")); - if (!e) - e = SGML_SEARCH_PATH_DEFAULT; - if (*e) { - StringC str(convertInput(e)); - size_t i = 0; - size_t start = 0; - for (;;) { - if (i == str.size() || str[i] == FILE_SEP) { - sm->addSearchDir(StringC(str.data() + start, - i - start)); - if (i == str.size()) - break; - start = ++i; - } - else - i++; - } - } - } - - entityManager_ = ExtendEntityManager::make(sm, - codingSystem(), - inputCodingSystemKit(), - internalCharsetIsDocCharset_); -#ifdef SP_WININET - entityManager_->registerStorageManager(new WinInetStorageManager("URL")); -#else - entityManager_->registerStorageManager(new URLStorageManager("URL")); -#endif - entityManager_->registerStorageManager(new LiteralStorageManager("LITERAL")); - entityManager_->registerStorageManager(new NotationStorageManager("CLSID")); - entityManager_->registerStorageManager(new NotationStorageManager("MIMETYPE")); - Vector v; - for (i = 0; i < catalogSysids_.size(); i++) - // filenames specified on command-line must exist - v.push_back(convertInput(catalogSysids_[i])); - { - const AppChar *e = tgetenv(SP_T("SGML_CATALOG_FILES")); - if (!e) - e = SGML_CATALOG_FILES_DEFAULT; - if (*e) { - StringC str(convertInput(e)); - size_t i = 0; - size_t start = 0; - for (;;) { - if (i == str.size() || str[i] == FILE_SEP) { - v.push_back(StringC(str.data() + start, - i - start)); - if (i == str.size()) - break; - start = ++i; - } - else - i++; - } - } - } - entityManager_->setCatalogManager(SOCatalogManager::make(v, - catalogSysids_.size(), - &systemCharset(), - &systemCharset(), - 0)); - return entityManager_; -} - -#ifdef SP_NAMESPACE -} -#endif diff --git a/src/experimental/ofx/parser/DtdParser.h b/src/experimental/ofx/parser/DtdParser.h deleted file mode 100644 index e2103d2122..0000000000 --- a/src/experimental/ofx/parser/DtdParser.h +++ /dev/null @@ -1,120 +0,0 @@ -// $Id$ -// Copyright (C) 1997 ISOGEN International Corp. and TechnoTeacher, Inc. -// All Rights Reserved. -// -// -// This file and its associated materials are copyrighted material of -// ISOGEN International Corp. (ISOGEN) and TechnoTeacher, -// Inc. (TechnoTeacher). License to copy and use this file and its -// associated materials is granted to everyone, free of charge, with -// the following restrictions: (1) The ISOGEN and TechnoTeacher -// copyright statement must be maintained in any copies. (2) New -// materials derived from these materials must indicate their source, -// including references to the ISOGEN and TechnoTeacher web sites -// (www.isogen.com and www.techno.com). (3) These materials may not be -// sold in any form without the express written permission of ISOGEN -// and TechnoTeacher. [However, feel free to sell things you create -// from these materials as long as the things you create are truly -// different in function--we want to encourage people to learn from -// these materials and benefit from having learned--we just don't want -// others to sell what we're giving away.] -// - -#ifndef DtdParser_INCLUDED -#define DtdParser_INCLUDED 1 - -#include "Dtd.h" -#include "Ptr.h" -#include "Vector.h" -#include "CodingSystem.h" -#include "CodingSystemKit.h" -#include "SgmlParser.h" -#include "ParserOptions.h" -#include "ExtendEntityManager.h" - -#ifdef SP_NAMESPACE -namespace SP_NAMESPACE { -#endif - -class DtdParser { - public: - DtdParser( const char * requiredInternalCode = 0); - void setMessenger( Messenger *); - - ConstPtr< Dtd> parseDtd( const StringC & sysid); - -#ifdef SP_WIDE_SYSTEM - typedef wchar_t AppChar; -#else - typedef char AppChar; -#endif - const CodingSystem * codingSystem(); - const CharsetInfo & systemCharset(); - ConstPtr< InputCodingSystemKit> inputCodingSystemKit(); - StringC convertInput( const AppChar * s); - - Boolean makeSystemId( int nFiles, AppChar * const * files, StringC & result); - Ptr< ExtendEntityManager> & entityManager(); - - SgmlParser & parser(); - - private: - Messenger * mgr_; - NullMessenger nullMgr_; - - // Coding system stuff - void initCodingSystem( const char * requiredInternalCode); - const CodingSystem * lookupCodingSystem( const AppChar * codingName); - Boolean internalCharsetIsDocCharset_; - Ptr< CodingSystemKit> codingSystemKit_; - const CodingSystem * codingSystem_; - - // Entity manager stuff - Vector< const AppChar *> searchDirs_; - Vector< const AppChar *> catalogSysids_; - Boolean mapCatalogDocument_; - Ptr< ExtendEntityManager> entityManager_; - - // SGML Parser stuff - ParserOptions options_; - SgmlParser sdParser_; - SgmlParser parser_; -}; - -inline -const CodingSystem * -DtdParser:: -codingSystem() -{ - return codingSystem_; -} - -inline -ConstPtr< InputCodingSystemKit> -DtdParser:: -inputCodingSystemKit() -{ - return codingSystemKit_.pointer(); -} - -inline -const CharsetInfo & -DtdParser:: -systemCharset() -{ - return codingSystemKit_->systemCharset(); -} - -inline -SgmlParser & -DtdParser:: -parser() -{ - return parser_; -} - -#ifdef SP_NAMESPACE -} -#endif - -#endif /* not DtdParser_INCLUDED */ diff --git a/src/experimental/ofx/parser/LICENSE b/src/experimental/ofx/parser/LICENSE deleted file mode 100644 index e23392682b..0000000000 --- a/src/experimental/ofx/parser/LICENSE +++ /dev/null @@ -1,11 +0,0 @@ - -Note that some of the code in this directory is covered by -ISOGEN and TechnoTeacher copyrights. On first reading, these -copyrights appear to be restrictive. However, the parenthetical -remarks in thier license seems to indicate that a larger, derived -work is no longer subject to thier license. Since all of the rest -of the stuff in this directory is a larger, derived work, it would -appear that thier license doesn't apply, and that the whole can be -safely GPL'ed. - - diff --git a/src/experimental/ofx/parser/Makefile.am b/src/experimental/ofx/parser/Makefile.am deleted file mode 100644 index 6e493c24eb..0000000000 --- a/src/experimental/ofx/parser/Makefile.am +++ /dev/null @@ -1,18 +0,0 @@ - -EXTRA_DIST = \ - DtdParser.C \ - DtdParser.h \ - LICENSE \ - README \ - example.txt \ - parseDtd.C \ - parseOfx.C \ - pfxBaseTypes.C \ - pfxBaseTypes.h \ - pfxCompTypes.C \ - pfxCompTypes.h \ - pfxLangOut.C \ - pfxLangOut.h \ - pfxUtils.C \ - pfxUtils.h \ - simple.C diff --git a/src/experimental/ofx/parser/README b/src/experimental/ofx/parser/README deleted file mode 100644 index c0fab7c700..0000000000 --- a/src/experimental/ofx/parser/README +++ /dev/null @@ -1,53 +0,0 @@ - -This directory contains some experimental code to handle -OFX (Open Financial Exchange) messages. - -The most interesting thing here is the DTD parser "parseOfx" -which attempts to build a C++ interface that models the -structure of the OFX DTD's. It *almost* works. There -are some exceptional cases that are not properly handled. - -Next on the list of work items is to extend the parser so -that it will also generate an implementation for the interface. -Specifically, it should automatically create code for constructors, -destructors, as well as SGML input & output routines (parsers, -of a sort). - -To check this out, run parseOfx like so: -> parseOfx dtd/ofxmain.dtd - -It will print the C++ decls to stdout. - --------------------------------------------------------------- - -HTTP tool: -http://www.inf.ufrgs.br/~sagula/urlget.html - -OFX financicial institution list: -https://ofx-prod-filist.intuit.com/qw0700/filist.asp - -SSLeay rpm's: -http://www.sabotage.net/redhat/ssl.html -http://ftp.tu-clausthal.de/pub/TEXT/EXPERT/linux/redhat-security/i386 -http://ftp.tu-clausthal.de/pub/TEXT/EXPERT/linux/redhat-security/SRPMS - --------------------------------------------------------------- - -To build stuff in this directory, you will needs James Clark's -SGML Parser. This can be obtained at -http://www.jclark.com/sp/index.htm -Also: -ftp.debian.org/pub/debian/dists/frozen/main/binary-i386/text/sp_1.3-1.1-4.deb - -This directory contains code from -ftp://ftp.techno.com/TechnoTeacher/parseDtd/parseDtd.zip - -parseDtd.C: the sample parser from TechnoTeacher - -parseOfx.C: the mangled parser I'm hacking on. - -dtd/ofxmain.dtd: a hacked version of the original dtd, with - the intent of exposing the base types. - ---linas -March 1998 diff --git a/src/experimental/ofx/parser/example.txt b/src/experimental/ofx/parser/example.txt deleted file mode 100644 index 02170ee6b8..0000000000 --- a/src/experimental/ofx/parser/example.txt +++ /dev/null @@ -1,126 +0,0 @@ -From: ueli (urutishauser@bigfoot.com) - -as example, a logon request. the result is something like that: - ---------------- - - - -19980411101000 - -xxxxxx - -xxxxxx - -ENG - -GNUCash_OFX - -0001 - - - -[...something more like a investement statement download request...] - ----------------------------------------------------------- - -class hierarchy - - OFX - ---> SIGNONMSGSRQV1 - --> SONRQ - -->DTCLIENT - -->USERID - -->USERPASS - -->LANGUAGE - -->APPID - -->APPVER - - ----------------------------------------------------------- -(copy from junk.C) - -class cfxSignonmsgsrsv1; -class cfxSonrs; - -class cfxSignonmsgsrsv1 -{ - public: - cfxSignonmsgsrsv1 (void); // constructor - virtual ~cfxSignonmsgsrsv1 (); // destructor - - - // Sonrs *must* be present - cfxSonrs *sonrs; - nchtrnrs *pinchtrnrs; - - // Challengetrnrs may be a null pointer - cfxChallengetrnrs *challengetrnrs; -}; - - -class cfxSonrs -{ - public: - cfxSonrs (void); // constructor - virtual ~cfxSonrs (); // destructor - - - // Status *must* be present - cfxStatus *status; - bfxDttm *dtserver; - bfxStr *userkey; - bfxDttm *tskeyexpire; - bfxStr *language; - bfxDttm *dtprofup; - bfxDttm *dtacctup; - - // Fi may be a null pointer - cfxFi *fi; - bfxStr *sesscookie; -}; - -class cfxOfx -{ - public: - // Signonmsgsrsv1 *must* be present - cfxSignonmsgsrsv1 *signonmsgsrsv1; - -.. -} - ----------------------------------------------------------- -some pseudo-code to produce a login request: - -{ - ofxrequest = new cfxOfx(); - ofxreqeust->signonmsgsrsv1->sonrs->dtserver="199811111"; - - ... - - //all needed variables - - - // ofx_request_type = login/investement statement - // download/billings/creditcard - if (ofxrequest->Valid(ofx_request_type)) - { - ofxrequest->ExportRequest(ofx_request_type); - - request = new HTTPRequest(); - repuest->CreateHeader(); - request->AddContent(ofxrequest->GetContent()); - if (request->SendRequest()) - { - //now read in the result in a new ofxrequest structure - ofxresponse = new cfxOfx(); - //or not cfxOfx, cfxOfx i eventually only for request - - request->ParseResponse( ofxresponse ); - - } - - } -} - - diff --git a/src/experimental/ofx/parser/parseDtd.C b/src/experimental/ofx/parser/parseDtd.C deleted file mode 100644 index 8e0b8fb19e..0000000000 --- a/src/experimental/ofx/parser/parseDtd.C +++ /dev/null @@ -1,301 +0,0 @@ -// $Id$ -// Copyright (C) 1997 ISOGEN International Corp. and TechnoTeacher, Inc. -// All Rights Reserved. -// -// -// This file and its associated materials are copyrighted material of -// ISOGEN International Corp. (ISOGEN) and TechnoTeacher, -// Inc. (TechnoTeacher). License to copy and use this file and its -// associated materials is granted to everyone, free of charge, with -// the following restrictions: (1) The ISOGEN and TechnoTeacher -// copyright statement must be maintained in any copies. (2) New -// materials derived from these materials must indicate their source, -// including references to the ISOGEN and TechnoTeacher web sites -// (www.isogen.com and www.techno.com). (3) These materials may not be -// sold in any form without the express written permission of ISOGEN -// and TechnoTeacher. [However, feel free to sell things you create -// from these materials as long as the things you create are truly -// different in function--we want to encourage people to learn from -// these materials and benefit from having learned--we just don't want -// others to sell what we're giving away.] -// - -#include "config.h" -#include "DtdParser.h" -#include "OutputCharStream.h" - -#define OUTPUT_MESSAGES - -#ifdef OUTPUT_MESSAGES -#include "sptchar.h" -#include "MessageReporter.h" -#include "MessageTable.h" -#endif - -#ifdef SP_NAMESPACE -namespace SP_NAMESPACE { -#endif - - -#ifdef SP_MANUAL_INST - -#define SP_DEFINE_TEMPLATES -#include "Owner.h" -#undef SP_DEFINE_TEMPLATES - -#include "Message.h" - -#ifdef SP_ANSI_CLASS_INST -template class Owner< Messenger>; -#else -typedef Owner< Messenger> Dummy_0; -#endif - -#endif /* SP_MANUAL_INST */ - - -static FileOutputByteStream standardOutput(1, 0); -static FileOutputByteStream standardError(2, 0); - -#ifdef OUTPUT_MESSAGES - -class MyMessageReporter -: public MessageReporter -{ - public: - MyMessageReporter( const InputCodingSystem *, OutputCharStream *); - private: - Boolean getMessageText( const MessageFragment &, StringC &); - const InputCodingSystem * codingSystem_; -}; - -MyMessageReporter:: -MyMessageReporter( const InputCodingSystem * codesys, - OutputCharStream * errorStream) -: MessageReporter( errorStream), - codingSystem_( codesys) -{ -} - -Boolean -MyMessageReporter:: -getMessageText( const MessageFragment & frag, StringC & text) -{ - String str; - if (!MessageTable::instance()->getText(frag, str)) - return 0; -#ifdef SP_WIDE_SYSTEM - text.assign((const Char *)str.data(), str.size()); -#else - str += 0; - text = codingSystem_->convertIn(str.data()); -#endif - return 1; -} - -#endif /* OUTPUT_MESSAGES */ - -void -outputModelGroup( OutputCharStream & os, const ModelGroup * modelGroup, unsigned level) -{ - os << "( "; - level++; - const char * connector = 0x0; - switch ( modelGroup->connector()) { - case ModelGroup::andConnector: - connector = " &"; - break; - case ModelGroup::orConnector: - connector = " |"; - break; - case ModelGroup::seqConnector: - connector = ","; - break; - } - unsigned i = 0; - while ( i < modelGroup->nMembers()) { - const ContentToken & token = modelGroup->member( i); - const ModelGroup * subModel = token.asModelGroup(); - Boolean tokenIsPcdata = false; - if ( subModel) - outputModelGroup( os, subModel, level); - else { - const LeafContentToken * leaf = token.asLeafContentToken(); - const ElementType * elementType = leaf->elementType(); - if ( elementType) - os << elementType->name(); - else { - tokenIsPcdata = true; - os << "#PCDATA"; - } - } - if ( !tokenIsPcdata) { - switch ( token.occurrenceIndicator()) { - case ContentToken::none: - break; - case ContentToken::opt: - os << "?"; - break; - case ContentToken::plus: - os << "+"; - break; - case ContentToken::rep: - os << "*"; - break; - } - } - if ( ++i >= modelGroup->nMembers()) - break; - os << connector << "\n"; - unsigned l = level; - while ( l--) - os << " "; - continue; - } - os << " )"; -} - -extern "C" -int -main( int argc, char ** argv) -{ - if ( argc < 2) - return 1; - - DtdParser parser; - -#ifdef OUTPUT_MESSAGES - Owner< Messenger> mgr; - if ( argv[ 1][ 0] != '-' || argv[ 1][ 1] != 's' || argv[ 1][ 2] != '\0') { - mgr = new MyMessageReporter( parser.codingSystem(), - new EncodeOutputCharStream( &standardError, - parser.codingSystem())); - parser.setMessenger( mgr.pointer()); - } -#endif - - StringC sysid; - parser.makeSystemId( argc - 1, argv + 1, sysid); - ConstPtr< Dtd> dtd = parser.parseDtd( sysid); - - if ( dtd.isNull()) - return 1; - - EncodeOutputCharStream os( &standardOutput, parser.codingSystem()); - Dtd::ConstElementTypeIter e( dtd->elementTypeIter()); - const ElementType * type = e.next(); - while ( type) { - os << type->name() << " =\n "; - switch ( type->definition()->declaredContent()) { - case ElementDefinition::modelGroup: - outputModelGroup( os, type->definition()->compiledModelGroup()->modelGroup(), 1); - break; - case ElementDefinition::any: { - Dtd::ConstElementTypeIter i( dtd->elementTypeIter()); - os << "( #PCDATA"; - const ElementType * type; - while ( ( type = i.next())) - os << " |\n " << type->name(); - os << " )*"; - break; - } - case ElementDefinition::cdata: - os << "CDATA"; - break; - case ElementDefinition::rcdata: - os << "RCDATA"; - break; - case ElementDefinition::empty: - os << "EMPTY"; - break; - } - os << "\n"; - const AttributeDefinitionList * attlist = type->attributeDefTemp(); - if ( attlist) { - os << "[\n"; - for ( size_t a = 0; a < attlist->size(); a++) { - const AttributeDefinition * def = attlist->def( a); - os << " " << def->name() << " : "; - size_t indent = def->name().size() + 5; - AttributeDefinitionDesc desc; - def->getDesc( desc); - switch ( desc.declaredValue) { - case AttributeDefinitionDesc::cdata: - os << "CDATA"; - break; - case AttributeDefinitionDesc::name: - os << "NAME"; - break; - case AttributeDefinitionDesc::number: - os << "NUMBER"; - break; - case AttributeDefinitionDesc::nmtoken: - os << "NMTOKEN"; - break; - case AttributeDefinitionDesc::nutoken: - os << "NUTOKEN"; - break; - case AttributeDefinitionDesc::entity: - os << "ENTITY"; - break; - case AttributeDefinitionDesc::idref: - os << "IDREF"; - break; - case AttributeDefinitionDesc::names: - os << "NAMES"; - break; - case AttributeDefinitionDesc::numbers: - os << "NUMBERS"; - break; - case AttributeDefinitionDesc::nmtokens: - os << "NMTOKENS"; - break; - case AttributeDefinitionDesc::nutokens: - os << "NUTOKENS"; - break; - case AttributeDefinitionDesc::entities: - os << "ENTITIES"; - break; - case AttributeDefinitionDesc::idrefs: - os << "IDREFS"; - break; - case AttributeDefinitionDesc::id: - os << "ID"; - break; - case AttributeDefinitionDesc::notation: - os << "NOTATION"; - indent += 8; - case AttributeDefinitionDesc::nameTokenGroup: { - os << "( "; - indent += 2; - size_t i; - size_t v = 0; - while ( v < desc.allowedValues.size()) { - os << desc.allowedValues[ v]; - if ( ++v >= desc.allowedValues.size()) - break; - os << " |\n"; - i = indent; - while ( i--) - os << " "; - continue; - } - os << " )"; - break; - } - } - os << "\n"; - } - os << "]\n"; - } - if ( !( type = e.next())) - break; - os << "\n"; - continue; - } - return 0; -} - -#ifdef SP_NAMESPACE -} -#endif diff --git a/src/experimental/ofx/parser/parseOfx.C b/src/experimental/ofx/parser/parseOfx.C deleted file mode 100644 index 1647f2cded..0000000000 --- a/src/experimental/ofx/parser/parseOfx.C +++ /dev/null @@ -1,245 +0,0 @@ -// -// FILE: -// parseOfx.C -// -// FUNCTION: -// Parses OFX dtd's -// -// HISTORY: -// Written by Linas Vepstas March 1998 - -#include -#include -#include -#include - -#include "config.h" -#include "DtdParser.h" -#include "OutputCharStream.h" - -#include "pfxBaseTypes.h" -#include "pfxCompTypes.h" -#include "pfxLangOut.h" -#include "pfxUtils.h" - - -// output messages is used to set up the SP parser -// to dump it's error messages to stderr -#define OUTPUT_MESSAGES - -#ifdef OUTPUT_MESSAGES -#include "sptchar.h" -#include "MessageReporter.h" -#include "MessageTable.h" -#endif /* OUTPUT_MESSAGES */ - -#ifdef SP_NAMESPACE -namespace SP_NAMESPACE { -#endif - -#ifdef OUTPUT_MESSAGES -#ifdef SP_MANUAL_INST - -#define SP_DEFINE_TEMPLATES -#include "Owner.h" -#undef SP_DEFINE_TEMPLATES - -#include "Message.h" - -#ifdef SP_ANSI_CLASS_INST -template class Owner< Messenger>; -#else -typedef Owner< Messenger> Dummy_0; -#endif - -#endif /* SP_MANUAL_INST */ -#endif /* OUTPUT_MESSAGES */ - - -static FileOutputByteStream standardOutput(1, 0); -static FileOutputByteStream standardError(2, 0); - -#ifdef OUTPUT_MESSAGES - -class MyMessageReporter -: public MessageReporter -{ - public: - MyMessageReporter( const InputCodingSystem *, OutputCharStream *); - private: - Boolean getMessageText( const MessageFragment &, StringC &); - const InputCodingSystem * codingSystem_; -}; - -MyMessageReporter:: -MyMessageReporter( const InputCodingSystem * codesys, - OutputCharStream * errorStream) -: MessageReporter( errorStream), - codingSystem_( codesys) -{ -} - -Boolean -MyMessageReporter:: -getMessageText( const MessageFragment & frag, StringC & text) -{ - String str; - if (!MessageTable::instance()->getText(frag, str)) - return 0; -#ifdef SP_WIDE_SYSTEM - text.assign((const Char *)str.data(), str.size()); -#else - str += 0; - text = codingSystem_->convertIn(str.data()); -#endif - return 1; -} - -#endif /* OUTPUT_MESSAGES */ - -// =========================================================== - -extern "C" - -void Usage (char *progname) -{ - printf ("Usage: %s \n", progname); - exit (1); -} - -int -main( int argc, char ** argv) -{ - if ( argc < 2) Usage (argv[0]); - - DtdParser parser; - - pfxCompoundType compoundTypeHandler; - -#ifdef OUTPUT_MESSAGES - Owner< Messenger> mgr; - if ( argv[ 1][ 0] != '-' || argv[ 1][ 1] != 's' || argv[ 1][ 2] != '\0') { - mgr = new MyMessageReporter( parser.codingSystem(), - new EncodeOutputCharStream( &standardError, - parser.codingSystem())); - parser.setMessenger( mgr.pointer()); - } -#endif - - StringC sysid; - parser.makeSystemId( argc - 1, argv + 1, sysid); - ConstPtr< Dtd> dtd = parser.parseDtd( sysid); - - if ( dtd.isNull()) { - printf ("Error: specified dtd %s was null \n", argv[1]); - return 1; - } - - // ---------------------------------------------------- - - compoundTypeHandler.prtout = new pfxOutDecl; - - // ---------------------------------------------------- - // print everything - time_t now = time (0); - char * cnow = ctime (&now); - - printf ("//\n"); - printf ("// This file automatically generated by %s \n", argv[0]); - printf ("// Do not edit -- your changes will be lost! \n"); - printf ("// Generated on %s \n", cnow); - printf ("//\n"); - printf ("//\n"); - compoundTypeHandler.PrintBaseTypes (0); - - - printf ("//----------------------------------------------\n"); - printf ("//\n"); - printf ("// Forward declarations of classes\n"); - printf ("//\n"); - printf ("//\n"); - const ElementType * type; - Dtd::ConstElementTypeIter e( dtd->elementTypeIter()); - type = e.next(); - while ( type) { - - // see if is a base type - char * varname = compoundTypeHandler.AddBaseVar (type); - - if (!varname) { - compoundTypeHandler.AddCompoundType (type); - - switch ( type->definition()->declaredContent()) { - case ElementDefinition::modelGroup: - break; - case ElementDefinition::any: - break; - default: { - char * vname = pfxCharify (type->name()); - printf ("unexpected duuuuuuuuuuuuuuuuuuude: %s \n", vname); - delete vname; - } - } - } - - const AttributeDefinitionList * attlist = type->attributeDefTemp(); - if ( attlist) { - printf (" attribute lists duuuuuuuuuuuuuuuuuuuuuuuuuude \n"); - } - - if ( !( type = e.next())) - break; - continue; - } - - // ---------------------------------------------------- - // print classes - printf ("//----------------------------------------------\n"); - printf ("//\n"); - printf ("// Class declarations\n"); - printf ("//\n"); - printf ("//\n"); - - Dtd::ConstElementTypeIter ee( dtd->elementTypeIter()); - type = ee.next(); - while ( type) { - - // see if is a base type - char * varname = compoundTypeHandler.AddBaseVar (type); - - if (!varname) { - compoundTypeHandler.PrintClass (type); - } - - type = ee.next(); - } - - // ---------------------------------------------------- - // print constructors - printf ("//----------------------------------------------\n"); - printf ("//\n"); - printf ("// Constructors\n"); - printf ("//\n"); - printf ("//\n"); - - compoundTypeHandler.prtout = new pfxOutConstructor; - - Dtd::ConstElementTypeIter eee( dtd->elementTypeIter()); - type = eee.next(); - while ( type) { - - // see if is a base type - char * varname = compoundTypeHandler.AddBaseVar (type); - - if (!varname) { - compoundTypeHandler.PrintClass (type); - } - - type = eee.next(); - } - return 0; -} - -#ifdef SP_NAMESPACE -} -#endif diff --git a/src/experimental/ofx/parser/pfxBaseTypes.C b/src/experimental/ofx/parser/pfxBaseTypes.C deleted file mode 100644 index 756a7f39af..0000000000 --- a/src/experimental/ofx/parser/pfxBaseTypes.C +++ /dev/null @@ -1,238 +0,0 @@ -// -// FILE: -// basTypes.C -// -// FUNCTION: -// Handles OFX base types -// -// HISTORY: -// Written by Linas Vepstas March 1998 - -#include -#include -#include -#include - -#include "config.h" -#include "DtdParser.h" - -#include "pfxUtils.h" -#include "pfxBaseTypes.h" - -// =========================================================== -// class pfxBaseType stores & handles base types - - -pfxBaseType :: pfxBaseType (void) -{ - prtout = 0x0; - nvars = 0; - varname[0] = 0x0; - vartype[0] = 0x0; -} - -char * -pfxBaseType :: AddBaseVar (const ElementType *type) -{ - - // its not a base type unless we have a model group. - if (ElementDefinition::modelGroup != - type->definition()->declaredContent()) return 0x0; - - const ModelGroup * mg; - mg = type->definition()->compiledModelGroup()->modelGroup(); - - // to be a base type, it must have exactly one member - if (1 != mg->nMembers()) return 0x0; - - const ContentToken & token = mg->member (0); - - // anything with a sub-model cannot be a base type - const ModelGroup * subModel = token.asModelGroup(); - if (subModel) return 0x0; - - const LeafContentToken * leaf = token.asLeafContentToken(); - const ElementType * elementType = leaf->elementType(); - - if (!elementType) { - char * name = pfxCharify (type->name()); - - printf ("Unkonwon, unexpected PCDATA: %s \n", name); - return 0x0; - } - - // now look to see if we have already processed this one - char *vname = pfxCharify (type->name()); - - // if its already in out database, just return - for (int i = 0; iname()); - if (strcmp ("XACC-AMOUNT", vtype) && - strcmp ("XACC-BOOL", vtype) && - strcmp ("XACC-DTTM", vtype) && - strcmp ("XACC-ID", vtype) && - strcmp ("XACC-INT", vtype) && - strcmp ("XACC-PRICE", vtype) && - strcmp ("XACC-RATE", vtype) && - strcmp ("XACC-SRVRID", vtype) && - strcmp ("XACC-STR", vtype) && - strcmp ("XACC-URL", vtype) && - strcmp ("XACC-UUID", vtype)) { - - delete vtype; - delete vname; - return 0x0; - } - - // we haven't encounterd this before. Add it to our list. - varname[nvars] = vname; - vartype[nvars] = vtype; - nvars ++; - - return vname; -} - -void -pfxBaseType :: PrintBaseTypes (int dent) -{ - - DENT (dent); printf ("// Basic Types \n"); - DENT (dent); printf ("typedef double bfxAmount; \n"); - DENT (dent); printf ("typedef int bfxBool; \n"); - DENT (dent); printf ("typedef long int bfxDttm; \n"); - DENT (dent); printf ("typedef char * bfxId; \n"); - DENT (dent); printf ("typedef int bfxInt; \n"); - DENT (dent); printf ("typedef double bfxPrice; \n"); - DENT (dent); printf ("typedef double bfxRate; \n"); - DENT (dent); printf ("typedef char * bfxStr; \n"); - DENT (dent); printf ("typedef char * bfxSrvrid; \n"); - DENT (dent); printf ("typedef char * bfxUrl; \n"); - DENT (dent); printf ("typedef char bfxUuid [36]; \n"); - printf ("\n\n"); -} - -void -pfxBaseType :: PrintBaseDecl (const ContentToken & token) -{ - // print an individual member - const LeafContentToken * leaf = token.asLeafContentToken(); - const ElementType * elementType = leaf->elementType(); - if (!elementType) return; - - char * varname = pfxCharify (elementType->name()); - - if (!varname) return; - - char * vtype = GetBaseType (varname); - if (!vtype) return; - - char * decl; - - if (!strcmp ("XACC-AMOUNT", vtype)) { - decl = "bfxAmount"; - } else - - if (!strcmp ("XACC-BOOL", vtype)) { - decl = "bfxBool"; - } else - - if (!strcmp ("XACC-DTTM", vtype)) { - decl = "bfxDttm"; - } else - - if (!strcmp ("XACC-ID", vtype)) { - decl = "bfxId"; - } else - - if (!strcmp ("XACC-INT", vtype)) { - decl = "bfxInt"; - } else - - if (!strcmp ("XACC-PRICE", vtype)) { - decl = "bfxPrice"; - } else - - if (!strcmp ("XACC-RATE", vtype)) { - decl = "bfxRate"; - } else - - if (!strcmp ("XACC-STR", vtype)) { - decl = "bfxStr"; - } else - - if (!strcmp ("XACC-SRVRID", vtype)) { - decl = "bfxSrvrid"; - } else - - if (!strcmp ("XACC-URL", vtype)) { - decl = "bfxUrl"; - } else - - if (!strcmp ("XACC-UUID", vtype)) { - decl = "bfxUuid"; - } else - - printf ("---> unknown type >%s<\n", vtype); - - - // handle repeated lists - pfxLangOutput::occ currance; - switch ( token.occurrenceIndicator()) { - - // element *must* occur - case ContentToken::none: - currance = pfxLangOutput::MUST; - break; - - // element may or may not occur - case ContentToken::opt: - currance = pfxLangOutput::OPT; - break; - - // element must occur at least once, maybe more times. - case ContentToken::plus: - currance = pfxLangOutput::PLUS; - break; - - // element may occur zero or more times - case ContentToken::rep: - currance = pfxLangOutput::REP; - break; - } - - // printed var names will be lower case - char * vname = pfxToLower (varname); - - char * saveprefix = prtout->prefix; - - prtout -> prefix = ""; - prtout -> PrintMember (currance, decl, vname); - prtout -> prefix = saveprefix; - - delete vname; - delete varname; -} - - -char * -pfxBaseType :: GetBaseType (char * vname) -{ - - for (int i = 0; i -#include -#include -#include - -#include "config.h" -#include "DtdParser.h" - -#include "pfxBaseTypes.h" -#include "pfxCompTypes.h" -#include "pfxUtils.h" - - -// ===================================================== - -pfxCompoundType :: pfxCompoundType (void) -{ - nclasses = 0; - classname[0] = 0x0; -} - -char * -pfxCompoundType :: IsClass (char * vname) -{ - for (int i = 0; idefinition()->declaredContent()) return 0x0; - - // make sure its not a base type - char * basename = AddBaseVar (type); - if (basename) return 0x0; - - const ModelGroup * mg; - mg = type->definition()->compiledModelGroup()->modelGroup(); - - char * cname = pfxCharify (type->name()); - - classname [nclasses] = cname; - nclasses ++; - - char * pname = pfxCapLower (cname); - printf ("class cfx%s;\n", pname); - delete pname; - - return cname; -} - -void -pfxCompoundType :: PrintMember (const ContentToken & token) -{ - if (!prtout) return; - - // print an individual member - const LeafContentToken * leaf = token.asLeafContentToken(); - const ElementType * elementType = leaf->elementType(); - if (!elementType) return; - - char * varname = pfxCharify (elementType->name()); - - // see if its a base type -- e.g. int, double, etc. - char * basetype = GetBaseType (varname); - if (basetype) { - PrintBaseDecl (token); - } else { - - // Not base type. Must be a class - char * classtype = IsClass (varname); - if (classtype) { - char * decl = pfxCapLower (varname); - char * var = pfxToLower (varname); - - // look to see if the element occurs - // once, more than once, etc. - switch ( token.occurrenceIndicator()) { - - // element *must* occur - case ContentToken::none: - prtout -> PrintMember (pfxLangOutput::MUST, decl, var); - break; - - // element may or may not occur - case ContentToken::opt: - prtout -> PrintMember (pfxLangOutput::OPT, decl, var); - break; - - // element must occur at least once, maybe more times. - case ContentToken::plus: - prtout -> PrintMember (pfxLangOutput::PLUS, decl, var); - break; - - // element may occur zero or more times - case ContentToken::rep: - prtout -> PrintMember (pfxLangOutput::REP, decl, var); - break; - } - - delete decl; - delete var; - } else { - printf (" this variable has no type -----> %s \n", varname); - } - } - delete varname; -} - -int -pfxCompoundType :: IsUnion (const ModelGroup * mg) -{ - if (ModelGroup::orConnector == mg->connector()) return 1; - return 0; -} - -char * -pfxCompoundType :: GetUnnamedClassName (const ContentToken & untoken) -{ - const ModelGroup * mg = untoken.asModelGroup(); - - if (!mg) { - printf ("Error: GetUnnamedClassName: unexpected non model \n"); - return 0x0; - } - - // The connector *must* be a sequence or a logical-AND type in order - // for this to be a struct. - if ((ModelGroup::andConnector != mg->connector()) && - (ModelGroup::seqConnector != mg->connector())) return 0x0; - - - // create a long compound name - // first, count the length of that name - int i = 0; - int namelen = 0; - while (i < mg->nMembers()) { - const ContentToken & token = mg->member( i); - const ModelGroup * subModel = token.asModelGroup(); - - if (!subModel) { - const LeafContentToken * leaf = token.asLeafContentToken(); - const ElementType * elementType = leaf->elementType(); - namelen += (elementType->name()).size() + 1; - } - i++; - } - - // now, build the compund name - i = 0; - char * name = new char [namelen+1]; - name[0] = 0x0; - while (i < mg->nMembers()) { - const ContentToken & token = mg->member( i); - const ModelGroup * subModel = token.asModelGroup(); - - if (!subModel) { - const LeafContentToken * leaf = token.asLeafContentToken(); - const ElementType * elementType = leaf->elementType(); - - char * varname = pfxCharify (elementType->name()); - char * capname = pfxCapLower (varname); - strcat (name, "_"); - strcat (name, capname); - } - i++; - } - - return name; -} - -void -pfxCompoundType :: PrintMacroDecl (const ContentToken & untoken) -{ - const ModelGroup * mg = untoken.asModelGroup(); - - if (!mg) { - printf ("Error: PrintMacroDecl: unexpected non model \n"); - return; - } - - // If connector is a sequence or a logical-AND type, - // then treat as a class. - if ((ModelGroup::andConnector == mg->connector()) || - (ModelGroup::seqConnector == mg->connector())) { - - PrintUnnamedClassDecl (untoken); - PrintUnnamedInstance (untoken); - } else - - // If the connector is a logical-OR connector, - // then treat as a union - if (ModelGroup::orConnector == mg->connector()) { - PrintUnionDecl (untoken); - } -} - -void -pfxCompoundType :: PrintUnnamedClassDecl (const ContentToken & untoken) -{ - const ModelGroup * mg = untoken.asModelGroup(); - - if (!mg) { - printf ("Error: PrintUnnamedClassDecl: unexpected non model \n"); - return; - } - - // The connector *must* be a sequence or a logical-AND type in order - // for this to be a struct. - if ((ModelGroup::andConnector != mg->connector()) && - (ModelGroup::seqConnector != mg->connector())) return; - - char * name = GetUnnamedClassName (untoken); - - // If the returned name of the thing is null, then - // I think we can safely assume that this thing is - // the result of a macro expansion in the DTD. - // This means that there is no true heirarchy, even - // though there is an appearent heirarchy. So, - // don't let things nest. Just flatten it. - // We flatten by not printing the prolog or epilogue - // (since there really isn't a prolog or epilog). - - // now, print the class definition - if (name[0]) prtout->PrintClassProlog (name); - int i = 0; - while (i < mg->nMembers()) { - const ContentToken & token = mg->member( i); - const ModelGroup * subModel = token.asModelGroup(); - if (subModel) { - printf (" // -------> begin flattening \n"); - PrintMacroDecl (token); - printf (" // -------> end flattening \n"); - } else { - // put the member elements into the class declaration - PrintMember(token); - } - i++; - } - if (name[0]) prtout->PrintClassEpilog (name); -} - -void -pfxCompoundType :: PrintUnnamedInstance (const ContentToken & untoken) -{ - const ModelGroup * mg = untoken.asModelGroup(); - - if (!mg) { - printf ("Error: PrintUnnamedInstance: unexpected non model \n"); - return; - } - - // The connector *must* be a sequence or a logical-AND type in order - // for this to be a struct. - if ((ModelGroup::andConnector != mg->connector()) && - (ModelGroup::seqConnector != mg->connector())) return; - - - char * name = GetUnnamedClassName (untoken); - - // now handle repeated lists - pfxLangOutput::occ currance; - switch ( untoken.occurrenceIndicator()) { - - // element *must* occur - case ContentToken::none: - currance = pfxLangOutput::MUST; - break; - - // element may or may not occur - case ContentToken::opt: - currance = pfxLangOutput::OPT; - break; - - // element must occur at least once, maybe more times. - case ContentToken::plus: - currance = pfxLangOutput::PLUS; - break; - - // element may occur zero or more times - case ContentToken::rep: - currance = pfxLangOutput::REP; - break; - } - - prtout ->PrintMember (currance, name, name); -} - -void -pfxCompoundType :: PrintUnionDecl (const ContentToken & untoken) -{ - - const ModelGroup * mg = untoken.asModelGroup(); - - if (!mg) { - printf ("Error: PrintUnionDecl: unexpected non model \n"); - return; - } - - // The connector *must* be logical-OR type in order - // for this to be a union. - if (ModelGroup::orConnector != mg->connector()) return; - - // now handle repeated lists - pfxLangOutput::occ currance; - switch ( untoken.occurrenceIndicator()) { - - // element *must* occur - case ContentToken::none: - currance = pfxLangOutput::MUST; - break; - - // element may or may not occur - case ContentToken::opt: - currance = pfxLangOutput::OPT; - break; - - // element must occur at least once, maybe more times. - case ContentToken::plus: - currance = pfxLangOutput::PLUS; - break; - - // element may occur zero or more times - case ContentToken::rep: - currance = pfxLangOutput::REP; - break; - } - - // if there are any groups that occur, - // lets create a name for them, and print - // thier declarations - int i = 0; - while (i < mg->nMembers()) { - const ContentToken & token = mg->member( i); - const ModelGroup * subModel = token.asModelGroup(); - if (subModel) { - // ack -- its an un-named, compound type - PrintUnnamedClassDecl (token); - } - i++; - } - - // OK, now print the union - prtout ->PrintUnionProlog (currance, "abcd"); - - i = 0; - while (i < mg->nMembers()) { - const ContentToken & token = mg->member( i); - const ModelGroup * subModel = token.asModelGroup(); - if (subModel) { - // ack -- its an un-named, compound type - PrintUnnamedInstance (token); - } else { - // put the member elements into the class declaration - PrintMember (token); - } - i++; - } - - prtout ->PrintUnionEpilog (currance, "abcd"); -} - -void -pfxCompoundType :: PrintGroupMembers (const ModelGroup * mg) -{ - - int i = 0; - while (i < mg->nMembers()) { - const ContentToken & token = mg->member( i); - const ModelGroup * subModel = token.asModelGroup(); - - if ( subModel) { - if (ModelGroup::orConnector == subModel->connector()) { - PrintUnionDecl (token); - - } else { - if (ContentToken::none == token.occurrenceIndicator()) { - PrintGroupMembers (subModel); - } else { - // ack -- its an un-named, compound type - PrintUnnamedClassDecl (token); - } - } - } else { - - // put the member elements into the class declaration - PrintMember (token); - } - - i++; - } -} - - -void -pfxCompoundType :: PrintClass (const ElementType *type) -{ - - // its not a compound type unless we have a model group. - if (ElementDefinition::modelGroup != - type->definition()->declaredContent()) return; - - const ModelGroup * mg; - mg = type->definition()->compiledModelGroup()->modelGroup(); - - // open the class declaration - char * cname = pfxCharify (type->name()); - char * pname = pfxCapLower (cname); - - prtout->PrintClassProlog (pname); - - PrintGroupMembers (mg); - - prtout->PrintClassEpilog (pname); -} - -// =========================================================== - -#ifdef SP_NAMESPACE -} -#endif diff --git a/src/experimental/ofx/parser/pfxCompTypes.h b/src/experimental/ofx/parser/pfxCompTypes.h deleted file mode 100644 index 23dd696923..0000000000 --- a/src/experimental/ofx/parser/pfxCompTypes.h +++ /dev/null @@ -1,57 +0,0 @@ -// -// FILE: -// pfxCompTypes.h -// -// FUNCTION: -// Parses OFX dtd's -// -// HISTORY: -// Written by Linas Vepstas March 1998 - -#ifndef PFX_COMP_TYPES_H -#define PFX_COMP_TYPES_H - -#include "config.h" -#include "DtdParser.h" - -#include "pfxBaseTypes.h" -#include "pfxUtils.h" - - -// =========================================================== -// handles compund types -// IsUnion returns true if its pure-or - -class pfxCompoundType : - public pfxBaseType -{ - public: - pfxCompoundType (void); - char * AddCompoundType (const ElementType *); - - void PrintClass (const ElementType *); - - void PrintMember (const ContentToken &); - - int IsUnion (const ModelGroup *); - void PrintUnionDecl (const ContentToken &); - void PrintMacroDecl (const ContentToken &); - - char * GetUnnamedClassName (const ContentToken &); - void PrintUnnamedClassDecl (const ContentToken &); - void PrintUnnamedInstance (const ContentToken &); - - void PrintGroupMembers (const ModelGroup *); - - char * IsClass (char *); - - private: - char * classname[MAXVARS]; - int nclasses; -}; - -#ifdef SP_NAMESPACE -} -#endif - -#endif /* PFX_COMP_TYPES_H */ diff --git a/src/experimental/ofx/parser/pfxLangOut.C b/src/experimental/ofx/parser/pfxLangOut.C deleted file mode 100644 index d6670bd72c..0000000000 --- a/src/experimental/ofx/parser/pfxLangOut.C +++ /dev/null @@ -1,319 +0,0 @@ -// -// FILE: -// pfxLangOut.C -// -// FUNCTION: -// Prints the C++ equivalents of the OFX dtd's -// The actual implementation of this stuff is very -// much of an ugly hack. Sorry. -// -// HISTORY: -// Written by Linas Vepstas April 1998 - -#include -#include -#include - -#include "config.h" - -#include "pfxLangOut.h" -#include "pfxUtils.h" - -pfxLangOutput :: pfxLangOutput (void) -{ - dent = 0; - prefix = 0x0; -} - -// ======================================================= -pfxOutDecl :: pfxOutDecl (void) -{ - nelts = 0; - doing_union = 0; - doing_class = 0; - nth_union = 0; - prefix = strdup("cfx"); -} - -void -pfxOutDecl :: PrintClassProlog (char * decl) -{ - if (0 == doing_class) nth_union = 0; - doing_class = 1; - - DENT (dent); printf ("\n\n"); - DENT (dent); printf ("class cfx%s \n", decl); - DENT (dent); printf ("{ \n"); - DENT (dent); printf (" public:\n"); - DENT (dent); printf (" cfx%s (void); // constructor \n", decl); - DENT (dent); printf (" virtual ~cfx%s (); // destructor \n", decl); - DENT (dent); printf ("\n"); - - dent +=2; -} - -void -pfxOutDecl :: PrintClassEpilog (char * decl) -{ - doing_class = 0; - dent -=2; - DENT (dent); printf ("};\n"); -} - -void -pfxOutDecl :: PrintUnionProlog (occ rance, char * decl) -{ - doing_union = 1; - nth_union ++; -} - -void -pfxOutDecl :: PrintUnionEpilog (occ rance, char * decl) -{ - // not an onion any more, so that PrintMember will revert to normal - doing_union = 0; - - // print enumerated type for the union members - DENT (dent); printf ("enum Enum%d{\n", nth_union); - for (int i=0; i scope, scope); - nest->dent = dent; - nest->PrintClassProlog (decl); - } else { - strcpy (classname, prefix); - strcat (classname, decl); - strcat (scope, classname); - strcat (scope, " :: "); - } - doing_class = 1; - -} - -void -pfxOutConstructor :: PrintClassEpilog (char * decl) -{ - // handle subclass nesting - if (nest) { - nest -> PrintClassEpilog (decl); - delete nest; - nest = 0x0; - } - - doing_class = 0; - DENT (dent); printf ("\n\n"); - DENT (dent); printf ("%s %s (void)\n", scope, classname); - DENT (dent); printf ("{\n"); - dent ++; - for (int i=0; i PrintMember (rance, decl, var); - return; - } - - if (doing_class) { - if (doing_union) { - if (done_union) return; - - char buff[1000]; - sprintf (buff, - "utype%d = T_%s;\n", nth_union, pfxToUpper (decl)); - override.insert (override.begin()+ nelts, strdup (buff)); - nelts ++; - - done_union = 1; - return; - } - declaration.insert (declaration.begin()+ nelts, strdup (decl)); - varname.insert (varname.begin()+ nelts, strdup (var)); - refix.insert (refix.begin()+ nelts, strdup (prefix)); - override.insert (override.begin()+ nelts, strdup ("")); - currance.insert (currance.begin()+ nelts, rance); - nelts ++; - return; - } - - switch (rance) { - case MUST: - printf ("\n"); - DENT (dent); - printf ("// %s *must* be present \n", decl); - - DENT (dent); - printf ("%s = new %s%s; \n", var, prefix, decl); - break; - - case OPT: - printf ("\n"); - DENT (dent); - printf ("// %s may be a null pointer \n", decl); - - DENT (dent); - printf ("%s = 0x0; \n", var); - break; - - case PLUS: - printf ("\n"); - DENT (dent); - printf ("// %s is a list of one or more items \n", decl); - - DENT (dent); - printf ("%s = 0x0; \n", var); - break; - - case REP: - printf ("\n"); - DENT (dent); - printf ("// %s is a list of zero or more items \n", decl); - - DENT (dent); - printf ("%s = 0x0; \n", var); - break; - } - -} - diff --git a/src/experimental/ofx/parser/pfxLangOut.h b/src/experimental/ofx/parser/pfxLangOut.h deleted file mode 100644 index 8019b77a8d..0000000000 --- a/src/experimental/ofx/parser/pfxLangOut.h +++ /dev/null @@ -1,107 +0,0 @@ -// -// FILE: -// pfxLangOut.h -// -// FUNCTION: -// print language specific output -// In this case, this generates C++ output -// -// HISTORY: -// Written by Linas Vepstas April 1998 - -#ifndef PFX_COMP_OUT_H -#define PFX_COMP_OUT_H - -#include "config.h" -#include - -// virtual base class for output -// This is the base class that is used by the parser to -// generate output. -class pfxLangOutput -{ - public: - enum occ { - MUST, OPT, PLUS, REP }; - pfxLangOutput (void); - virtual void PrintClassProlog (char *hilo) = 0; - virtual void PrintClassEpilog (char *hilo) = 0; - virtual void PrintUnionProlog (occ, char *hilo) = 0; - virtual void PrintUnionEpilog (occ, char *hilo) = 0; - - virtual void PrintMember (occ, char *hilo, char * lo) = 0; - - char * prefix; - - protected: - int dent; - -}; - -// This class prints the class and union declarations -class pfxOutDecl : - public pfxLangOutput -{ - public: - pfxOutDecl (void); - virtual void PrintClassProlog (char *hilo); - virtual void PrintClassEpilog (char *hilo); - virtual void PrintUnionProlog (occ, char *hilo); - virtual void PrintUnionEpilog (occ, char *hilo); - - virtual void PrintMember (occ, char *hilo, char * lo); - - private: - short doing_union; - short doing_class; - int nth_union; - - // When a union has been declared, these are used to store - // the members of the union. This is needed because - // declaring a union requires several repeats of the data, - // each in slightly different form. - vector declaration; - vector varname; - vector refix; - vector currance; - int nelts; - -}; - -// This class prints the constructors -class pfxOutConstructor : - public pfxLangOutput -{ - public: - pfxOutConstructor (void); - virtual void PrintClassProlog (char *hilo); - virtual void PrintClassEpilog (char *hilo); - virtual void PrintUnionProlog (occ, char *hilo); - virtual void PrintUnionEpilog (occ, char *hilo); - - virtual void PrintMember (occ, char *hilo, char * lo); - - private: - short doing_union; - short doing_class; - int nth_union; - short done_union; - - pfxOutConstructor *nest; - char scope[450]; - char classname[450]; - - // when a class within a class has been dclared, we - // can't just create a constructor within the constructor. - // Thus, we need to defer the PrintMember() calls until the - // call to epilog has shown up. - int nelts; - vector declaration; - vector varname; - vector refix; - vector override; - vector currance; - -}; - -#endif /* PFX_COMP_OUT_H */ diff --git a/src/experimental/ofx/parser/pfxUtils.C b/src/experimental/ofx/parser/pfxUtils.C deleted file mode 100644 index f9d81f03f1..0000000000 --- a/src/experimental/ofx/parser/pfxUtils.C +++ /dev/null @@ -1,92 +0,0 @@ -// -// FILE: -// utils.C -// -// FUNCTION: -// Handles OFX base types -// -// HISTORY: -// Written by Linas Vepstas March 1998 - -#include -#include -#include - -#include "StringOf.h" - -#include "config.h" -#include "pfxUtils.h" - -#ifdef SP_NAMESPACE -namespace SP_NAMESPACE { -#endif - -// =========================================================== -// convert the string type to an ordinary char * - -char * -pfxCharify (const String &s) -{ - int len = s.size (); - - char * str = new char [len+1]; - - for (int i=0; i - -#include "StringOf.h" - -#include "config.h" - -#ifdef SP_NAMESPACE -namespace SP_NAMESPACE { -#endif - -// =========================================================== -// convert the string type to an ordinary char * - -char * pfxCharify (const String &s); -char * pfxToLower (char * str); -char * pfxToUpper (char * str); -char * pfxCapLower (char * str); - -#define DENT(dent) { for (int bonk=0; bonk<(dent); bonk++) printf (" "); } - - -#ifdef SP_NAMESPACE -} -#endif - -#endif /* PFX_UTILS_H */ diff --git a/src/experimental/ofx/parser/simple.C b/src/experimental/ofx/parser/simple.C deleted file mode 100644 index 09bd396d61..0000000000 --- a/src/experimental/ofx/parser/simple.C +++ /dev/null @@ -1,60 +0,0 @@ -// -// simple.C -// -// a direct rip-off of James Clark's sample program -// for the generic SP parser. -// -// The next two lines are only to ensure bool gets defined -// appropriately. - -#include - -#include "config.h" -#include "Boolean.h" - -#include "ParserEventGeneratorKit.h" - - -class OutlineApplication : public SGMLApplication { -public: - OutlineApplication() : depth_(0) { } - - void PrtStr (const CharString &s) { - for (size_t i=0; irun(app); - delete egp; - return nErrors > 0; -}