View Single Post
Old 05-05-2008, 03:20 PM   #1 (permalink)
Terrorist
Recruit
 
Join Date: May 2008
Posts: 2
Terrorist is on a distinguished road
Angry HTML tags validator

Hello Everyone,

I have done this code in C to read a HTML string from the keyboard, parse the tags and store them into a stack, then print it out.

Now I am trying to take of the Closing Tags from the stacks (aka. /html) and store them into another array.However, I have a problem with that. Could you please help me in this, I have commented the code where it SHOULD copy the closing tags to another array.

Code:
#include <stdio.h>
#define B_OPEN '<'
#define B_CLOSE '>'
#define BRACKET_MAX 10
#define B_CHAR_MAX 7

char bracket[BRACKET_MAX][B_CHAR_MAX];
int diagnosis;
signed char bracket_nr, close_nr;


/********************  Prototypes ***********************/
/********************************************************/
/********************************************************/
int push (void);
int writetags (void);



/********************   Main      ***********************/
/********************************************************/
/********************************************************/
int main (void){
    extern int diagnosis;
    extern signed char bracket_nr;
    char c;
    bracket_nr=-1;
    diagnosis=0;
    while((c=getchar())!=EOF && c!='\n'){
        if(c==B_OPEN){
        diagnosis=push();
        };
        switch (diagnosis){
        case -3:
             printf("infinate bracket.\n");
             break;
        case -5:
             printf("Too Large Bracket.\n");
             break;
        case -7:
             printf("Too many bracket.\n");
             break;
        
              };
        if (diagnosis < 0)
        break;
        
        
        };
        if(diagnosis==0){
           printf("No brackets.\n");
        
        }else if (diagnosis > 0){
       printf("You have written %d brackets; they are:\n",diagnosis);
       writetags();
       }else{
      printf("Text contains errors.\n");
       
       };
       system ("PAUSE");
       return diagnosis;
       
        
        };
        
        
        
/******************** Push Function**********************/
/********************************************************/
/********************************************************/
        int push (void){
     extern char bracket [BRACKET_MAX][B_CHAR_MAX];
     extern int diagnosis;
     extern signed char bracket_nr;
     char c, bracket_char;
     
     c=getchar();
     bracket_nr++;
     if(bracket_nr>=BRACKET_MAX)
     return (diagnosis = -7); //to many tags
     diagnosis=bracket_nr+1;
     for(bracket_char=0;c!=EOF && c!='\n' && c!=B_CLOSE && bracket_char<B_CHAR_MAX;bracket_char++, c=getchar()){
          //record tag name into the stack bracket
          bracket[bracket_nr][bracket_char]=c;
          
          };
          bracket[bracket_nr][bracket_char]='\0';
          if(c==B_CLOSE){
           return diagnosis; 
          
          }else if (bracket_char>=B_CHAR_MAX){
         return(diagnosis=-5);
          
          }else if (c==EOF || c=='\n')
         return (diagnosis=-3);
          return diagnosis;
        };
        
/********************  writetags function ***************/
/********************************************************/
/********************************************************/
     int writetags (void) {
     extern char bracket[BRACKET_MAX][B_CHAR_MAX];
     char close[BRACKET_MAX][B_CHAR_MAX];
     extern int diagnosis;
     extern signed char bracket_nr, close_nr;
     char bracket_char, close_char;
     
     for(;bracket_nr>=0; bracket_nr--){
           for(bracket_char=0; bracket[bracket_nr][bracket_char]!='\0'; bracket_char++){
          
          putchar(bracket[bracket_nr][bracket_char]);
         
          }
          putchar('\n');
           
           }

/*****************************************START: TO COPY and PRINT CLOSING TAGS*************************************/
close_nr=0;
for(;bracket_nr>=0; bracket_nr--, close_nr++){
    if (bracket_char=='/'){
       for(close_char=0, bracket_char=0; bracket[bracket_nr][bracket_char]!='\n'; bracket_char++, close_char++){                                            
           close[close_nr][close_char]=bracket[bracket_nr][bracket_char];}}}
           
close[close_nr][close_char]='\0';
printf("Off tags are:\n");
      for(;close_nr>=0; close_nr--){
           for(close_char=0; close[close_nr][close_char]!='\0'; close_char++){
              putchar(close[close_nr][close_char]);
         
          }
          putchar('\n');
           
           }
 /*****************************************END: TO COPY and PRINT CLOSING TAGS*************************************/         
};
Terrorist is offline   Reply With Quote