diff --git a/BUGS b/BUGS
new file mode 100644
index 0000000..df777bb
--- /dev/null
+++ b/BUGS
@@ -0,0 +1 @@
+- Newlines in multi-line comments arent converted into
s
\ No newline at end of file
diff --git a/README.md b/README.md
index 2d64c3b..b24a291 100644
--- a/README.md
+++ b/README.md
@@ -66,4 +66,4 @@ if `table_mode` were `1`, then the output would have been:
```
the color doesn't come with the generated HTML, you need to add it yourself using CSS. There's an example CSS style provided in `style.css`, inspired by the Sublime Text color theme I use.
-Since the generated class names of the HTML tags are pretty generic (`identifier`, `operator`, `comment`, ..), you can specify a prefix to be prepented to these names.
\ No newline at end of file
+Since the generated class names of the HTML tags are pretty generic (`identifier`, `operator`, `comment`, ..) they may conflict with your own CSS code. To avoid this problem you can specify a prefix to be prepented to these names. The command-line interface `c2h` uses the `c2h-` previx.
diff --git a/cli.c b/cli.c
index dbd6cf4..04aac38 100644
--- a/cli.c
+++ b/cli.c
@@ -1,3 +1,4 @@
+#include
#include
#include
#include
@@ -29,45 +30,119 @@ static char *load_file(const char *file, long *size)
return data;
}
+static int fileconv(const char *input_file, const char *output_file,
+ const char *style_file, const char *prefix, bool notable)
+{
+ if(input_file == NULL || output_file == NULL) {
+ fprintf(stderr,
+ "Error: You must specify both input and output "
+ "files using the --input and --output options\n");
+ return -1;
+ }
+
+ /* Load the input string */
+ long input_size;
+ char *input = load_file(input_file, &input_size);
+ if(input == NULL) {
+ fprintf(stderr, "Error: Failed to open file %s\n", input_file);
+ return -1;
+ }
+
+ /* Convert it */
+ const char *error;
+ char *output = c2html(input, input_size,
+ !notable, prefix, &error);
+ if(output == NULL) {
+ fprintf(stderr, "Error: %s\n", error);
+ free(input);
+ return -1;
+ }
+
+ /* Open the output file */
+ FILE *fp = fopen(output_file, "wb");
+ if(fp == NULL) {
+ fprintf(stderr, "ERROR: Failed to write to file %s\n",
+ output_file);
+ free(output);
+ free(input);
+ return -1;
+ }
+
+ if(style_file != NULL) {
+ char *style_data = load_file(style_file, NULL);
+ if(style_data == NULL) {
+ fprintf(stderr, "Error: Failed to open file %s\n",
+ style_file);
+ free(output);
+ free(input);
+ return -1;
+ }
+ fputs("", fp);
+ free(style_data);
+ }
+
+ /* ..and write the converted string to it */
+ fwrite(output, 1, strlen(output), fp);
+ fclose(fp);
+ fprintf(stderr, "OK\n");
+
+ /* All done! :^) */
+ free(output);
+ free(input);
+ return 0;
+}
+
int main(int argc, char **argv)
{
- if(argc < 3) {
- fprintf(stderr, "ERROR: Missing input and output file\n");
- return -1;
- }
- char *src_file = argv[1];
- char *dst_file = argv[2];
- long src_size;
- char *src_data = load_file(src_file, &src_size);
-
- if(src_data == NULL) {
- fprintf(stderr, "ERROR: Failed to open \"%s\"\n", src_file);
- return -1;
- }
-
- _Bool table_mode = 0;
- const char *class_prefix = "c2h-";
-
- const char *error;
- char *dst_data = c2html(src_data, src_size, table_mode, class_prefix, &error);
-
- if(dst_data == NULL)
- fprintf(stderr, "ERROR: %s\n", error);
- else {
-
- FILE *fp = fopen(dst_file, "wb");
- if(fp == NULL)
- fprintf(stderr, "ERROR: Failed to open \"%s\"\n", dst_file);
- else {
- fwrite(dst_data, 1, strlen(dst_data), fp);
- fclose(fp);
- fprintf(stderr, "OK\n");
+ /* Parse command-line arguments */
+ char *input_file = NULL,
+ *output_file = NULL,
+ *style_file = NULL,
+ *prefix = NULL;
+ bool notable = 0;
+ bool http = 0;
+ for(int i = 1; i < argc; i += 1) {
+ if(!strcmp(argv[i], "-i") || !strcmp(argv[i], "--input")) {
+ i += 1;
+ if(i == argc || argv[i][0] == '-') {
+ fprintf(stderr, "Error: Missing argument after %s\n", argv[i-1]);
+ return -1;
+ }
+ input_file = argv[i];
+ } else if(!strcmp(argv[i], "-o") || !strcmp(argv[i], "--output")) {
+ i += 1;
+ if(i == argc || argv[i][0] == '-') {
+ fprintf(stderr, "Error: Missing argument after %s\n", argv[i-1]);
+ return -1;
+ }
+ output_file = argv[i];
+ } else if(!strcmp(argv[i], "-p") || !strcmp(argv[i], "--prefix")) {
+ i += 1;
+ if(i == argc || argv[i][0] == '-') {
+ fprintf(stderr, "Error: Missing argument after %s\n", argv[i-1]);
+ return -1;
+ }
+ prefix = argv[i];
+ } else if(!strcmp(argv[i], "--no-table")) {
+ notable = 1;
+ } else if(!strcmp(argv[i], "--style")) {
+ i += 1;
+ if(i == argc || argv[i][0] == '-') {
+ fprintf(stderr, "Error: Missing argument after %s\n", argv[i-1]);
+ return -1;
+ }
+ style_file = argv[i];
+ } else if(!strcmp(argv[i], "--http")) {
+ http = 1;
+ } else {
+ fprintf(stderr, "Error: Unknown option %s\n", argv[i]);
+ return -1;
}
-
- free(dst_data);
}
- free(src_data);
- return 0;
+ return fileconv(input_file, output_file,
+ style_file, prefix, notable);
}
\ No newline at end of file
diff --git a/example.c b/example.c
index c3e8c3e..6fb86be 100644
--- a/example.c
+++ b/example.c
@@ -22,7 +22,11 @@ int main()
"}\n";
char *html = c2html(c, strlen(c), table_mode, prefix, NULL);
+
+ /* .. check for errors .. */
+
printf("%s\n", html);
+
free(html);
return 0;
-}
\ No newline at end of file
+}
diff --git a/style.css b/style.css
index 7f09964..e9a4421 100644
--- a/style.css
+++ b/style.css
@@ -1,13 +1,18 @@
+ div.c2h-main {
+ }
+
div.c2h-code {
- max-height: 80vh;
- margin: 50px;
+ max-height: 600px;
+
+ padding: 10px;
border-radius: 3px;
- color: white;
+
font-family: monospace;
font-size: 16px;
+
+ color: white;
background: hsl(210, 15%, 22%);
- padding: 10px;
}
div.c2h-code-inner::-webkit-scrollbar {
@@ -21,6 +26,7 @@
div.c2h-code-inner {
overflow: auto;
+ height: inherit;
max-height: inherit;
scrollbar-color: hsla(210, 13%, 40%, 0.7) transparent;
}
@@ -32,6 +38,7 @@
div.c2h-code table td {
color: white;
+ vertical-align: top;
}
div.c2h-code table td:first-child {