Adding a formater (I think)

This commit is contained in:
Tristan Roux
2019-12-06 12:02:27 +01:00
parent 3bc9701753
commit 49aa1ca861
4 changed files with 56 additions and 6 deletions
+4
View File
@@ -0,0 +1,4 @@
Unsupported:
namespaces
attributes with semi quotes (') instead of quoetes (")
comments
+51 -6
View File
@@ -5,11 +5,60 @@
** xmlparser
*/
#include "my.h"
#include "xml.h"
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdbool.h>
bool is_space_usefull(char *nodestr, int i)
{
if (i == 0 || !is_alphanum(nodestr[i - 1]))
return (false);
if (i + 1 == my_strlen(nodestr) || !is_alphanum(i + 1))
return (false);
return (true);
}
int xml_handle_prolog(char **nodestr)
{
char *strconst = *nodestr;
if (my_strstr(*nodestr, "<?xml") == *nodestr)
*nodestr = my_strstr(*nodestr, "?>");
if (!*nodestr) {
free(strconst);
return (-1);
}
return (0);
}
node *xml_parsestr(char *nodestr)
{
node *n;
char *strconst = nodestr;
if (xml_handle_prolog(&nodestr) < 0)
return (NULL);
for (int i = 0; nodestr[i]; i++) {
if (nodestr[i] == ' ') {
if (!is_space_usefull(nodestr, i))
nodestr[i] = '\t';
}
}
for (int i = 0; nodestr[i]; i++) {
if (nodestr[i] == '\t' || nodestr[i] == '\n') {
nodestr[i] = nodestr[i + 1];
nodestr[i + 1] = '\t';
i = 0;
}
}
n = xml_parsenode(&nodestr);
free(strconst);
return (n);
}
node *xmlparse(char *path)
{
@@ -17,7 +66,6 @@ node *xmlparse(char *path)
int fd = open(path, O_RDONLY);
struct stat stats;
char *nodestr;
char *strconst;
int count;
if (fd < 0)
@@ -26,11 +74,8 @@ node *xmlparse(char *path)
nodestr = malloc(stats.st_size);
if (nodestr) {
count = read(fd, nodestr, stats.st_size);
if (count == stats.st_size) {
strconst = nodestr;
n = xml_parsenode(&nodestr);
}
free(strconst);
if (count == stats.st_size)
n = xml_parsestr(nodestr);
}
close(fd);
return (n);
View File
+1
View File
@@ -1 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<yes><nop/></yes>