Riremito

html parser/Tag.cpp

Apr 14th, 2017
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include<Windows.h>
  2. #include<stdio.h>
  3. #include"html.h"
  4.  
  5. HTMLTag::HTMLTag(char *pp, char *pn){
  6.     int length;
  7.  
  8.     for(length=0; &pp[length] <= pn; length++){
  9.         if(pp[length] == ' '){
  10.             break;
  11.         }
  12.     }
  13.  
  14.     tag = (char *)malloc(length + 1);
  15.     memcpy(tag, pp, length);
  16.     tag[length] = 0;
  17.  
  18.     length = pn - pp + 1;
  19.     fulltag = (char *)malloc(length + 1);
  20.     memcpy(fulltag, pp, length);
  21.     fulltag[length] = 0;
  22.  
  23.     next = NULL;
  24.     parent = NULL;
  25.     text = NULL;
  26. }
  27.  
  28. HTMLTag::~HTMLTag(){
  29.     free(tag);
  30.     free(fulltag);
  31.     if(text){
  32.         free(text);
  33.     }
  34. }
  35.  
  36. HTMLTag* HTMLTag::GetNext(){
  37.     return next;
  38. }
  39.  
  40. HTMLTag* HTMLTag::GetParent(){
  41.     return parent;
  42. }
  43.  
  44. void HTMLTag::SetNext(HTMLTag *ht){
  45.     next = ht;
  46. }
  47.  
  48. void HTMLTag::SetParent(HTMLTag *ht){
  49.     parent = ht;
  50. }
  51.  
  52. char* HTMLTag::GetTag(){
  53.     return tag;
  54. }
  55.  
  56. char* HTMLTag::GetFullTag(){
  57.     return fulltag;
  58. }
  59.  
  60. bool HTMLTag::Get(char *name, char *out){
  61.     char *ename, *sp;
  62.     int length = strlen(name) + 1;
  63.     ename = (char *)malloc(length + 1);
  64.     sprintf(ename, "%s=", name);
  65.     sp = strstr(fulltag, ename);
  66.     if(!sp){
  67.         free(ename);
  68.         return false;
  69.     }
  70.     else{
  71.         int i, j = 0, count = 0;
  72.         sp += strlen(ename);
  73.         for(i=0; sp[i]; i++){
  74.             switch(sp[i]){
  75.             case '\"':
  76.                 count++;
  77.                 break;
  78.             default:
  79.                 if(count == 1){
  80.                     out[j++] = sp[i];
  81.                 }
  82.                 break;
  83.             }
  84.         }
  85.         out[j] = 0;
  86.         free(ename);
  87.         return true;
  88.     }
  89. }
  90.  
  91. void HTMLTag::SetText(char *s){
  92.     int length = strlen(s);
  93.     text = (char *)malloc(length +1);
  94.     memcpy(text, s, length + 1);
  95. }
  96. char* HTMLTag::GetText(){
  97.     return text;
  98. }
Add Comment
Please, Sign In to add comment