Example #1
0
newtRef NsSPrintObject(newtRefArg rcvr, newtRefArg r)
{
    newtRefVar	str;

    str = NSSTR("");

	NcStrCat(str, r);

    return str;
}
Example #2
0
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;
}
Example #3
0
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;
}