Castle.MonoRail.Views.Brail This field holds all the cache of all the compiled types (not instances) of all the views that Brail nows of. used to hold the constructors of types, so we can avoid using Activator (which takes a long time This is used to add a reference to the common scripts for each compiled scripts Resolves the template name into a file name. Perform the actual compilation of the scripts Things to note here: * The generated assembly reference the Castle.MonoRail.MonoRailBrail and Castle.MonoRail.Framework assemblies * If a common scripts assembly exist, it is also referenced * The AddBrailBaseClassStep compiler step is added - to create a class from the view's code * The ProcessMethodBodiesWithDuckTyping is replaced with ReplaceUknownWithParameters this allows to use naked parameters such as (output context.IsLocal) without using any special syntax * The ExpandDuckTypedExpressions is replace with a derived step that allows the use of Dynamic Proxy assemblies * The IntroduceGlobalNamespaces step is removed, to allow to use common variables such as date and list without accidently using the Boo.Lang.BuiltIn versions Base class for all the view scripts, this is the class that is responsible for support all the behind the scenes magic such as variable to PropertyBag trasnlation, resources usage, etc. This is used by layout scripts only, for outputing the child's content used to hold the ComponentParams from the view, so their views/sections could access them usually used by the layout to refer to its view, or a subview to its parent Reference to the DSL service Initializes a new instance of the class. The view engine. The output. The context. The controller. Runs this instance, this is generated by the script Output the subview to the client, this is either a relative path "SubView" which is relative to the current /script/ or an "absolute" path "/home/menu" which is actually relative to ViewDirRoot Similiar to the OutputSubView(string) function, but with a bunch of parameters that are used just for this subview. This parameters are /not/ inheritable. An empty string, just to make it possible to use inline ${OutputSubView("foo")} Outputs the sub view to the writer Name of the subview. The writer. The parameters. Get the sub view file name, if the subview starts with a '/' then the filename is considered relative to ViewDirRoot otherwise, it's relative to the current script directory this is called by ReplaceUnknownWithParameters step to create a more dynamic experiance any uknown identifier will be translate into a call for GetParameter('identifier name'). This mean that when an uknonwn identifier is in the script, it will only be found on runtime. this is called by ReplaceUnknownWithParameters step to create a more dynamic experiance any uknown identifier with the prefix of ? will be translated into a call for TryGetParameter('identifier name without the ? prefix'). This method will return null if the value it not found. Gets the parameter - implements the logic for searching parameters. The name. Sets the parent. My parent. Allows to check that a parameter was defined This is required because we may want to replace the output stream and get the correct behavior from components call RenderText() or RenderSection() Note that this will overwrite any existing property. Adds the view component newProperties. This will be included in the parameters searching, note that this override the current parameters if there are clashing. The search order is LIFO The newProperties. Removes the view component properties, so they will no longer be visible to the views. The properties to remove. Initialize all the properties that a script may need One thing to note here is that resources are wrapped in ResourceToDuck wrapper to enable easy use by the script The path of the script, this is filled by AddBrailBaseClassStep and is used for sub views Gets the view engine. The view engine. Gets the DSL provider Reference to the current DSL Provider Gets the flash. The flash. Gets the output stream. The output stream. Gets or sets the child output. The child output. Gets the properties. The properties. Defines the behavior when a property is read Property name. Parameters for indexers value back to the template Defines the behavior when a property is written Property name. Parameters for indexers The value to assign. Invokes the specified method. The method name. The method arguments. value back to the template Delegates to the generator A that represents the current . Will find all the (outer most ${} expressions in the code, and return their positions). Smart enough to figure out $${} escaping, but not much more Initializes a new instance of the class. The parent. The body. The name. The text. The parameters. Pendent Renders the the specified section Name of the section. The writer. This is here because we need to overcome a tendecy of Dynamic Proxy to generate virtual override that do not match exactly what the compiler does. This means that when you do GetMethod("Foo") and DP has proxied it, you would get an exception because it would recognize two methods with this name. We recognize when we are trying to invoke something that DP has build and act accordingly. The code is mostly taken fro Boo.Lang.Runtime.RuntimeServices, and modified to understand that when the type is from DP, is should use DeclareOnly