public override bool TryEvaluate(TextTemplateProcessingContext cx, out object result)
        {
            result = (object)null;

            // if was able to evalue condition, check if it is true, if it is the process True Outcome, otherwise return empty string
            if(TryEvaluateInternal(cx, SubstitutionPattern, Functions, out result))
            {
                if (result is bool && (bool)result == true)
                {
                    if (TryEvaluateInternal(cx, TrueOutcomeSubstitutionPattern, TrueOutcomeProcessFunctions, out result))
                    {
                        return true;
                    }
                    else
                    {
                        Diagnostics.Log.Information(() => "Unable to process True branch for placeholder '{0}'".FormatWith(RawValue));
                        return false;
                    }
                }
                else
                {
                    result = "";
                    return true;
                }
            }
            else
            {
                result = null;
                return false;
            }
        }
 public abstract object EvaluateOutput(TextTemplateProcessingContext cxl);
        public static bool TryEvaluateInternal(
            TextTemplateProcessingContext cx,
            string substitutionPattern,

#if UPTO_DOTNET40
        IList<FunctionDefinition>
 public virtual bool TryEvaluate(TextTemplateProcessingContext cx, out object result)
 {
     return TryEvaluateInternal(cx, SubstitutionPattern, Functions, out result);
 }
 public override object EvaluateOutput(TextTemplateProcessingContext cx)
 {
     return Output;
 }