diff options
Diffstat (limited to 'tools/Sandcastle/Source/BuildAssembler/BuildAssemblerLibrary/BuildContext.cs')
-rw-r--r-- | tools/Sandcastle/Source/BuildAssembler/BuildAssemblerLibrary/BuildContext.cs | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/tools/Sandcastle/Source/BuildAssembler/BuildAssemblerLibrary/BuildContext.cs b/tools/Sandcastle/Source/BuildAssembler/BuildAssemblerLibrary/BuildContext.cs new file mode 100644 index 0000000..02bed62 --- /dev/null +++ b/tools/Sandcastle/Source/BuildAssembler/BuildAssemblerLibrary/BuildContext.cs @@ -0,0 +1,173 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// +using System; +using System.Collections.Generic; +using System.Xml; +using System.Xml.XPath; +using System.Xml.Xsl; + +namespace Microsoft.Ddue.Tools { + + public class BuildContext { + + private CustomContext context = new CustomContext(); + + // Namespace control + + public void AddNamespace (string prefix, string uri) { + context.AddNamespace(prefix, uri); + } + + public string LookupNamespace (string prefix) { + return( context.LookupNamespace(prefix) ); + } + + public bool RemoveNamespace (string prefix) { + string uri = LookupNamespace(prefix); + if (uri == null) { + return(false); + } else { + context.RemoveNamespace(prefix, uri); + return(true); + } + } + + public void ClearNamespaces () { + } + + // Variable control + + public void AddVariable (string name, string value) { + context[name] = value; + } + + public string LookupVariable (string name) { + return( context[name] ); + } + + public bool RemoveVariable (string name) { + return( context.ClearVariable(name) ); + } + + public void ClearVariables () { + context.ClearVariables(); + } + + public string this [string name] { + get { + return(context[name]); + } + set { + context[name] = value; + } + } + + // Function control + + // The context for use in XPath queries + + public XsltContext XsltContext { + get { + return(context); + } + } + + // Load data from config + + public void Load (XPathNavigator configuration) { + XPathNodeIterator namespaceNodes = configuration.Select("namespace"); + foreach (XPathNavigator namespaceNode in namespaceNodes) { + string prefixValue = namespaceNode.GetAttribute("prefix", String.Empty); + string uriValue = namespaceNode.GetAttribute("uri", String.Empty); + AddNamespace(prefixValue, uriValue); + } + } + + } + + public class CustomContext : XsltContext { + + public CustomContext() : base() {} + + // variable control + + private Dictionary<string, IXsltContextVariable> variables = new Dictionary<string,IXsltContextVariable>(); + + public string this [string variable] { + get { + return(variables[variable].Evaluate(this).ToString()); + } + set { + variables[variable] = new CustomVariable(value); + } + } + + public bool ClearVariable (string name) { + return( variables.Remove(name) ); + } + + public void ClearVariables () { + variables.Clear(); + } + + // Implementation of XsltContext methods + + public override IXsltContextVariable ResolveVariable (string prefix, string name) { + return( variables[name] ); + } + + public override IXsltContextFunction ResolveFunction (string prefix, string name, XPathResultType[] argumentTypes) { + throw new NotImplementedException(); + } + + public override int CompareDocument (string baseUri, string nextBaseUri) { + return(0); + } + + public override bool Whitespace { + get { + return(true); + } + } + + public override bool PreserveWhitespace (XPathNavigator node) { + return(true); + } + + } + + + internal struct CustomVariable : IXsltContextVariable { + + public CustomVariable (string value) { + this.value = value; + } + + private string value; + + public bool IsLocal { + get { + return(false); + } + } + + public bool IsParam { + get { + return(false); + } + } + + public XPathResultType VariableType { + get { + return(XPathResultType.String); + } + } + + public Object Evaluate (XsltContext context) { + return(value); + } + + } + + +}
\ No newline at end of file |