/// <summary> /// Convierte un texto con el contenido de las variables /// </summary> public string EvaluateText(ContextModel context, string text, out string error) { TableVariableModel variables = context.GetVariablesRecursive(); string result = ""; // Inicializa los argumentos de salida error = string.Empty; // Mientras quede algo de texto por interpretar ... while (!string.IsNullOrWhiteSpace(text) && string.IsNullOrEmpty(error)) { int start = text.IndexOf(StartVariable); // Interpreta la variable if (start >= 0) { int end; // Añade el inicio al resultado result += text.Left(start); // Quita el token de inicio de la variable del texto text = text.From(start + EndVariable.Length); // Obtiene el índice de la parte final de la variable end = text.IndexOf(EndVariable); // Si se ha encontrado un nombre de variable if (end >= 0) { string variable = text.Left(end); string format = GetFormat(variable); VariableModel symbol; // Quita el nombre de la variable del texto text = text.From(end + EndVariable.Length); // Si se ha encontrado un formato se quita del nombre de la cadena if (!format.IsEmpty()) { variable = variable.Left(variable.Length - format.Length - 1); } // Interpreta la cadena symbol = variables.Get(variable); // Si se ha encontrado, se añade el mismo valor al resultando if (symbol == null) { error = $"Can't find the variable {variable}"; } else { result += ConvertStringValue(symbol.Value, format); } } else //... no hay cadena de fin de variable se añade al resultado el comienzo de variable { result += StartVariable; } } else { result += text; text = ""; } } // Devuelve el contenido return(result); }