summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/argent.c21
-rw-r--r--src/bindings.c14
-rw-r--r--src/logging.c42
-rw-r--r--src/logging.h16
-rw-r--r--src/options.c15
-rw-r--r--src/options.h1
6 files changed, 95 insertions, 14 deletions
diff --git a/src/argent.c b/src/argent.c
index 7426394..b83f851 100644
--- a/src/argent.c
+++ b/src/argent.c
@@ -6,6 +6,7 @@
#include "options.h"
#include "bindings.h"
+#include "logging.h"
struct settings {
@@ -15,41 +16,43 @@ struct settings {
int main(int argc, char **argv)
{
+ argent_log(DEBUG, "parse command-line options");
struct argent_options opts;
int error = parse_options(&opts, argc, argv);
-
if (error)
return 1;
- printf("configuration file: %s\n"
- "output directory: %s\n",
- opts.conf_filename,
- opts.output_dir);
+ argent_log(INFO, "log level: %s", level_string(argent_log_level));
+ argent_log(INFO, "configuration file: %s", opts.conf_filename);
+ argent_log(INFO, "output directory: %s", opts.output_dir);
+ argent_log(DEBUG, "create lua state");
lua_State *L = luaL_newstate();
luaL_openlibs(L);
+ argent_log(DEBUG, "create argent table");
hs_create_table
(L,
hs_str_cfunc("markdown", markdown)
);
lua_setglobal(L, "argent");
+ argent_log(DEBUG, "load configuration file");
error = luaL_loadfile(L, opts.conf_filename);
if (error != 0) {
- fprintf(stderr, "error: %s\n", lua_tostring(L, -1));
+ argent_log(FATAL, "lua error: %s", lua_tostring(L, -1));
lua_close(L);
return error;
}
+ argent_log(DEBUG, "run configuration file");
error = hs_call(L, 0, 1);
if (error != 0) {
- fprintf(stderr, "error: %s\n", lua_tostring(L, -1));
+ argent_log(FATAL, "lua error: %s", lua_tostring(L, -1));
lua_close(L);
return error;
}
- printf("here!\n");
-
+ argent_log(DEBUG, "close lua state");
lua_close(L);
return 0;
}
diff --git a/src/bindings.c b/src/bindings.c
index eb9710c..b02911b 100644
--- a/src/bindings.c
+++ b/src/bindings.c
@@ -5,6 +5,7 @@
#include "honeysuckle.h"
#include "md4c-html.h"
#include "bindings.h"
+#include "logging.h"
struct concat_buffer {
char *buf;
@@ -15,6 +16,7 @@ struct concat_buffer {
static void md_callback(const MD_CHAR *html, MD_SIZE size, void *data)
{
+ argent_log(TRACE, "begin md_callback()");
struct concat_buffer *d = data;
if (!d->ok)
@@ -24,6 +26,7 @@ static void md_callback(const MD_CHAR *html, MD_SIZE size, void *data)
char *new_buf = realloc(d->buf, d->size * 2);
if (new_buf == NULL) {
// failed to allocate memory, abort!
+ argent_log(WARN, "failed to properly allocate memory for html buffer!");
d->ok = false;
return;
}
@@ -34,13 +37,17 @@ static void md_callback(const MD_CHAR *html, MD_SIZE size, void *data)
memcpy((d->buf) + d->index, html, size);
d->index += size;
+
+ argent_log(TRACE, "finish md_callback()");
}
int markdown(lua_State *L)
{
+ argent_log(DEBUG, "begin markdown parsing");
char *markdown_buffer;
hs_parse_args(L, hs_str(markdown_buffer));
size_t len = strlen(markdown_buffer);
+ argent_log(TRACE, "markdown input (%ld bytes): %s", len, markdown_buffer);
unsigned int md_flags = MD_FLAG_TABLES | MD_FLAG_STRIKETHROUGH | MD_FLAG_UNDERLINE;
@@ -50,6 +57,7 @@ int markdown(lua_State *L)
data.index = 0;
data.ok = true;
+ argent_log(TRACE, "call md_html()");
// fill out the buffer
int error = md_html(markdown_buffer, len, md_callback, &data, md_flags, 0);
if (error)
@@ -60,9 +68,11 @@ int markdown(lua_State *L)
data.buf[data.index] = 0;
+ argent_log(TRACE, "finished HTML buffer (%d bytes, %d chars): %s",
+ data.size, data.index, data.buf);
lua_pushstring(L, data.buf);
-
free(data.buf);
-
+
+ argent_log(DEBUG, "finish markdown parsing");
return 1;
}
diff --git a/src/logging.c b/src/logging.c
new file mode 100644
index 0000000..0481908
--- /dev/null
+++ b/src/logging.c
@@ -0,0 +1,42 @@
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "logging.h"
+
+int argent_log_level;
+
+const char *level_string(int level)
+{
+ switch(level) {
+ case FATAL:
+ return "FATAL";
+ case ERROR:
+ return "ERROR";
+ case WARN:
+ return "WARN";
+ case INFO:
+ return "INFO";
+ case DEBUG:
+ return "DEBUG";
+ case TRACE:
+ return "TRACE";
+
+ default:
+ if (level > TRACE)
+ return "TRACE";
+ return "[BAD LOG LEVEL]";
+ }
+}
+
+
+void argent_log(int level, const char *format_string, ...)
+{
+ if (argent_log_level >= level) {
+ va_list args;
+ va_start(args, format_string);
+ fprintf(stderr, "[%s] ", level_string(level));
+ vfprintf(stderr, format_string, args);
+ fprintf(stderr, "\n");
+ va_end(args);
+ }
+}
diff --git a/src/logging.h b/src/logging.h
new file mode 100644
index 0000000..53232ca
--- /dev/null
+++ b/src/logging.h
@@ -0,0 +1,16 @@
+#ifndef ARGENT_LOGGING_H
+#define ARGENT_LOGGING_H
+
+#define FATAL 0
+#define ERROR 1
+#define WARN 2
+#define INFO 3
+#define DEBUG 4
+#define TRACE 5
+
+extern int argent_log_level;
+
+const char *level_string(int level);
+void argent_log(int level, const char *format_string, ...);
+
+#endif
diff --git a/src/options.c b/src/options.c
index b3836a7..c4eb8d4 100644
--- a/src/options.c
+++ b/src/options.c
@@ -2,21 +2,27 @@
#include <unistd.h>
#include "options.h"
+#include "logging.h"
static void print_usage(const char *progname)
{
- printf("Usage: %s [-c config_file] [-o output_directory]\n",
+ printf("Usage: %s [-c config_file] [-i input_directory] [-o output_directory]\n",
progname);
}
int parse_options(struct argent_options *opts, int argc, char **argv)
{
+ opts->log_level = 0;
opts->conf_filename = "argent.lua";
- opts->output_dir = "build";
+ opts->output_dir = "public";
int opt;
- while ((opt = getopt(argc, argv, "c:o:")) != -1) {
+ while ((opt = getopt(argc, argv, "vc:o:")) != -1) {
switch (opt) {
+ case 'v':
+ opts->log_level += 1;
+ break;
+
case 'c':
opts->conf_filename = optarg;
break;
@@ -31,5 +37,8 @@ int parse_options(struct argent_options *opts, int argc, char **argv)
}
}
+ // ew, globals (sorry)
+ argent_log_level = opts->log_level;
+
return 0;
}
diff --git a/src/options.h b/src/options.h
index ae4e621..d62eb58 100644
--- a/src/options.h
+++ b/src/options.h
@@ -4,6 +4,7 @@
struct argent_options {
const char *conf_filename;
const char *output_dir;
+ int log_level;
};
/* return 0 and fill `opts` on success; return nonzero on failure */