aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/contrib/examples/highlighter/highlight.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/examples/highlighter/highlight.c')
-rw-r--r--contrib/examples/highlighter/highlight.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/contrib/examples/highlighter/highlight.c b/contrib/examples/highlighter/highlight.c
new file mode 100644
index 0000000..b03f792
--- /dev/null
+++ b/contrib/examples/highlighter/highlight.c
@@ -0,0 +1,83 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "highlighter.h"
+
+#define TERMINAL_FG_BLACK "\x1b[30m"
+#define TERMINAL_FG_RED "\x1b[31m"
+#define TERMINAL_FG_GREEN "\x1b[32m"
+#define TERMINAL_FG_YELLOW "\x1b[33m"
+#define TERMINAL_FG_BLUE "\x1b[34m"
+#define TERMINAL_FG_MAGENTA "\x1b[35m"
+#define TERMINAL_FG_CYAN "\x1b[36m"
+#define TERMINAL_FG_WHITE "\x1b[37m"
+#define TERMINAL_FG_DEFAULT "\x1b[39m"
+
+#define TERMINAL_BG_BLACK "\x1b[40m"
+#define TERMINAL_BG_RED "\x1b[41m"
+#define TERMINAL_BG_GREEN "\x1b[42m"
+#define TERMINAL_BG_YELLOW "\x1b[43m"
+#define TERMINAL_BG_BLUE "\x1b[44m"
+#define TERMINAL_BG_MAGENTA "\x1b[45m"
+#define TERMINAL_BG_CYAN "\x1b[46m"
+#define TERMINAL_BG_WHITE "\x1b[47m"
+#define TERMINAL_BG_DEFAULT "\x1b[49m"
+
+#define TERMINAL_BOLD "\x1b[1m"
+#define TERMINAL_NO_BOLD "\x1b[22m"
+#define TERMINAL_UNDERLINE "\x1b[4m"
+#define TERMINAL_NO_UNDERLINE "\x1b[24m"
+
+#define TERMINAL_RESET "\x1b[0m"
+
+static const char *colormap[] = {
+ [HighlightSection] = TERMINAL_FG_BLACK TERMINAL_BOLD,
+ [HighlightField] = TERMINAL_FG_BLUE TERMINAL_BOLD,
+ [HighlightPrivateKey] = TERMINAL_FG_YELLOW TERMINAL_BOLD,
+ [HighlightPublicKey] = TERMINAL_FG_YELLOW TERMINAL_BOLD,
+ [HighlightPresharedKey] = TERMINAL_FG_YELLOW TERMINAL_BOLD,
+ [HighlightIP] = TERMINAL_FG_GREEN,
+ [HighlightCidr] = TERMINAL_FG_YELLOW,
+ [HighlightHost] = TERMINAL_FG_GREEN TERMINAL_BOLD,
+ [HighlightPort] = TERMINAL_FG_MAGENTA,
+ [HighlightMTU] = TERMINAL_FG_BLUE,
+ [HighlightKeepalive] = TERMINAL_FG_BLUE,
+ [HighlightComment] = TERMINAL_FG_CYAN,
+ [HighlightDelimiter] = TERMINAL_FG_CYAN,
+#ifndef MOBILE_WGQUICK_SUBSET
+ [HighlightTable] = TERMINAL_FG_BLUE,
+ [HighlightFwMark] = TERMINAL_FG_BLUE,
+ [HighlightSaveConfig] = TERMINAL_FG_BLUE,
+ [HighlightCmd] = TERMINAL_FG_WHITE,
+#endif
+ [HighlightError] = TERMINAL_FG_RED TERMINAL_UNDERLINE
+};
+
+int main(int argc, char *argv[])
+{
+ char input[1024 * 1024];
+ struct highlight_span *spans;
+ size_t last = 0, total_len;
+
+ total_len = fread(input, 1, sizeof(input) - 1, stdin);
+ input[total_len] = '\0';
+ spans = highlight_config(input);
+
+ fputs(TERMINAL_RESET, stdout);
+ for (struct highlight_span *span = spans; span->type != HighlightEnd; ++span) {
+ fwrite(input + last, 1, span->start - last, stdout);
+ fputs(colormap[span->type], stdout);
+ fwrite(input + span->start, 1, span->len, stdout);
+ fputs(TERMINAL_RESET, stdout);
+ last = span->start + span->len;
+ }
+ fwrite(input + last, 1, total_len - last, stdout);
+
+ free(spans);
+ return 0;
+}