Browse Source

base

master
Chris Cromer 4 years ago
parent
commit
809f8835ce
8 changed files with 7892 additions and 0 deletions
  1. +25
    -0
      Makefile
  2. +2
    -0
      headers/main.h
  3. +1
    -0
      headers/readconfig.h
  4. +53
    -0
      main.c
  5. +7714
    -0
      out/Biblia.txt
  6. +11
    -0
      out/chris.conf
  7. +22
    -0
      out/config.dtd
  8. +64
    -0
      readconfig.c

+ 25
- 0
Makefile View File

@@ -0,0 +1,25 @@
CC=gcc
BINDIR=out

DEBUG_FLAGS=-Wall -Werror -ggdb

CFLAGS=$(DEBUG_FLAGS) $(shell pkg-config libxml-2.0 --cflags) -ansi -I ./headers
LDFLAGS=$(shell pkg-config libxml-2.0 --libs)
BINARY=generarxml

OBJS = \
main.o \
readconfig.o

all: bin

bin: $(OBJS)
$(CC) $(xml2-config --cflags --libs) $(CFLAGS) $(OBJS) $(LDFLAGS) \
-o $(BINDIR)/$(BINARY)

clean:
rm -fR $(BINDIR)/$(BINARY) *.o

%.o: %.c
$(CC) $(xml2-config --cflags --libs) $(CFLAGS) -c $< -o $@ $(LDFLAGS)

+ 2
- 0
headers/main.h View File

@@ -0,0 +1,2 @@
void printusage(int error);
char *output_file = "";

+ 1
- 0
headers/readconfig.h View File

@@ -0,0 +1 @@
int readconfig(char *config_file);

+ 53
- 0
main.c View File

@@ -0,0 +1,53 @@
/* Christopher Cromer
* Ingeniería Civil en Informática
* */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
#include "readconfig.h"

int main(int argc, char *argv[]) {
char *config_file = "";

if (argc == 1) {
/* No arguments were passed */
printusage(0);
return 1;
}
/* Read the command line arguments */
int i;
for (i = 1; i < argc; i++) {
if ((strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "--config") == 0) && i != argc - 1 && strlen(config_file) == 0) {
config_file = (char *) malloc(strlen(argv[i + 1]) * sizeof(char));
config_file = argv[i + 1];
/* Use config file */
break;
}
else {
/* Incorrect usage or used the same option more than once */
printusage(1);
return 1;
}
}

int status = readconfig(config_file);
if (status != 0) {
return 1;
}

return 0;
}

/* Print how to use the program
* */
void printusage(int error) {
if (error == 1) {
printf("Opcion desconocido!\n\n");
}

printf("usage: generarxml [opciones] \n");
printf(" -s, --config <archivo> archivo de configuración\n");
}

+ 7714
- 0
out/Biblia.txt
File diff suppressed because it is too large
View File


+ 11
- 0
out/chris.conf View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config SYSTEM "config.dtd">
<config>
<output>chris.xml</output>
<bible>El Santo Evangelio Según</bible>
<book>SAN MATEO</book>
<chapter>
<name>MATEO</name>
<number>16-20</number>
</chapter>
</config>

+ 22
- 0
out/config.dtd View File

@@ -0,0 +1,22 @@
<?xml encoding="UTF-8"?>

<!ELEMENT config (output,bible,book,chapter)>
<!ATTLIST config xmlns CDATA #FIXED ''>

<!ELEMENT output (#PCDATA)>
<!ATTLIST output xmlns CDATA #FIXED ''>

<!ELEMENT bible (#PCDATA)>
<!ATTLIST bible xmlns CDATA #FIXED ''>

<!ELEMENT book (#PCDATA)>
<!ATTLIST book xmlns CDATA #FIXED ''>

<!ELEMENT chapter (name,number)>
<!ATTLIST chapter xmlns CDATA #FIXED ''>

<!ELEMENT name (#PCDATA)>
<!ATTLIST name xmlns CDATA #FIXED ''>

<!ELEMENT number (#PCDATA)>
<!ATTLIST number xmlns CDATA #FIXED ''>

+ 64
- 0
readconfig.c View File

@@ -0,0 +1,64 @@
#include <stdio.h>
#include <string.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xmlIO.h>
#include <libxml/xinclude.h>

#ifdef LIBXML_TREE_ENABLED

static void
print_element_names(xmlNode * a_node)
{
xmlNode *cur_node = NULL;

for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
if (cur_node->type == XML_ELEMENT_NODE) {
printf("node type: Element, name: %s\n", cur_node->name);
}

print_element_names(cur_node->children);
}
}

int readconfig(char *config_file) {
/* Initilize the library */
LIBXML_TEST_VERSION
xmlParserCtxtPtr context;
xmlDocPtr config = NULL;
xmlNodePtr root_element = NULL;
context = xmlNewParserCtxt();
if (context == NULL) {
fprintf(stderr, "No pudo alocar contexto de analizador!\n");
return 1;
}

config = xmlCtxtReadFile(context, config_file, NULL, XML_PARSE_DTDVALID);
if (config == NULL) {
fprintf(stderr, "Falló analizar %s\n", config_file);
}
else {
if (context->valid == 0) {
fprintf(stderr, "Falló validar %s\n", config_file);
}

root_element = xmlDocGetRootElement(config);
print_element_names(root_element);
xmlFreeDoc(config);
}
xmlFreeParserCtxt(context);

return 0;
}

#else

int readconfig(char *config_file) {
fprintf(stderr, "libxml2 no tiene tree support compilado\n");
return 1;
}

#endif

Loading…
Cancel
Save