diff options
author | axtloss <axtlos@getcryst.al> | 2024-02-26 22:19:48 +0100 |
---|---|---|
committer | axtloss <axtlos@getcryst.al> | 2024-02-26 22:19:48 +0100 |
commit | ae895bf260f2015816988bffe429f06faf653707 (patch) | |
tree | 8ad4fe5275400c28f74f3e4e72f36d74fc598e32 /fbwarn | |
parent | 9631d1f9d985e4436d2b138f5f83e7a7e9602be8 (diff) | |
download | fsverify-ae895bf260f2015816988bffe429f06faf653707.tar.gz fsverify-ae895bf260f2015816988bffe429f06faf653707.tar.bz2 |
BVG: Add BVGRing
Diffstat (limited to 'fbwarn')
-rw-r--r-- | fbwarn/src/extString.c | 40 | ||||
-rw-r--r-- | fbwarn/src/extString.h | 5 | ||||
-rw-r--r-- | fbwarn/src/parseBVG.c | 64 | ||||
-rw-r--r-- | fbwarn/src/parseBVG.h | 28 | ||||
-rw-r--r-- | fbwarn/src/warn.c | 6 |
5 files changed, 107 insertions, 36 deletions
diff --git a/fbwarn/src/extString.c b/fbwarn/src/extString.c index abe6728..361afa7 100644 --- a/fbwarn/src/extString.c +++ b/fbwarn/src/extString.c @@ -2,21 +2,21 @@ #include <string.h> #include <ctype.h> -char *strlwr(char *str) +char *strlwr(char *s) { - unsigned char *p = (unsigned char *)str; + unsigned char *p = (unsigned char *)s; while (*p) { *p = tolower((unsigned char)*p); p++; } - return str; + return s; } -char *trim(char *str) +char *trim(char *s) { - char *result = strdup(str); + char *result = strdup(s); char *end; while(isspace((unsigned char)*result)) result++; @@ -32,3 +32,33 @@ char *trim(char *str) return result; } + +char *replaceStr(char *s, char *old, char *replace) { + char* result; + int i, cnt = 0; + size_t newSize = strlen(replace); + size_t oldSize = strlen(old); + + for (i = 0; s[i] != '\0'; i++) { + if (strstr(&s[i], old) == &s[i]) { + cnt++; + i += oldSize - 1; + } + } + + result = (char*)malloc(i + cnt * (newSize - oldSize) + 1); + + i = 0; + while (*s) { + if (strstr(s, old) == s) { + strcpy(&result[i], replace); + i += newSize; + s += oldSize; + } + else + result[i++] = *s++; + } + + result[i] = '\0'; + return result; +}; diff --git a/fbwarn/src/extString.h b/fbwarn/src/extString.h index 19a97c6..66149f1 100644 --- a/fbwarn/src/extString.h +++ b/fbwarn/src/extString.h @@ -1,2 +1,3 @@ -char *strlwr(char *); -char *trim(char *); +char *strlwr(char *s); +char *trim(char *s); +char *replaceStr(char *s, char *old, char *replace); diff --git a/fbwarn/src/parseBVG.c b/fbwarn/src/parseBVG.c index 94795f8..b71b55f 100644 --- a/fbwarn/src/parseBVG.c +++ b/fbwarn/src/parseBVG.c @@ -35,6 +35,11 @@ void BVGDrawCircle(BVGCircle *circle) { } } +void BVGDrawRing(BVGRing *ring) { + Vector2 center = {ring->centerX, ring->centerY}; + DrawRing(center, ring->inRadius, ring->outRadius, ring->startAngle, ring->endAngle, ring->segmets, ring->color); +} + void BVGDrawText(BVGText *text) { DrawText(text->text, text->x, text->y, text->fontSize, text->color); } @@ -53,15 +58,12 @@ FILE *readFile(char *path) { Converts a multiline function call into a single line call */ -char *multiToSingle(char *lines) { +char *multiToSingle(char *s) { // allocating the size of lines is safe since characters arent added - char *result = malloc (strlen(lines)+1); + char *midresult = malloc (strlen(s)+1); char *line; - while ((line = strsep(&lines, "\n")) != NULL) - sprintf(result, "%s%s", result, line); - - free(line); - return result; + midresult = replaceStr(s, "\n", ""); + return replaceStr(midresult, ", ", ","); } /* @@ -246,6 +248,33 @@ BVGCircle *BVGParseCircleSegment(char *argv[7]) { return result; } +BVGRing *BVGParseRing(char *argv[8]) { + BVGRing *result = malloc(sizeof(BVGRing)); + size_t argN = 8; + char *args[argN]; + char *knownArgs[8] = {"x", "y", "innerradius", "outerradius", "startangle", "endangle", "segments", "color"}; + orderArgs(args, argv, argN, knownArgs); + int x, y, segments; + float innerRadius, outerRadius, startAngle, endAngle; + Color *clr; + sscanf(args[0], "%d", &x); + sscanf(args[1], "%d", &y); + sscanf(args[2], "%f", &innerRadius); + sscanf(args[3], "%f", &outerRadius); + sscanf(args[4], "%f", &startAngle); + sscanf(args[5], "%f", &endAngle); + sscanf(args[6], "%d", &segments); + args[7] = args[7]+2; + args[7][strlen(args[7])-1] = '\0'; + clr = parseColorFromHex(args[7]); + result->centerX=x; result->centerY=y; + result->inRadius=innerRadius; result->outRadius=outerRadius; + result->startAngle=startAngle; result->endAngle=endAngle; + result->segmets=segments; + result->color=*clr; + return result; +} + BVGText *BVGParseText(char *argv[5]) { BVGText *result = malloc(sizeof(BVGText)); size_t argN = 5; @@ -275,7 +304,7 @@ BVGText *BVGParseText(char *argv[5]) { /* Takes a BVG function call and calls the according C function */ -void matchFunctionCall(char *call, void *ret) { +void matchFunctionCall(char *call) { printf("Matching %s\n", call); char *funcCall = strdup(call); char *funcName = strsep(&funcCall, "("); @@ -284,12 +313,12 @@ void matchFunctionCall(char *call, void *ret) { printf("Got function %s\n", function); call[strlen(call)-1]='\0'; if (strcmp(function, "rectangle") == 0) { - char *argv[7]; - call = call+strlen("rectangle ("); - collectArgs(argv, call, 7); - BVGRectangle *rect = malloc(sizeof(BVGRectangle)); - rect = BVGParseRectangle(argv); - BVGDrawRectangle(rect); + char *argv[7]; + call = call+strlen("rectangle ("); + collectArgs(argv, call, 7); + BVGRectangle *rect = malloc(sizeof(BVGRectangle)); + rect = BVGParseRectangle(argv); + BVGDrawRectangle(rect); } else if (strcmp(function, "roundedrectangle") == 0) { char *argv[9]; call = call+strlen("roundedrectangle ("); @@ -311,6 +340,13 @@ void matchFunctionCall(char *call, void *ret) { BVGCircle *circle = malloc(sizeof(BVGCircle)); circle = BVGParseCircleSegment(argv); BVGDrawCircle(circle); + } else if (strcmp(function, "ring") == 0) { + char *argv[8]; + call = call+strlen("ring ("); + collectArgs(argv, call, 8); + BVGRing *ring = malloc(sizeof(BVGRing)); + ring = BVGParseRing(argv); + BVGDrawRing(ring); } else if (strcmp(function, "text") == 0) { char *argv[5]; call = call+strlen("text ("); diff --git a/fbwarn/src/parseBVG.h b/fbwarn/src/parseBVG.h index b349687..ea465ca 100644 --- a/fbwarn/src/parseBVG.h +++ b/fbwarn/src/parseBVG.h @@ -4,18 +4,20 @@ #include "raylib.h" #include "BVGTypes.h" -FILE *readFile(char *); -char *multiToSingle(char *); -void matchFunctionCall(char *); -void collectArgs(char *[], char *, int); -void orderArgs(char *[], char *[], int, char *[]); -Color *parseColorFromHex(char *); -bool parseBoolValue(char *); +FILE *readFile(char *path); +char *multiToSingle(char *s); +void matchFunctionCall(char *call); +void collectArgs(char *res[], char *call, int n); +void orderArgs(char *res[], char *argv[], int n, char *knownArgs[]); +Color *parseColorFromHex(char *hex); +bool parseBoolValue(char *hex); // Shape functions -BVGRectangle *BVGParseRectangle(char *[7]); -void BVGDrawRectangle(BVGRectangle*); -BVGRoundedRectangle *BVGParseRoundedRectangle(char *[9]); -void BVGDrawRoundedRectangle(BVGRoundedRectangle*); -BVGCircle *BVGParseCircle(char *[4]); -void BVGDrawCircle(BVGCircle); +BVGRectangle *BVGParseRectangle(char *argv[7]); +void BVGDrawRectangle(BVGRectangle *rectangle); +BVGRoundedRectangle *BVGParseRoundedRectangle(char *argv[9]); +void BVGDrawRoundedRectangle(BVGRoundedRectangle *rectangle); +BVGCircle *BVGParseCircle(char *argv[4]); +void BVGDrawCircle(BVGCircle *circle); +BVGRing *BVGParseRing(char *argv[8]); +void BVGDrawRing(BVGRing *ring); diff --git a/fbwarn/src/warn.c b/fbwarn/src/warn.c index e442643..db2750d 100644 --- a/fbwarn/src/warn.c +++ b/fbwarn/src/warn.c @@ -19,13 +19,15 @@ int main(void) { singleB = multiToSingle(rectB); free(rectBFree); - rectCFree = rectC = strdup("circlesegment (x=300,y=200,radius=100,color='#BE79A7FF',startangle=0.0,endangle=90.0,segments=10)"); + rectCFree = rectC = strdup("circlesegment (x=300, y=200,radius=100,color='#BE79A7FF',startangle=0.0,endangle=90.0,segments=10)"); if (rectC == NULL) return 1; singleC = multiToSingle(rectC); + printf("SingleC %s", rectC); free(rectCFree); - rectDFree = rectD = strdup("text (text='haiii :3',x=300,y=10,size=50,color='#DD98E5FF')"); + rectDFree = rectD = strdup("ring (x=300,y=50,innerradius=20,outerradius=30,startangle=0.0,endangle=360.0,segments=10,color='#DD98E5FF')"); + // rectDFree = rectD = strdup("text (text='haiii :3',x=300,y=10,size=50,color='#DD98E5FF')"); if (rectD == NULL) return 1; singleD = multiToSingle(rectD); |