💾 Archived View for gmi.noulin.net › gitRepositories › ervy › file › utils.c.gmi captured on 2023-01-29 at 11:34:58. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
utils.c (1167B)
1 2 #include "utils.h" 3 #include "math.h" 4 5 char *padMid(char *str, size_t width) { 6 var mid = round((double)(width - lenG(str)) / 2); 7 8 if (lenG(str) > width) { 9 ret dupG(str); 10 } 11 else { 12 var pmid = repeatS(PAD, mid); 13 var pmid2 = repeatS(PAD, mid + ((mid * 2 + lenG(str)) > width ? -1 : 0)); 14 var r = catS(pmid, str, pmid2); 15 freeManyS(pmid, pmid2); 16 ret r; 17 } 18 } 19 20 smallJsont* verifyData(char *data) { 21 22 createAllocateSmallJson(r); 23 24 parseG(r, data); 25 26 var top = getTopTypeG(r); 27 28 if (!eqG(top, "array") or !lenG(r)) goto fail; 29 30 bool allHaveKeyValue = true; 31 32 range(i, lenG(r)) { 33 var d = getG(r, rtSmallDictt, i); 34 if (!d) { 35 allHaveKeyValue = false; 36 break; 37 } 38 if (!hasG(d, "key") or !hasG(d, "value")) { 39 finishG(d); 40 allHaveKeyValue = false; 41 break; 42 } 43 finishG(d); 44 } 45 46 if (!allHaveKeyValue) goto fail; 47 48 ret r; 49 50 fail: 51 logC("Invalid data: %s", data); 52 terminateG(r); 53 ret NULL; 54 } 55 56 size_t maxKeyLen(smallJsont* data) { 57 size_t r = 0; 58 59 iter(data, V) { 60 cast(smallDictt*,v,V); 61 r = maxV(r, lenG(getG(v, rtChar, "key"))); 62 } 63 64 ret r; 65 } 66 67 // vim: set expandtab ts=2 sw=2: