From 9b5d0a3ddf41e686439dcda1edfe11eee51c3b07 Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Thu, 5 Jan 2017 16:19:56 +0100 Subject: Initial --- DTFormatN.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 DTFormatN.c (limited to 'DTFormatN.c') diff --git a/DTFormatN.c b/DTFormatN.c new file mode 100644 index 0000000..0f9481b --- /dev/null +++ b/DTFormatN.c @@ -0,0 +1,87 @@ +#strict 2 + +global func FormatN(string format, array placeholders, array items) +{ + if(!items && GetType(placeholders[0]) == C4V_Array) + { + items = CreateArray(GetLength(placeholders)); + for(var i = 0; i < GetLength(placeholders); ++i) + { + items[i] = placeholders[i][1]; + placeholders[i] = placeholders[i][0]; + } + } + + var ret = ""; + + var inPlaceholder = 0; + var placeholderType = ""; + var placeholderPart = ""; + + for(var i = 0; i < GetLength(format); ++i) + { + var c = GetChar(format, i); + if(c == 37) // % + { + if(inPlaceholder == 0) + { + inPlaceholder = 1; + } + else if(inPlaceholder == 1) + { + if(c == 37 && GetLength(placeholderType) == 0) // % + { + ret = Format("%s%%", ret); + inPlaceholder = 0; + } + else + { + inPlaceholder = 2; + } + } + else if(inPlaceholder == 2) + { + var index = GetIndexOf2(placeholderPart, placeholders); + if(index == -1) + { + FatalError(Format("FormatN: Unkown placeholder \"%s\"", placeholderPart)); + return 0; + } + + ret = Format(Format("%%s%%%s", placeholderType), ret, items[index]); + + inPlaceholder = 0; + placeholderType = ""; + placeholderPart = ""; + } + } + else + { + if(inPlaceholder == 0) + { + ret = Format("%s%c", ret, c); + } + else if(inPlaceholder == 1) + { + placeholderType = Format("%s%c", placeholderType, c); + } + else if(inPlaceholder == 2) + { + placeholderPart = Format("%s%c", placeholderPart, c); + } + } + } + + if(inPlaceholder == 1) + { + FatalError(Format("FormatN: Placeholder not finished at end of format-string: \"%%%s\"", placeholderType)); + return 0; + } + else if(inPlaceholder == 2) + { + FatalError(Format("FormatN: Placeholder not finished at end of format-string: \"%%%s%%%s\"", placeholderType, placeholderPart)); + return 0; + } + + return ret; +} -- cgit v1.2.3-54-g00ecf