-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvalidate.c
123 lines (115 loc) · 2.29 KB
/
validate.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "validate.h"
int analizarTag(char* text, char* tagEncontrado, int pos, int *contadorLineas)
{
while(text[pos] != '\0')
{
if(text[pos] == '\n')
{
(*contadorLineas)++;
}
if(text[pos] == '<')
{
pos++;
// Si entra en cerrar un tag
if(text[pos] == '/')
{
pos++;
int j = 0;
while((text[pos] != '>') && (tagEncontrado[j] == text[pos]))
{
j++; pos++;
}
if((tagEncontrado[j] == '\0') && (text[pos] == '>'))
{
return pos;
} else {
return -2;
}
} else {
int contadorTag = pos;
while(text[contadorTag] != '>')
{
contadorTag++;
}
contadorTag = contadorTag - pos;
contadorTag = contadorTag + 1; //Para el '\0' final
char* tagALevantar = (char*)malloc(sizeof(char)*contadorTag);
int k = 0;
while(text[pos] != '>')
{
tagALevantar[k] = text[pos];
k++; pos++;
}
tagALevantar[k] = '\0';
pos++;
pos = analizarTag(text, tagALevantar, pos, contadorLineas);
free(tagALevantar);
switch(pos)
{
case -1:
return -1;
break;
case -2:
return -2;
break;
default:
break;
}
}
}
pos++;
}
return -1;
}
int validate(char *text, char **errmsg){
char* buffer;
int i = 0;
int contadorLineas = 0;
while(text[i] != '\0')
{
if(text[i] == '\n')
{
contadorLineas++;
}
if(text[i] == '<')
{
i++;
int contadorTag = i;
while(text[contadorTag] != '>')
{
contadorTag++;
}
contadorTag = contadorTag - i;
contadorTag = contadorTag + 1; //Para el '\0' final
char* tagALevantar = (char*)malloc(sizeof(char)*contadorTag);
int j = 0;
while(text[i] != '>')
{
tagALevantar[j] = text[i];
j++; i++;
}
tagALevantar[j] = '\0';
i = analizarTag(text, tagALevantar, i, &contadorLineas);
free(tagALevantar);
switch(i)
{
case -1:
contadorLineas = contadorLineas + 1;
sprintf(buffer, "Linea: %d. El tag abierto, no fue cerrado.\n", contadorLineas);
*errmsg = buffer;
return 1;
break;
case -2:
contadorLineas = contadorLineas + 1;
sprintf(buffer, "Linea: %d. Tag mal anidado, el ultimo tag cerrado, no corresponde con el ultimo tag abierto.\n", contadorLineas);
*errmsg = buffer;
return 1;
break;
default:
break;
}
}
i++;
}
return 0;
}