From 469bbcf0701e1eb8a6670c23145b0da87357e178 Mon Sep 17 00:00:00 2001 From: Mike Buland Date: Sun, 25 Mar 2012 20:00:08 +0000 Subject: Code is all reorganized. We're about ready to release. I should write up a little explenation of the arrangement. --- src/minimacro.cpp | 187 ------------------------------------------------------ 1 file changed, 187 deletions(-) delete mode 100644 src/minimacro.cpp (limited to 'src/minimacro.cpp') diff --git a/src/minimacro.cpp b/src/minimacro.cpp deleted file mode 100644 index b6fd6a8..0000000 --- a/src/minimacro.cpp +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (C) 2007-2011 Xagasoft, All rights reserved. - * - * This file is part of the libbu++ library and is released under the - * terms of the license contained in the file LICENSE. - */ - -#include "bu/minimacro.h" - -Bu::MiniMacro::MiniMacro() -{ - hFuncs.insert("toupper", new FuncToUpper() ); - hFuncs.insert("tolower", new FuncToLower() ); -} - -Bu::MiniMacro::MiniMacro( const StrHash &sVarSrc ) -{ - for( StrHash::const_iterator i = sVarSrc.begin(); i != sVarSrc.end(); i++ ) - { - addVar( i.getKey(), i.getValue() ); - } -} - -Bu::MiniMacro::~MiniMacro() -{ -} - -Bu::String Bu::MiniMacro::parse( const Bu::String &sIn ) -{ - bContinue = true; - Bu::String sOut; - for( sCur = sIn.getStr(); *sCur && bContinue; sCur++ ) - { - if( *sCur == '{' ) - { - switch( sCur[1] ) - { - case '=': - sCur += 2; - sOut += parseRepl(); - break; - - case '?': - sCur += 2; - sOut += parseCond(); - break; - - case ':': - sCur += 2; - sOut += parseCmd(); - break; - - default: - sOut += *sCur; - continue; - } - } - else - { - sOut += *sCur; - } - } - - iLastPos = (ptrdiff_t)sCur - (ptrdiff_t)sIn.getStr(); - - return sOut; -} - -Bu::String Bu::MiniMacro::parseRepl() -{ - Bu::String sOut; - bool bIsFirst = true; - for( const char *sNext = sCur;;) - { - for(; *sNext != ':' && *sNext != '}' && *sNext != '\0'; sNext++ ) { } - if( *sNext == '\0' ) - break; - Bu::String sName( sCur, (ptrdiff_t)sNext-(ptrdiff_t)sCur ); - if( bIsFirst ) - { - sOut = hVars[sName]; - bIsFirst = false; - //printf("Variable: \"%s\"\n", sName.getStr() ); - } - else - { - sOut = callFunc( sOut, sName ); - //printf("Filter: \"%s\"\n", sName.getStr() ); - } - if( *sNext == '}' ) - { - sCur = sNext; - break; - } - else if( *sNext == ':' ) - { - } - sNext++; - sCur = sNext; - } - return sOut; -} - -Bu::String Bu::MiniMacro::parseCond() -{ - Bu::String sOut; - //printf("%20s\n", sCur ); - return sOut; -} - -Bu::String Bu::MiniMacro::parseCmd() -{ - Bu::String sOut; - const char *sNext = sCur; - for(; *sNext != ':' && *sNext != '}' && *sNext != '\0'; sNext++ ) { } - if( *sNext != '\0' ) - { - Bu::String sName( sCur, (ptrdiff_t)sNext-(ptrdiff_t)sCur ); - if( sName == "end" ) - { - sCur = sNext; - bContinue = false; - return sOut; - } - else - { - throw Bu::ExceptionBase("Unknown command '%s'.", - sName.getStr() - ); - } - } - else - { - //printf("Uh...?\n"); - } - - //printf("%20s\n", sCur ); - return sOut; -} - -Bu::String Bu::MiniMacro::callFunc( - const Bu::String &sIn, const Bu::String &sFunc ) -{ - int i = sFunc.findIdx('('); - if( i < 0 ) - throw Bu::ExceptionBase("That doesn't look like a function call"); - Bu::String sName( sFunc.getStr(), i ); - StrList lsParams; - for( const char *s = sFunc.getStr()+i+1; *s && *s != ')'; s++ ) - { - for(; *s == ' ' || *s == '\t' || *s == '\r' || *s == '\n'; s++ ) { } - const char *sNext; - for( sNext = s; *sNext && *sNext != ')' && *sNext != ','; sNext++ ) { } - Bu::String p( s, (ptrdiff_t)sNext-(ptrdiff_t)s ); - lsParams.append( p ); - sNext++; - s = sNext; - } - return hFuncs.get( sName )->call( sIn, lsParams ); -} - -void Bu::MiniMacro::addVar( - const Bu::String &sName, const Bu::String &sValue ) -{ - hVars.insert( sName, sValue ); -} - -bool Bu::MiniMacro::hasVar( const Bu::String &sName ) -{ - return hVars.has( sName ); -} - -const Bu::String &Bu::MiniMacro::getVar( const Bu::String &sName ) -{ - return hVars.get( sName ); -} - -const Bu::StrHash &Bu::MiniMacro::getVars() -{ - return hVars; -} - -int Bu::MiniMacro::getPosition() -{ - return iLastPos; -} - -- cgit v1.2.3