#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 = format[i]; if(c == "%") { if(inPlaceholder == 0) { inPlaceholder = 1; } else if(inPlaceholder == 1) { if(GetLength(placeholderType) == 0) { 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 ..= c; } else if(inPlaceholder == 1) { placeholderType ..= c; } else if(inPlaceholder == 2) { 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; }