示例#1
0
        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);
        }
示例#2
0
 /// <summary>
 /// Init constructor of CodeLineNavigator.
 /// </summary>
 public CodeLineNavigator(CodeExtractor codeExtractor, int startLine)
 {
     this.codeExtractor = codeExtractor;
     this.startLine     = startLine;
     currentLine        = startLine;
     firstLine          = ReadLine();
 }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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)));
        }