/// <summary> /// Evaluate a function. /// </summary> /// <param name="sourceLineNumbers">The source line information for the function.</param> /// <param name="prefix">The function prefix.</param> /// <param name="function">The function name.</param> /// <param name="args">The arguments for the function.</param> /// <returns>The function value or null if the function is not defined.</returns> public string EvaluateFunction(SourceLineNumberCollection sourceLineNumbers, string prefix, string function, string[] args) { if (String.IsNullOrEmpty(prefix)) { throw new ArgumentNullException("prefix"); } if (String.IsNullOrEmpty(function)) { throw new ArgumentNullException("function"); } switch (prefix) { case "fun": switch (function) { case "AutoVersion": // Make sure the base version is specified if (args.Length == 0 || args[0].Length == 0) { throw new WixException(WixErrors.InvalidPreprocessorFunctionAutoVersion(sourceLineNumbers)); } // Build = days since 1/1/2000; Revision = seconds since midnight / 2 DateTime now = DateTime.Now.ToUniversalTime(); TimeSpan tsBuild = now - new DateTime(2000, 1, 1); TimeSpan tsRevision = now - new DateTime(now.Year, now.Month, now.Day); return(String.Format("{0}.{1}.{2}", args[0], (int)tsBuild.TotalDays, (int)(tsRevision.TotalSeconds / 2))); // Add any core defined functions here default: return(null); } default: PreprocessorExtension extension = (PreprocessorExtension)this.extensionsByPrefix[prefix]; if (null != extension) { try { return(extension.EvaluateFunction(prefix, function, args)); } catch (Exception e) { throw new WixException(WixErrors.PreprocessorExtensionEvaluateFunctionFailed(sourceLineNumbers, prefix, function, String.Join(",", args), e.Message)); } } else { return(null); } } }
/// <summary> /// Evaluate a function. /// </summary> /// <param name="sourceLineNumbers">The source line information for the function.</param> /// <param name="prefix">The function prefix.</param> /// <param name="function">The function name.</param> /// <param name="args">The arguments for the function.</param> /// <returns>The function value or null if the function is not defined.</returns> public string EvaluateFunction(SourceLineNumberCollection sourceLineNumbers, string prefix, string function, string[] args) { if (null == prefix) { throw new ArgumentNullException("prefix"); } if (null == function) { throw new ArgumentNullException("name"); } if (0 == function.Length) { throw new ArgumentException("Empty function call.", "function"); } switch (prefix) { case "fun": switch (function) { // Add any core defined functions here default: return(null); } default: PreprocessorExtension extension = (PreprocessorExtension)this.extensionsByPrefix[prefix]; if (null != extension) { try { return(extension.EvaluateFunction(prefix, function, args)); } catch (Exception e) { throw new WixException(WixErrors.PreprocessorExtensionEvaluateFunctionFailed(sourceLineNumbers, prefix, function, String.Join(",", args), e.Message)); } } else { return(null); } } }