static void Basic() { StringTemplate stringTemplate = new StringTemplate("hello <data>"); stringTemplate.Add("data", "world"); Console.WriteLine(stringTemplate.Render()); }
//= null public static string Apply(string template, Dictionary<string, object> @params ) { StringTemplate st = new StringTemplate(template); AddDefaultAttributes(st); if (@params != null) AddAttributes(st, @params); return st.ToString(); }
public StringTemplateView(StringTemplate template) { //null check if (template == null) throw new ArgumentNullException("template"); //set template _template = template; }
public StringTemplateView(string templateString) { //null check if (string.IsNullOrEmpty(templateString)) throw new ArgumentNullException("templateString"); //set template _template = new StringTemplate(StringTemplateViewEngine.Group, templateString); }
static void TestStringTemplate() { string text = "$entity.Account$您好!<br/> 请点击连接重置您的秘密<br><a href=\"$url$\">$url$</a>"; StringTemplate st = new StringTemplate(text); st.SetAttribute("entity", new Demo() { Account = "fengpengbin" }); st.SetAttribute("url", "http://www.aporeboy.com/vail"); Console.WriteLine(st.ToString()); }
public string Populate(ParameterSet parameterSet) { var t = new StringTemplate() { Text = Text, }; return t.Populate(parameterSet.Parameters); }
public static string Generate(string input, Dictionary<string, object> data) { var template = new StringTemplate(input); foreach (var d in data) template.SetAttribute(d.Key, d.Value); string result = template.ToString(); ; template.Reset(); data.Clear(); template = null; return result; }
/// <summary> /// 把实体的数据融合到模板中,并返回融合结果,会保留数据的空格,换行,减少空间占用 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity">实体类</param> /// <param name="templateNames">模板名称,可以有多级,多级用“.”分隔,对于小模板只需提供节点名称就可以了</param> /// <returns></returns> public string EntityToStr <T>(T entity, string templateName) { StringTemplate stringTemplate = new StringTemplate(_cache[templateName]); if (_attrRendererMap.ContainsKey(templateName)) { foreach (KeyValuePair <Type, IAttributeRenderer> keyVal in _attrRendererMap[templateName]) { stringTemplate.RegisterRenderer(keyVal.Key, keyVal.Value); } } stringTemplate.SetAttribute("entity", entity); return(stringTemplate.ToString().Trim()); }
public Template(string name) { var assembly = Assembly.GetCallingAssembly(); var stream = assembly.GetManifestResourceStream(name); if (stream == null) { var candidates = string.Join(", ", assembly.GetManifestResourceNames()); throw new FileNotFoundException(string.Format("cannot find embedded resource {0} in assembly {1}, candidate templates include [{2}]", name, assembly.GetName(), candidates)); } var contents = new StreamReader(stream).ReadToEnd(); template = new StringTemplate(contents); }
public string Export(IList dbObjects, string templatePath) { StringTemplate template = new StringTemplate(); var text = File.ReadAllText(templatePath); //remove all tabs - it used only to format template code, not output code template.Template = text.Replace("\t", ""); template.SetAttribute("dbObjects", dbObjects); var output = template.ToString(); return output; }
public virtual void WriteTreeTestFile(string parserName, string treeParserName, string lexerName, string parserStartRuleName, string treeParserStartRuleName) { StringTemplate outputFileST = GetTreeTestFileTemplate(); StringTemplate createParserST = GetParserCreationTemplate(); outputFileST.SetAttribute("createParser", createParserST); outputFileST.SetAttribute("parserName", parserName); outputFileST.SetAttribute("treeParserName", treeParserName); outputFileST.SetAttribute("lexerName", lexerName); outputFileST.SetAttribute("parserStartRuleName", parserStartRuleName); outputFileST.SetAttribute("treeParserStartRuleName", treeParserStartRuleName); WriteTestFile(outputFileST.ToString()); }
public void StringTemplatStringAngleBracketsTest() { target = new StringTemplate("<hello> <world>"); target.Add("hello", "hello"); target.Add("<world>", "world"); Assert.AreEqual(2, target.ElementData.Count); Assert.IsTrue(target.ElementData.ContainsKey("hello")); Assert.AreEqual("hello", target.ElementData["hello"]); Assert.IsTrue(target.ElementData.ContainsKey("world")); Assert.AreEqual("world", target.ElementData["world"]); Assert.AreEqual("hello world", target.Render()); }
public void Test_HiddenMembers() { DerivedValues values = new DerivedValues { X = "hello", Y = 42 }; BaseValues bValues = values; bValues.X = 42; string expected = $"{values.X} {values.Y}"; string actual = StringTemplate.Format("{X} {Y}", values); Assert.Equal(expected, actual); }
public void EvalTemplateTest() { var obj = new { Name = "Jane" }; var template = new StringTemplate("Hello {name}"); Assert.AreEqual("Hello World", template.Format(new { name = "World" })); template = new StringTemplate("{greeting} {name}"); Assert.AreEqual("Hello World", template.Format(new { greeting = "Hello", name = "World" })); var value = "Hello {name}".Tmpl(new { name = "World" }); Assert.AreEqual("Hello World", value); }
private string GetCurrentFilePath() { var result = StringTemplate.Format(CultureInfo.CurrentCulture, FilePathTemplate, delegate(string name, out object?value) { if (!_systemValueProvider.TryGetArgumentValue(name, out value)) { value = "{" + name + "}"; } return(true); }); return(result); }
private string GetBreakUpText(Client client1, Client client2) { if (client1.RelationshipHealth <= 0 && client2.RelationshipHealth <= 0) { return(StringTemplate.ParseAndReplaceTemplate(mutualBreakUp, client1, client2)); } if (client1.RelationshipHealth <= 0) { return(StringTemplate.ParseAndReplaceTemplate(oneSidedBreakUp, client2, client1)); } // Must be client2 that broke up, return that description. return(StringTemplate.ParseAndReplaceTemplate(oneSidedBreakUp, client1, client2)); }
/// <inheritDoc/> public override string ExportPublicationToHtmlDocument(Publication publication, string templatePath, string htmlPath) { StringTemplate stringTemplate = LoadHtmlTemplate(publication, templatePath); JournalArticle journalArticle = publication.JournalArticle; stringTemplate.SetAttribute("journaltitle", journalArticle.JournalTitle); stringTemplate.SetAttribute("number", journalArticle.Number); stringTemplate.SetAttribute("pages", journalArticle.FromPage == journalArticle.ToPage ? (journalArticle.FromPage + "") : (journalArticle.FromPage + " - " + journalArticle.ToPage)); stringTemplate.SetAttribute("identification", journalArticle.ISSN); return(SaveHtmlDocument(stringTemplate, htmlPath)); }
public void StringTemplateValueConverter_Works_With_FormatProvider_And_Return_Type_Change() { var ticks = 1337; var values = new ValuesForFormatProvider { DateTimeConvertedToTicks = new DateTime(ticks) }; var formatProvider = new NumberFormatInfo { CurrencySymbol = "piasses", CurrencyPositivePattern = 3 /* symbol at the end, with a space */ }; var expectedFormattedTicks = string.Format(formatProvider, "{0:C0}", ticks); var actual = StringTemplate.Format("{DateTimeConvertedToTicks:C0}", values, true, formatProvider); Assert.Equal(expectedFormattedTicks, actual); }
public virtual void AddElseIfSubtemplate(ASTExpr conditionalTree, StringTemplate subtemplate) { if (_elseIfSubtemplates == null) { _elseIfSubtemplates = new List <ElseIfClauseData>(); } ElseIfClauseData d = new ElseIfClauseData() { expr = conditionalTree, st = subtemplate }; _elseIfSubtemplates.Add(d); }
public void Generate(string database, string table, string className, string rutaDestino, string rutaTemplate) { StreamReader sr = new StreamReader(rutaTemplate); string template = sr.ReadToEnd(); sr.Close(); TemplateContent content = GenerateContent(database, table, className); string renderedText = StringTemplate.Render(template, content); // Write the string array to a new file using (StreamWriter outputFile = new StreamWriter(rutaDestino)) { outputFile.Write(renderedText); } }
private bool DocShortCut(KeyEventArgs e) { var _snippet = CodeLib.Instance.CodeSnippets.GetByShortCut(e.KeyData).FirstOrDefault(); if (_snippet != null) { StringTemplate stringtemplate = new StringTemplate(); string result = stringtemplate.Format(_snippet.GetCode(), _tb.SelectedText); _tb.SelectedText = result; _tb.Focus(); return(true); } return(false); }
string WriteRootConstants(ShaderOutputContext ctx, TemplateGroup group) { StringBuilder res = new StringBuilder(); List <UniformConstant> consts = ctx.UniformConstants; foreach (var c in consts) { StringTemplate cBufferTemplate = group.GetInstanceOf("uniformConstant"); cBufferTemplate.Add("name", c.Name); cBufferTemplate.Add("reg", c.Bindpoint.Reg.ToString()); cBufferTemplate.Add("space", c.Bindpoint.Space.ToString()); res.Append(cBufferTemplate.Render() + '\n'); } return(res.ToString()); }
public static string StringTemp(string filename, object data) { var path = HttpContext.Current.Server.MapPath("~/"); var filepath = Path.Combine(path, filename); var result = string.Empty; using (StreamReader reader = new StreamReader(filepath)) { string sttemplate = reader.ReadToEnd(); StringTemplate template = new StringTemplate(sttemplate); template.SetAttribute("item", data); result = template.ToString(); } return(result); }
string WriteVertexLayouts(ShaderOutputContext ctx, TemplateGroup group) { List <VertexLayoutMember> vertexLayoutMembers = ctx.VertLayout.Members; StringBuilder res = new StringBuilder(); foreach (var vlm in vertexLayoutMembers) { StringTemplate vertexLayoutMemberTemplate = group.GetInstanceOf("vlayoutmember"); vertexLayoutMemberTemplate.Add("semantic", m_semanticToKiotoSemantic[vlm.Semantic]); vertexLayoutMemberTemplate.Add("index", vlm.SemanticIndex); vertexLayoutMemberTemplate.Add("format", m_typeToKiotoFormat[vlm.Type]); res.Append(vertexLayoutMemberTemplate.Render() + '\n'); } return(res.ToString()); }
public override string RenderContent() { int recordCount = 0; IEnumerable <IDictionary <string, object> > entities = GetData(); if (entities.IsNullOrEmpty()) { return(EmptyTemplate); } StringBuilder result = new StringBuilder(); if (AllowPaging) { Pager.TargetId = Id; if (PagerPosition == PagerPosition.Top || PagerPosition == PagerPosition.Both) { result.AppendLine(Pager.Render()); } } Pager.RecordCount = recordCount; var content = new List <string>(); entities.ForEach((entity) => { StringTemplate query = new StringTemplate(ItemTemplate); query.SetAttribute(entity); content.Add(query.ToString()); }); result.AppendLine(string.Join(SeperatorTemplate, content.ToArray())); if (AllowPaging) { if (PagerPosition == PagerPosition.Bottom || PagerPosition == PagerPosition.Both) { result.AppendLine(Pager.Render()); } } if (SubContainerTag != SubContainerTag.none) { var subContainer = new TagBuilder(SubContainerTag.ToString()); if (!SubContainerCssClass.IsNullOrEmpty()) { subContainer.AddCssClass(SubContainerCssClass); } subContainer.InnerHtml = result.ToString(); return(subContainer.ToString()); } return(result.ToString()); }
public void StringTemplateValueConverter_Works_With_FormatProvider() { var values = new ValuesForFormatProvider { DateTimeConvertedWithFortyTwoDaysAdded = DateTime.Today }; var expectedConvertedDate = values.DateTimeConvertedWithFortyTwoDaysAdded + TimeSpan.FromDays(42); var cultures = new[] { CultureInfo.InvariantCulture, null, new CultureInfo("fr-FR") }; foreach (var culture in cultures) { string expected = expectedConvertedDate.ToString("D", culture); string actual = StringTemplate.Format("{DateTimeConvertedWithFortyTwoDaysAdded:D}", values, true, culture); Assert.Equal(expected, actual); } }
public override string TransformRange(string stringToTransform, string commandContent, Dictionary <string, string> variables) { var split = commandContent.Split(',').ToList(); string variableName = split[0]; string value = split[1]; if (variables.ContainsKey(variableName)) { if (variables[variableName] == value) { return(stringToTransform); } return(""); } return(StringTemplate.CreateIfBlock(variableName, value, stringToTransform)); // The variable is not set yet, so we need to keep the if command until it is ready to be processed. }
public void ListIterator_SingleItem() { // Arrange var template = new StringTemplate("$user:{ u | $u.FirstName$ is a super user? $u.IsSuperUser$. But his last name is $u.LastName$.}$"); template.SetAttribute("user", new { FirstName = "Ian", LastName = "Robinson", IsSuperUser = false }); // Act var renderedText = template.ToString(); // Assert Assert.AreEqual(renderedText, "Ian is a super user? False. But his last name is Robinson."); }
public void ListIterator_MultipleItems() { // Arrange var template = new StringTemplate("$user:{ u | <p>$u.FirstName$ is a super user? $u.IsSuperUser$. But his last name is $u.LastName$.</p>}$"); var user = new { FirstName = "Ian", LastName = "Robinson", IsSuperUser = false }; var userList = (new[] {user}).ToList(); userList.Add(new { FirstName = "Gertrude", LastName = "Schmuckbucket", IsSuperUser = true}); template.SetAttribute("user", userList); // Act var renderedText = template.ToString(); // Assert Assert.AreEqual(renderedText, "<p>Ian is a super user? False. But his last name is Robinson.</p><p>Gertrude is a super user? True. But his last name is Schmuckbucket.</p>"); }
/// <inheritDoc/> public override string ExportPublicationToHtmlDocument(Publication publication, string templatePath, string htmlPath) { StringTemplate stringTemplate = LoadHtmlTemplate(publication, templatePath); ConferenceArticle conferenceArticle = publication.ConferenceArticle; stringTemplate.SetAttribute("booktitle", conferenceArticle.BookTitle); stringTemplate.SetAttribute("address", conferenceArticle.Address); stringTemplate.SetAttribute("publisher", conferenceArticle.Publisher); stringTemplate.SetAttribute("pages", conferenceArticle.FromPage == conferenceArticle.ToPage ? (conferenceArticle.FromPage + "") : (conferenceArticle.FromPage + " - " + conferenceArticle.ToPage)); stringTemplate.SetAttribute("identification", !string.IsNullOrEmpty(conferenceArticle.ISBN) ? ("ISBN " + conferenceArticle.ISBN) : ("ISSN" + conferenceArticle.ISSN)); return(SaveHtmlDocument(stringTemplate, htmlPath)); }
public void FormLetterTest() { var letter = new Letter() { Greeting = "Hello" }; letter.Recipient.Name = "Johnny"; letter.Sent = DateTime.Parse("3/8/2016"); letter.Revision = 12345; var formLetter = new StringTemplate(My.Resources.FormLetter); var value = formLetter.Format(letter); Debug.WriteLine(value); Assert.IsTrue(value.Contains("Hello Johnny 5.0,")); }
private static string GetRepositoryAbsolutePath(RepositoryInfo repo, string pathTemplate = DefaultRepoPathTemplate) { if (string.IsNullOrEmpty(pathTemplate)) { pathTemplate = DefaultRepoPathTemplate; } var relativeRepoPath = StringTemplate.Compile(pathTemplate, new Dictionary <string, string> { { "ProviderName", ProviderName }, { "Namespace", repo.Namespace.ToLowerInvariant() }, { "Slug", repo.Slug.ToLowerInvariant() } }); return(Path.GetFullPath(relativeRepoPath)); }
public void StringTemplateConstructorTemplateNullTest() { try { target = new StringTemplate(null); Assert.Fail("No exception thrown"); } catch (ArgumentNullException exception) { Assert.AreEqual("template", exception.ParamName); } catch { Assert.Fail("ArgumentNullException not thrown"); } }
public static string Generate(string input, Dictionary <string, object> data) { var template = new StringTemplate(input); foreach (var d in data) { template.SetAttribute(d.Key, d.Value); } string result = template.ToString(); ; template.Reset(); data.Clear(); template = null; return(result); }
public void DictionaryTest() { var dict = new Dictionary <string, object> { { "Name", "World" }, { "Greeting", "Hello" } }; var template = new StringTemplate("{Greeting} {Name}"); var actual = template.Format(dict); Assert.AreEqual("Hello World", actual); template = new StringTemplate("{Test.Greeting} {Test.Name}"); var args = new { Test = dict }; actual = template.Format(args); Assert.AreEqual("Hello World", actual); }
static void WriteLevel(WebGLLevel level, Stream outStream) { if (EditorUtility.DisplayCancelableProgressBar("Exporting Level", "Writing JSON", 1.0f)) { throw new Exception("User canceled export"); } // Write out JSON StringTemplateGroup templateGroup = new StringTemplateGroup("MG", templatePath, typeof(DefaultTemplateLexer)); StringTemplate animTemplate = templateGroup.GetInstanceOf("WebGLLevel"); animTemplate.SetAttribute("level", level); string content = animTemplate.ToString(); Byte[] bytes = new UTF8Encoding(true).GetBytes(CleanJSON(content)); outStream.Write(bytes, 0, bytes.Length); }
/// <inheritdoc/> public override void Parse(DecodedMetar decodedMetar) { var pressure = new StringBuilder(); if (decodedMetar.Pressure != null) { pressure.Append( StringTemplate.Format( strings.PressureDetails, new { hectoPascal = Math.Round(decodedMetar.Pressure.GetConvertedValue(Value.Unit.HectoPascal)), mercuryInch = Math.Round(decodedMetar.Pressure.GetConvertedValue(Value.Unit.MercuryInch)) }, false)); } Label = strings.PressureLabel; Message = pressure.ToString(); }
private static Package <ITemplate> CreateSingleFile(string name, string ext, string source) { return(new Package <ITemplate>(new PackageFileTemplate( new StringTemplate( StringTemplate.GetVariableTemplate("name") + $".{ext}", new Variable[] { new Variable("name").Required() } ) ).UseTemplate(new TextFileTemplate(new StringTemplate(source)))) { Metadata = new PackageMetadata { Name = name, Author = nameof(CodeRunner), CreationTime = DateTimeOffset.Now, Version = Assembly.GetAssembly(typeof(FileTemplates))?.GetName().Version ?? new Version() } }); }
/// <summary> /// Enqueues a mail message. /// </summary> protected virtual async Task EnqueueAsync(ProjectItem project, ContactItem from, ContactItem to, MailMessageItem mailMessage, PropertyDictionary placeholders, CancellationToken cancellationToken) { Debug.Assert(project != null); Debug.Assert(from != null); Debug.Assert(to != null); Debug.Assert(mailMessage != null); Debug.Assert(placeholders != null); bool hasSubject = !string.IsNullOrEmpty(mailMessage.Subject); bool hasContent = !string.IsNullOrEmpty(mailMessage.Body); string subject = null; string content = null; if (hasSubject || hasContent) { placeholders = new PropertyDictionary(placeholders); placeholders.AddIfNotExists(StringTemplate.IdentityIdProperty, to.Id); placeholders.AddIfNotExists(MailResources.MailHeaderFrom, from); placeholders.AddIfNotExists(MailResources.MailHeaderTo, to); var immutablePlaceholders = placeholders.ToImmutableDictionary(); if (hasSubject) { subject = await StringTemplate.InterpolateAsync(mailMessage.Subject, immutablePlaceholders, cancellationToken); } if (hasContent) { content = await StringTemplate.InterpolateAsync(mailMessage.Body, immutablePlaceholders, cancellationToken); } } BackgroundJob.Enqueue <MailJobClient>(job => job.Send( new MailJobMessage { MessageId = mailMessage.Id, ProjectId = project.Id, From = new MailJobAddress(from.Id, from.Email.Address, from.Email.Name), To = new MailJobAddress(to.Id, to.Email.Address, to.Email.Name), Subject = subject, Body = content, Users = _userIds })); }
public void Generate(string path) { StringTemplateGroup group = new StringTemplateGroup("myGroup", @".\Templet"); StringTemplate st = group.GetInstanceOf("Home"); int ID = 1; List <String> allMethodSigniture = new List <string>(); foreach (var testSummary in AllTestSummary) { string methodSignature = testSummary.GetMethodSignature(); st.SetAttribute("IDNum", ID++); st.SetAttribute("MethodSignature", methodSignature); var method = testSummary.Method; var methodString = GetEntireMethodString(method); st.SetAttribute("SourceCode", methodString); bool bStartTests = false; if (testSummary.SwumSummary.StartsWith("test")) { bStartTests = true; } st.SetAttribute("NotStartTests", !bStartTests); st.SetAttribute("SwumDesc", testSummary.SwumSummary.ToLower()); st.SetAttribute("MethodBodyDesc", testSummary.GetBodyDescriptions()); allMethodSigniture.Add(methodSignature); } allMethodSigniture.Sort(); //hyper index foreach (var ms in allMethodSigniture) { st.SetAttribute("MethodLinkID", ms); } //st.SetAttribute("Message", "hello "); String result = st.ToString(); // yields "int x = 0;" //Console.WriteLine(result); StreamWriter writetext = new StreamWriter(path); writetext.WriteLine(result); writetext.Close(); }
public void NestedProperties() { // Arrange IDictionary<string, object> ret = new Dictionary<string, object>(); ret["elem1"] = true; ret["elem2"] = false; var nestedObj = new Dictionary<string, object>(); nestedObj["nestedProp"] = 100; ret["elem3"] = nestedObj; var template = new StringTemplate("$elem1$ or $elem2$ and value: $elem3.nestedProp$") { Attributes = ret }; // Act var renderedText = template.ToString(); // Assert Assert.AreEqual(renderedText, "True or False and value: 100"); }
protected virtual int WriteSubTemplate(StringTemplate self, IStringTemplateWriter @out, StringTemplate subtemplate) { /* To evaluate the IF chunk, make a new instance whose enclosingInstance * points at 'self' so get attribute works. Otherwise, enclosingInstance * points at the template used to make the precompiled code. We need a * new template instance every time we exec this chunk to get the new * "enclosing instance" pointer. */ StringTemplate s = subtemplate.GetInstanceOf(); s.EnclosingInstance = self; // make sure we evaluate in context of enclosing template's // group so polymorphism works. :) s.Group = self.Group; s.NativeGroup = self.NativeGroup; return(s.Write(@out)); }
public override StringTemplate GetParserCreationTemplate() { StringTemplate createParserST = new StringTemplate( " Profiler2 profiler = new Profiler2();\n" + " $parserName$ parser = new $parserName$(tokens,profiler);\n" + " profiler.setParser(parser);\n" ); if ( !Debug ) { createParserST = new StringTemplate( " $parserName$ parser = new $parserName$(tokens);\n" ); } return createParserST; }
public static void AddAttributes(StringTemplate st, Dictionary<string, object> @params) { foreach(string key in @params.Keys) { object val = @params[key]; if (val != null) { if (val is string && String.IsNullOrEmpty(val as string)) continue; /* if (val is ArrayList) { //st.SetAttribute(key, (val as ArrayList).ToArray()); ArrayList al = val as ArrayList; foreach (object o in al) st.SetAttribute(key, o); } else */ st.SetAttribute(key, val); } } }
public void StringTemplatAddDuplicateSameValuesTest() { target = new StringTemplate(String.Empty); target.Add("test", "one"); try { target.Add("test", "one"); Assert.Fail("No exception thrown"); } catch (ArgumentException exception) { Assert.AreEqual("Element has already been added.\r\nParameter name: element", exception.Message); Assert.AreEqual("element", exception.ParamName); } catch { Assert.Fail("ArgumentException not thrown"); } }
public override StringTemplate GetLexerTestFileTemplate() { StringTemplate outputFileST = new StringTemplate( "import org.antlr.runtime.*;\n" + "import org.antlr.runtime.tree.*;\n" + "import org.antlr.runtime.debug.*;\n" + "\n" + "class Profiler2 extends Profiler {\n" + " public void terminate() { ; }\n" + "}\n" + "public class Test {\n" + " public static void main(String[] args) throws Exception {\n" + " CharStream input = new ANTLRFileStream(args[0]);\n" + " $lexerName$ lex = new $lexerName$(input);\n" + " CommonTokenStream tokens = new CommonTokenStream(lex);\n" + " System.out.println(tokens);\n" + " }\n" + "}" ); return outputFileST; }
public override string ToString() { Tests = Enumerable .Range(0, TestCount) .Select(x => "test" + x) .Join(", "); InstructionCompleteCasesText = InstructionCompleteCases .Select(x => string.Format( @" {0}: begin {1} end ", x.Key, x.Value)) .JoinLines(); var template = File.ReadAllText(PathHelper.GetExecutingPath(@"McuTestTemplate.v")); var t = new StringTemplate(template).PopulateObj(this); return t; }
public virtual StringTemplate GetEmbeddedInstanceOf( StringTemplate enclosingInstance, string name ) { //Console.Out.WriteLine( "surrounding group is " + // enclosingInstance.Group.Name + // " with native group " + enclosingInstance.NativeGroup.Name ); StringTemplate st = null; // TODO: seems like this should go into lookupTemplate if ( name.StartsWith( "super." ) ) { // for super.foo() refs, ensure that we look at the native // group for the embedded instance not the current evaluation // group (which is always pulled down to the original group // from which somebody did group.getInstanceOf("foo"); st = enclosingInstance.NativeGroup.GetInstanceOf( enclosingInstance, name ); } else { st = GetInstanceOf( enclosingInstance, name ); } // make sure all embedded templates have the same group as enclosing // so that polymorphic refs will start looking at the original group st.Group = this; st.EnclosingInstance = enclosingInstance; return st; }
public override StringTemplate GetTreeTestFileTemplate() { StringTemplate outputFileST = new StringTemplate( "import org.antlr.runtime.*;\n" + "import org.antlr.runtime.tree.*;\n" + "import org.antlr.runtime.debug.*;\n" + "\n" + "class Profiler2 extends Profiler {\n" + " public void terminate() { ; }\n" + "}\n" + "public class Test {\n" + " public static void main(String[] args) throws Exception {\n" + " CharStream input = new ANTLRFileStream(args[0]);\n" + " $lexerName$ lex = new $lexerName$(input);\n" + " TokenRewriteStream tokens = new TokenRewriteStream(lex);\n" + " $createParser$\n" + " $parserName$.$parserStartRuleName$_return r = parser.$parserStartRuleName$();\n" + " $if(!treeParserStartRuleName)$\n" + " if ( r.tree!=null ) {\n" + " System.out.println(((Tree)r.tree).toStringTree());\n" + " ((CommonTree)r.tree).sanityCheckParentAndChildIndexes();\n" + " }\n" + " $else$\n" + " CommonTreeNodeStream nodes = new CommonTreeNodeStream((Tree)r.tree);\n" + " nodes.setTokenStream(tokens);\n" + " $treeParserName$ walker = new $treeParserName$(nodes);\n" + " walker.$treeParserStartRuleName$();\n" + " $endif$\n" + " }\n" + "}" ); return outputFileST; }
/** <summary>Track all references to regions <@foo>...<@end> or <@foo()>.</summary> */ public virtual StringTemplate DefineRegionTemplate( StringTemplate enclosingTemplate, string regionName, string template, RegionType type ) { StringTemplate regionST = DefineRegionTemplate( enclosingTemplate.OutermostName, regionName, template, type ); enclosingTemplate.OutermostEnclosingInstance.AddRegionName( regionName ); return regionST; }
public virtual void EmitTemplateStopDebugString( StringTemplate st, IStringTemplateWriter @out ) { if ( _noDebugStartStopStrings == null || !_noDebugStartStopStrings.Contains( st.Name ) ) { string groupPrefix = ""; if ( !st.Name.StartsWith( "if" ) && !st.Name.StartsWith( "else" ) ) { if ( st.NativeGroup != null ) { groupPrefix = st.NativeGroup.Name + "."; } else { groupPrefix = st.Group.Name + "."; } } @out.Write( "</" + groupPrefix + st.Name + ">" ); } }
/** <summary>Track all references to regions <@foo()>. We automatically * define as * * @enclosingtemplate.foo() ::= "" * </summary> * * <remarks> * You cannot set these manually in the same group; you have to subgroup * to override. * </remarks> */ public virtual StringTemplate DefineImplicitRegionTemplate( StringTemplate enclosingTemplate, string name ) { return DefineRegionTemplate( enclosingTemplate, name, "", RegionType.Implicit ); }
/** <summary>StringTemplate object factory; each group can have its own.</summary> */ public virtual StringTemplate CreateStringTemplate() { StringTemplate st = new StringTemplate(); return st; }
public FormalArgument(String name, StringTemplate defaultValueST) { this.name = name; this.defaultValueST = defaultValueST; }
public override StringTemplate GetTemplateTestFileTemplate() { StringTemplate outputFileST = new StringTemplate( "import org.antlr.runtime.*;\n" + "import org.antlr.stringtemplate.*;\n" + "import org.antlr.stringtemplate.language.*;\n" + "import org.antlr.runtime.debug.*;\n" + "import java.io.*;\n" + "\n" + "class Profiler2 extends Profiler {\n" + " public void terminate() { ; }\n" + "}\n" + "public class Test {\n" + " static String templates =\n" + " \"group test;\"+" + " \"foo(x,y) ::= \\\"<x> <y>\\\"\";\n" + " static StringTemplateGroup group =" + " new StringTemplateGroup(new StringReader(templates)," + " AngleBracketTemplateLexer.class);" + " public static void main(String[] args) throws Exception {\n" + " CharStream input = new ANTLRFileStream(args[0]);\n" + " $lexerName$ lex = new $lexerName$(input);\n" + " CommonTokenStream tokens = new CommonTokenStream(lex);\n" + " $createParser$\n" + " parser.setTemplateLib(group);\n" + " $parserName$.$parserStartRuleName$_return r = parser.$parserStartRuleName$();\n" + " if ( r.st!=null )\n" + " System.out.print(r.st.toString());\n" + " else\n" + " System.out.print(\"\");\n" + " }\n" + "}" ); return outputFileST; }
public virtual StringTemplate LookupTemplate( StringTemplate enclosingInstance, string name ) { //Console.Out.WriteLine( "look up " + Name + "::" + name ); if ( name.StartsWith( "super." ) ) { if ( _superGroup != null ) { int dot = name.IndexOf( '.' ); name = name.Substring( dot + 1 ); StringTemplate superScopeST = _superGroup.LookupTemplate( enclosingInstance, name ); //Console.Out.WriteLine( "superScopeST is " + // superScopeST.Group.Name + "::" + name + // " with native group " + superScopeST.NativeGroup.Name ); return superScopeST; } throw new ArgumentException( Name + " has no super group; invalid template: " + name ); } CheckRefreshInterval(); StringTemplate st; lock (_templates) { if (!_templates.TryGetValue(name, out st) || st == null) { // not there? Attempt to load if (!_templatesDefinedInGroupFile) { // only check the disk for individual template st = LoadTemplateFromBeneathRootDirOrCLASSPATH(GetFileNameFromTemplateName(name)); } if (st == null && _superGroup != null) { // try to resolve in super group st = _superGroup.GetInstanceOf(name); // make sure that when we inherit a template, that it's // group is reset; it's nativeGroup will remain where it was if (st != null) { st.Group = this; } } if (st != null) { // found in superGroup // insert into this group; refresh will allow super // to change it's def later or this group to add // an override. _templates[name] = st; } else { // not found; remember that this sucker doesn't exist _templates[name] = NOT_FOUND_ST; string context = ""; if (enclosingInstance != null) { context = "; context is " + enclosingInstance.GetEnclosingInstanceStackString(); } string hier = GetGroupHierarchyStackString(); context += "; group hierarchy is " + hier; throw new ArgumentException("Can't find template " + GetFileNameFromTemplateName(name) + context); } } else if (st == NOT_FOUND_ST) { return null; } //Console.Out.WriteLine( "lookup found " + st.Group.Name + "::" + st.Name ); } return st; }
public virtual string ToString( bool showTemplatePatterns ) { StringBuilder buf = new StringBuilder(); buf.Append( "group " + Name + ";" + _newline ); StringTemplate formalArgs = new StringTemplate( "$args;separator=\",\"$" ); foreach ( var template in _templates.OrderBy( item => (string)item.Key ) ) { string tname = template.Key; StringTemplate st = template.Value; if ( st != NOT_FOUND_ST ) { formalArgs = formalArgs.GetInstanceOf(); formalArgs.SetAttribute( "args", st.FormalArguments ); buf.Append( tname + "(" + formalArgs + ")" ); if ( showTemplatePatterns ) { buf.Append( " ::= <<" ); buf.Append( st.Template ); buf.Append( ">>" + _newline ); } else { buf.Append( _newline ); } } } return buf.ToString(); }
public Antlr.Runtime.Lexer CreateLexer( StringTemplate template, TextReader reader ) { if ( _templateLexerClassCtor != null ) { return _templateLexerClassCtor( template, reader ); } return _defaultTemplateLexerClassCtor( template, reader ); }
// Removes trailing commas from JSON files, so that it can be parsed by JSON.parse() on JS side public static string CleanJSON(StringTemplate st) { return Regex.Replace (st.ToString(), @",(\s*)[\},\]]", @"$1}", RegexOptions.Multiline); }
/** <summary> * A support routine that gets an instance of name knowing which * ST encloses it for error messages. * </summary> */ protected virtual StringTemplate GetInstanceOf( StringTemplate enclosingInstance, string name ) { //Console.Out.WriteLine( "getInstanceOf(" + Name + "::" + name + ")" ); StringTemplate st = LookupTemplate( enclosingInstance, name ); if ( st != null ) { StringTemplate instanceST = st.GetInstanceOf(); return instanceST; } return null; }