Back to index

lightning-sunbird  0.9+nobinonly
Classes | Functions | Variables
htmlgen.cpp File Reference
#include <iostream.h>
#include <fstream.h>
#include <strstrea.h>
#include <string>
#include <stdlib.h>
#include <errno.h>
#include <time.h>
#include <direct.h>

Go to the source code of this file.

Classes

class  CMacros
 gess12/20/98 More...

Functions

int findTag (const char *aTagName)
int findNearestTag (char *aTag)
 Call this to find a tag that closely resembles the given tag.
char * getNthTagAfter (int aRangeIndex, char *aStartTag)
void expandKeywords (char *aBuffer, CMacros &aMacroSet)
 gess12/20/98
void expandMacros (char *aBuffer, CMacros &aMacroSet)
 gess12/20/98
int processFile (char *aDir, CMacros &aMacroList, fstream &anOutputStream, fstream &anInputStream)
 gess12/20/98
int iterate (istrstream &aInputArgs)
 This is where the different combinations of arguments gets constructed and passed on for processing.
int main (int argc, char *argv[])
 gess12/20/98

Variables

static char * tagTable []
static char gCWD [1025]
static char gPrevFile [128]
static char gThisFile [128]
static char gNextFile [128]
static int gFileIndex = 0

Function Documentation

void expandKeywords ( char *  aBuffer,
CMacros aMacroSet 
)

gess12/20/98

Parameters:
@return

Definition at line 337 of file htmlgen.cpp.

                                                     {
  char  temp[1024];
  char  theWord[100];

  temp[0]=0;
  if(strchr(aBuffer,'@')){

    int pos=-1;
    while(aBuffer[++pos]==' ')
      strcat(temp," ");

    istrstream iStr(aBuffer);
    while(!iStr.eof()){
        theWord[0]=0;
        iStr>>theWord;
        char* thePos=strchr(theWord,'@');
        if(thePos){
          strncat(temp,theWord,thePos-theWord);
          if(!strnicmp(thePos,"@file",5)){
            strcat(temp,gThisFile);
            thePos+=5;
          }
          else if(!strnicmp(thePos,"@nextfile",9)){
            strcat(temp,gNextFile);
            thePos+=9;
          }
          else if(!strnicmp(thePos,"@prevfile",9)){
            strcat(temp,gPrevFile);
            thePos+=9;
          }
          strcat(temp,thePos);
        }
        else strcat(temp,theWord);
        strcat(temp," ");
    }
    strcpy(aBuffer,temp);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void expandMacros ( char *  aBuffer,
CMacros aMacroSet 
)

gess12/20/98

Parameters:
@return

Definition at line 382 of file htmlgen.cpp.

                                                   {
  char  temp[1024];
  int rPos=-1;
  int wPos=0;

  if(aBuffer){
    while(aBuffer[++rPos]){
      if('$'==aBuffer[rPos]){
        temp[wPos]=0;
        ++rPos; //skip the $...        
        int theIndex=aBuffer[rPos]-'0';
        char* theMacro=aMacroSet.getMacro(theIndex);
        if(theMacro){
          strcat(temp,theMacro);
          wPos=strlen(temp);
        }
      }
      else temp[wPos++]=aBuffer[rPos];
    }
    temp[wPos]=0;
    strcpy(aBuffer,temp);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

int findNearestTag ( char *  aTag)

Call this to find a tag that closely resembles the given tag.

Note that we match based on the first char. gess12/23/98

Parameters:
@return

Definition at line 83 of file htmlgen.cpp.

                              {
  int result=-1;
  if(aTag){
    char  theChar=toupper(aTag[0]);
    int theIndex=-1;
    while(tagTable[++theIndex]){
      if(toupper(tagTable[theIndex][0])==theChar) {
        return theIndex;
      }
    }
  }
  if(toupper(aTag[0])<'A')
    result=0;
  else result=107;
  return result;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int findTag ( const char *  aTagName)

Definition at line 59 of file htmlgen.cpp.

                                  {
  int low = 0;
  int high = 107;
  while (low <= high) {
    int middle = (low + high) >> 1;
    int result = stricmp(aTagName, tagTable[middle]);
    if (result == 0)
      return middle;
    if (result < 0)
      high = middle - 1; 
    else
      low = middle + 1; 
  }
  return -1;
}

Here is the caller graph for this function:

char* getNthTagAfter ( int  aRangeIndex,
char *  aStartTag 
)

Definition at line 100 of file htmlgen.cpp.

                                                     {
  int theIndex=findTag(aStartTag);
  if(-1==theIndex){
    theIndex=findNearestTag(aStartTag);
  }
  if(-1<theIndex){
    //now that you have the tag, 
    return tagTable[theIndex+aRangeIndex];
  }
  return 0; 
}

Here is the call graph for this function:

Here is the caller graph for this function:

int iterate ( istrstream &  aInputArgs)

This is where the different combinations of arguments gets constructed and passed on for processing.

Note that this is even called when the args have only 1 value.

Returns:
error code

Definition at line 464 of file htmlgen.cpp.

                                   {
  int result=0;

  CMacros theArgs;
  theArgs.consume(aInputArgs);

  char theFilename[1024];

  bool done=!theArgs.first();
  while((!done) && (0==result)){
    CMacros theTempArgs(theArgs);

    //theTempArgs.buildArgBuffer(theBuffer);
    //    istrstream theArgStream(theBuffer);

    sprintf(theFilename,"%s\\%s",gCWD,gThisFile);
    fstream theOutStream(theFilename,ios::trunc);    

    char* theInFile=theArgs.getFilename();
    fstream theInStream(theInFile,ios::in);

    result=processFile(gCWD,theTempArgs,theOutStream,theInStream);
    theArgs.dump();
    done=!theArgs.next();
  }
  return result;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int main ( int  argc,
char *  argv[] 
)

gess12/20/98

Parameters:
@return

Definition at line 498 of file htmlgen.cpp.

                               {
  int result=0;

  gPrevFile[0]=gThisFile[0]=gNextFile[0];
  if(argc>1){
    char theBuffer[1024];
    theBuffer[0]=0;

    for(int i=1;i<argc;i++){
      strcat(theBuffer,argv[i]);
      strcat(theBuffer," ");
    }

    _getcwd(gCWD,sizeof(gCWD)-1);
    istrstream aStrStream(theBuffer);
    result=iterate(aStrStream);
  }
  else cout<<endl <<"HTMLGenerator usage -f filename [yyy | xxx,yyy | xxx-yyy]" << endl;
  return result;
}

Here is the call graph for this function:

int processFile ( char *  aDir,
CMacros aMacroList,
fstream &  anOutputStream,
fstream &  anInputStream 
)

gess12/20/98

Parameters:
@return

Definition at line 412 of file htmlgen.cpp.

                                                                                              {
  int result=0;

  if(anInputStream.is_open()){
    bool  done=false;
    char  theBuffer[1024];
    char* p=0;

    while((!done) && (0==result)){
    
      anInputStream.getline(theBuffer,sizeof(theBuffer)-1);
      if(anInputStream.gcount()){

          //before doing anything else, expand the macros and keywords...
        expandMacros(theBuffer,aMacroList);
        expandKeywords(theBuffer,aMacroList);

        //Now process each line:
        p=strstr(theBuffer,"@import");
        if(p) {

          //First, see if the line is an htmlgen statement; if so, recurse to read new file...
          char theFilename[1024];

          strcpy(theFilename,"htmlgen -F ");
          p+=8;
          strcat(theFilename,p);

          //If you're here, we found an htmlgen statement. 
          //  To handle this, we have to:
          //    1. strip off the @htmlgen
          //    2. grab the filename and collect the args,
          //    3. and recurse...
          
          fstream theInStream(p,ios::in);
          result=processFile(aDir,aMacroList,anOutputStream,theInStream);
        }
        else anOutputStream << theBuffer << endl;
      }
      else done=true;
    }
  }
  return result;
}

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

char gCWD[1025] [static]

Definition at line 52 of file htmlgen.cpp.

int gFileIndex = 0 [static]

Definition at line 56 of file htmlgen.cpp.

char gNextFile[128] [static]

Definition at line 55 of file htmlgen.cpp.

char gPrevFile[128] [static]

Definition at line 53 of file htmlgen.cpp.

char gThisFile[128] [static]

Definition at line 54 of file htmlgen.cpp.

char* tagTable[] [static]
Initial value:
 {
  "A", "ABBR", "ACRONYM", "ADDRESS", "APPLET", "AREA", 
  "B", "BASE", "BASEFONT", "BDO", "BGSOUND", "BIG", "BLINK", "BLOCKQUOTE", "BODY", "BR", "BUTTON", 
  "CAPTION", "CENTER", "CITE", "CODE", "COL", "COLGROUP", 
  "DD", "DEL", "DFN", "DIR", "DIV", "DL", "DT", 
  "EM", "EMBED", 
  "FIELDSET", "FONT", "FORM", "FRAME", "FRAMESET", 
  "H1", "H2", "H3", "H4", "H5", "H6", "HEAD", "HR", "HTML", 
  "I", "IFRAME", "ILAYER", "IMG", "INPUT", "INS", "ISINDEX", 
  "KBD", "KEYGEN", 
  "LABEL", "LAYER", "LEGEND", "LI", "LINK", "LISTING", 
  "MAP", "MENU", "META", "MULTICOL", 
  "NOBR", "NOEMBED", "NOFRAMES", "NOLAYER", "NOSCRIPT", 
  "OBJECT", "OL", "OPTGROUP", "OPTION", 
  "P", "PARAM", "PLAINTEXT", "PRE", 
  "Q", 
  "S","SAMP","SCRIPT","SELECT","SERVER","SMALL","SOUND","SPACER","SPAN","STRIKE","STRONG","STYLE","SUB","SUP", 
  "TABLE", "TBODY", "TD", "TEXTAREA", "TFOOT", "TH", "THEAD", "TITLE", "TR", "TT", 
  "U", "UL", 
  "VAR", 
  "WBR", 
  "XMP",
  0
}

Definition at line 28 of file htmlgen.cpp.