private string Flatten(string s, CodeExtractor extractor) { if (string.IsNullOrWhiteSpace(s)) { return(s); } s = s.Replace("{{", IntermediateOpenSquigleReplacement); EvalFuncs: var funcMatches = DollarStringFunctionExpr.Matches(s); if (funcMatches.Count > 0) { for (int z = 0; z < funcMatches.Count; ++z) { var m = funcMatches[z]; if (StringHelpers.IsSameIgnoreCase(m.Groups["FuncName"].Value, "Layout")) { var pl = m.Groups["ParamList"].Value; int templateId = int.Parse(pl); s = s.Replace(m); var layoutCode = extractor(Finder.FindSettingsById(templateId)); m = FindFirstFunction(layoutCode, "RenderBody"); s = layoutCode.Replace(m, s); goto EvalFuncs; } } } s = s.Replace(IntermediateOpenSquigleReplacement, "{{"); return(s); }
/// <summary> /// Init constructor of CodeLineNavigator. /// </summary> public CodeLineNavigator(CodeExtractor codeExtractor, int startLine) { this.codeExtractor = codeExtractor; this.startLine = startLine; currentLine = startLine; firstLine = ReadLine(); }
private void ExtractToTvf(object sender, EventArgs e) { try { var dte = (DTE)GetService(typeof(DTE)); if (dte.ActiveDocument == null) { return; } var doc = dte.ActiveDocument; var text = GetCurrentText(); if (String.IsNullOrEmpty(text)) { return; } var newText = new CodeExtractor(text).ExtractIntoFunction(); if (text != newText && !String.IsNullOrEmpty(newText)) { doc.Activate(); SetCurrentText(newText); OutputPane.WriteMessage("Code extracted into an inline table valued function"); } } catch (Exception ex) { OutputPane.WriteMessage("Error extracting code into a TVF: {0}", ex.Message); } }
public string Evaluate(Creative creative, CodeExtractor extractor, CompiledContext context) { Requires.NonNull(creative, nameof(creative)); Requires.NonNull(extractor, nameof(extractor)); Requires.NonNull(context, nameof(context)); var c = context.Config; Requires.Equals(creative.TemplateEngineType, TemplateEngineTypes.DollarString); var s = extractor(creative.CreativeSettings) ?? ""; s = Flatten(s, extractor); s = s.Replace("{{", IntermediateOpenSquigleReplacement); s = DollarStringIndexerExpr.Replace(s, delegate(Match m) { var indexerName = m.Groups["IndexerName"].Value; var skey = Stuff.CoalesceStrings(m.Groups["SingleQuoteStringKey"]?.Value, m.Groups["DoubleQuoteStringKey"]?.Value); switch (indexerName) { case "R": var rv = ReusableValueByKey[skey]; return(rv?.Value ?? ""); } return(""); }); s = DollarStringTokenExpr.Replace(s, delegate(Match m) { var fieldKey = m.Groups[1].Value.Replace('.', ':'); return(c[fieldKey]); }); s = s.Replace(IntermediateOpenSquigleReplacement, "{"); return(s); }
private Sample LoadSample(SampleSuite suite, MethodInfo method, string fileSourceCode) { DescriptionAttribute descriptionAttribute = (DescriptionAttribute)Attribute.GetCustomAttribute(method, typeof(DescriptionAttribute)); TitleAttribute titleAttribute = (TitleAttribute)Attribute.GetCustomAttribute(method, typeof(TitleAttribute)); return(new Sample(suite, method, (titleAttribute != null) ? titleAttribute.Title : "", (descriptionAttribute != null) ? descriptionAttribute.Description : "", CodeExtractor.GetCodeBlock(fileSourceCode, "void " + method.Name))); }