newtRef NsSPrintObject(newtRefArg rcvr, newtRefArg r) { newtRefVar str; str = NSSTR(""); NcStrCat(str, r); return str; }
newtRef NcStringer(newtRefArg r) { newtRef * slots; newtRefVar str; uint32_t len; uint32_t i; if (! NewtRefIsArray(r)) return NewtThrow(kNErrNotAnArray, r); str = NSSTR(""); len = NewtArrayLength(r); slots = NewtRefToSlots(r); for (i = 0; i < len; i++) { NcStrCat(str, slots[i]); } return str; }
newtRef NewtParamStr(char * baseStr, size_t baseStrLen, newtRefArg paramStrArray, bool ifthen) { newtRefVar dstStr; newtRefVar r; size_t fpos = 0; size_t fst = 0; size_t len; size_t n; size_t truePos; size_t trueLen; size_t falsePos; size_t falseLen; char * found; char c; dstStr = NewtMakeString("", false); do { found = memchr(&baseStr[fst], '^', baseStrLen - fst); if (found == NULL) break; c = found[1]; len = found - (baseStr + fpos); NewtStrCat2(dstStr, &baseStr[fpos], len); fpos += len; fst = fpos + 1; if ('0' <= c && c <= '9') { fpos += 2; fst = fpos; r = NewtGetArraySlot(paramStrArray, c - '0'); if (NewtRefIsNotNIL(r)) { NcStrCat(dstStr, r); } } else if (ifthen && c == '?') { c = found[2]; if ('0' <= c && c <= '9') { n = c - '0'; truePos = fpos + 3; found = memchr(&baseStr[truePos], '|', baseStrLen - truePos); if (found != NULL) { falsePos = found + 1 - baseStr; trueLen = falsePos - truePos - 1; found = memchr(&baseStr[falsePos], '|', baseStrLen - falsePos); if (found != NULL) { fpos = found + 1 - baseStr; } else { fpos = baseStrLen; } falseLen = fpos - falsePos - 1; } else { trueLen = baseStrLen - truePos; falsePos = baseStrLen; falseLen = 0; fpos = baseStrLen; } fst = fpos; r = NewtGetArraySlot(paramStrArray, n); if (NewtRefIsNotNIL(r)) { r = NewtParamStr(&baseStr[truePos], trueLen, paramStrArray, false); NcStrCat(dstStr, r); } else { if (falsePos == baseStrLen) break; r = NewtParamStr(&baseStr[falsePos], falseLen, paramStrArray, false); NcStrCat(dstStr, r); } } } } while(true); len = baseStrLen - fpos; if (0 < len) { NewtStrCat2(dstStr, &baseStr[fpos], len); } return dstStr; }