Update Castle.MicroKernel-vs2005.csproj with missing files.
[castle.git] / MonoRail / Castle.MonoRail.Views.Brail / HtmlExtension.cs
blob545fe6827446a9176a0544fc01a482e357e0e833
1 // Copyright 2004-2008 Castle Project - http://www.castleproject.org/
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle.MonoRail.Views.Brail
17 using System.Collections;
18 using System.Collections.Generic;
19 using System.IO;
20 using Boo.Lang;
22 public class HtmlExtension : IDslLanguageExtension
24 private readonly TextWriter _output = null;
26 public HtmlExtension(TextWriter output)
28 _output = output;
31 public TextWriter Output
33 get { return _output; }
36 #region IDslLanguageExtension Members
38 public void Tag(string name)
40 BlockTag(name, null, null);
43 public void Tag(string name, ICallable block)
45 BlockTag(name, null, block);
48 public void Tag(string name, IDictionary attributes, ICallable block)
50 BlockTag(name, attributes, block);
53 public void Flush()
55 //no op
58 #endregion
60 private void BlockTag(string tag, IDictionary attributes, ICallable block)
62 Output.Write("<{0}", tag);
64 List<string> attributeValues = new List<string>();
66 if (null != attributes)
68 foreach(DictionaryEntry entry in attributes)
70 attributeValues.Add(string.Format("{0}=\"{1}\"", entry.Key, entry.Value));
74 if (0 != attributeValues.Count)
76 Output.Write(" ");
77 Output.Write(string.Join(" ", attributeValues.ToArray()));
80 Output.Write(">");
81 if (block != null)
83 block.Call(null);
85 Output.Write("</{0}>", tag);
88 public void html(ICallable block)
90 BlockTag("html", null, block);
93 public void text(string value)
95 Output.Write(value);
98 public void p(ICallable block)
100 p(null, block);
103 public void p(IDictionary attributes, ICallable block)
105 BlockTag("p", attributes, block);