protected override bool Execute(uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut, IOleCommandTarget nextCommandTarget) { var groupId = CommandGroupId; if (nextCommandTarget.Exec(ref groupId, nCmdID, nCmdexecopt, pvaIn, pvaOut) == VSConstants.S_OK) { // parse the content var tokenizer = new DothtmlTokenizer(); var text = TextView.TextSnapshot.GetText(); tokenizer.Tokenize(new StringReader(text)); var parser = new DothtmlParser(); var node = parser.Parse(tokenizer.Tokens); // prepare the metadata control resolver var completionSource = TextView.TextBuffer.Properties.GetProperty<DothtmlCompletionSource>(typeof(DothtmlCompletionSource)); var metadataControlResolver = completionSource.MetadataControlResolver; metadataControlResolver.ReloadAllControls(completionSource.GetCompletionContext()); try { CompletionHelper.DTE.UndoContext.Open("Format Dothtml document"); var edit = TextView.TextBuffer.CreateEdit(EditOptions.None, null, null); // fix the casing of all elements var editText = new StringBuilder(text); foreach (var element in node.EnumerateNodes().OfType<DothtmlElementNode>()) { FixElement(editText, metadataControlResolver, TextView.TextBuffer, element); } edit.Replace(0, editText.Length, editText.ToString()); edit.Apply(); } finally { CompletionHelper.DTE.UndoContext.Close(); } } return true; }
/// <summary> /// Compiles the view and returns a function that can be invoked repeatedly. The function builds full control tree and activates the page. /// </summary> public IControlBuilder CompileView(IReader reader, string fileName, string assemblyName, string namespaceName, string className) { // parse the document var tokenizer = new DothtmlTokenizer(); tokenizer.Tokenize(reader); var parser = new DothtmlParser(); var node = parser.Parse(tokenizer.Tokens); var resolvedView = controlTreeResolver.ResolveTree(node, fileName); var styleVisitor = new StylingVisitor(configuration.Styles); resolvedView.Accept(styleVisitor); var emitter = new DefaultViewCompilerCodeEmitter(); var compilingVisitor = new ViewCompilingVisitor(emitter, configuration.ServiceLocator.GetService<IBindingCompiler>(), className); resolvedView.Accept(compilingVisitor); // create the assembly var assembly = BuildAssembly(emitter, assemblyName, namespaceName, className); var controlBuilder = (IControlBuilder)assembly.CreateInstance(namespaceName + "." + className); resolvedView.Metadata.ControlBuilderType = controlBuilder.GetType(); return controlBuilder; }
public static DothtmlRootNode ParseMarkup(string markup) { var tokenizer = new DothtmlTokenizer(); tokenizer.Tokenize(new StringReader(markup)); var parser = new DothtmlParser(); var node = parser.Parse(tokenizer.Tokens); return node; }