sttemp

Simple template manager
git clone git://git.konyahin.xyz/sttemp
Log | Files | Refs | README | LICENSE

commit 0a341a72a0f26c7e132c84174414dd705a745d53
parent 4e02faa8f4354338d5fdbdaeb9ccd2c38ba9b8a3
Author: Anton Konyahin <me@konyahin.xyz>
Date:   Sun,  2 Jan 2022 20:25:15 +0300

finding of substitution

Diffstat:
MLICENSE | 2+-
MMakefile | 4+++-
Msrc/config.h | 6+++---
Msrc/main.c | 33++++++++++++++++++++++++++++++---
4 files changed, 37 insertions(+), 8 deletions(-)

diff --git a/LICENSE b/LICENSE @@ -1,6 +1,6 @@ MIT/X Consortium License -(C)opyright 2021 Anton Konyahin <me@konyahin.xyz> +(C)opyright 2021, 2022 Anton Konyahin <me@konyahin.xyz> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), diff --git a/Makefile b/Makefile @@ -5,7 +5,9 @@ BIN = sttemp CC = cc CFLAGS = -Wall -Werror -O -all: src/main.c src/config.h +all: $(BIN) + +$(BIN): src/main.c src/config.h $(CC) $(CFLAGS) src/main.c -o $(BIN) clean: diff --git a/src/config.h b/src/config.h @@ -1,5 +1,5 @@ /* See LICENSE file for copyright and license details. */ -char *template_dir = "/Users/antonkonjahin/projects/templates/"; -char *pattern_start = "{"; -char *pattern_end = "}"; +const char *template_dir = "/Users/antonkonjahin/projects/templates/"; +const char *pattern_start = "{"; +const char *pattern_end = "}"; diff --git a/src/main.c b/src/main.c @@ -1,3 +1,5 @@ +/* See LICENSE file for copyright and license details. */ + #include "config.h" #include <stdio.h> #include <stdlib.h> @@ -11,12 +13,12 @@ void show_usage() { printf("Usage:\n\tsttemp template_name\n"); } -char* strconcat(char* first, char* second) { +char* strconcat(const char* first, const char* second) { size_t first_len = strlen(first); size_t second_len = strlen(second); char *buf = malloc(first_len + second_len + 1); - strncpy(buf, first, first_len); - strncpy(buf + first_len, second, second_len + 1); + memcpy(buf, first, first_len); + memcpy(buf + first_len, second, second_len + 1); return buf; } @@ -61,6 +63,31 @@ int main(int argc, char *argv[]) { fclose(template); printf("%s", buf); + printf("==================================\n"); + + const int pat_start_len = strlen(pattern_start); + const int pat_end_len = strlen(pattern_end); + + char *start = buf; + while ((start = strstr(start, pattern_start)) != NULL) { + start = start + pat_start_len; + char* end = strstr(start, pattern_end); + if (end == NULL) { + fprintf(stderr, "Unfinished pattern: %10s", start); + return 1; + } + + size_t token_length = end - start; + char* token_name = malloc(token_length + 1); + memcpy(token_name, start, token_length); + token_name[token_length] = '\0'; + + printf("%s\n", token_name); + free(token_name); + + start = end + pat_end_len; + } + free(buf); return 0;