public MutableProjectItemTree ToMutableProjectItemTree() { var newItemTree = new MutableProjectItemTree(); var newTree = newItemTree as MutableProjectTree; newTree.Children = new Collection <MutableProjectTree>(Children); newTree.Caption = Caption; newTree.Flags = Flags; newTree.FilePath = FilePath; newTree.Visible = Visible; newTree.Parent = Parent; newTree.Icon = Icon; newTree.ExpandedIcon = ExpandedIcon; newTree.DisplayOrder = DisplayOrder; newTree.ItemName = ItemName; var projectPropertiesContext = new MutableProjectPropertiesContext { ItemName = ItemName }; newItemTree.Item = projectPropertiesContext; return(newItemTree); }
private void ReadFields(MutableProjectItemTree tree) { // Parses ', FilePath: "C:\Temp\Foo"' // This section is optional while (_tokenizer.SkipIf(TokenType.Comma)) { _tokenizer.Skip(TokenType.WhiteSpace); Tokenizer tokenizer = Tokenizer(Delimiters.PropertyName); string fieldName = tokenizer.ReadIdentifier(IdentifierParseOptions.Required); switch (fieldName) { case "FilePath": tokenizer.Skip(TokenType.Colon); tokenizer.Skip(TokenType.WhiteSpace); ReadFilePath(tree); break; case "ItemType": tokenizer.Skip(TokenType.Colon); tokenizer.Skip(TokenType.WhiteSpace); ReadItemType(tree); break; case "SubType": tokenizer.Skip(TokenType.Colon); tokenizer.Skip(TokenType.WhiteSpace); ReadSubType(tree); break; case "Icon": tokenizer.Skip(TokenType.Colon); tokenizer.Skip(TokenType.WhiteSpace); ReadIcon(tree, expandedIcon: false); break; case "ExpandedIcon": tokenizer.Skip(TokenType.Colon); tokenizer.Skip(TokenType.WhiteSpace); ReadIcon(tree, expandedIcon: true); break; case "DisplayOrder": tokenizer.Skip(TokenType.Colon); tokenizer.Skip(TokenType.WhiteSpace); ReadDisplayOrder(tree); break; case "ItemName": tokenizer.Skip(TokenType.Colon); tokenizer.Skip(TokenType.WhiteSpace); ReadItemName(tree); break; default: throw FormatException(ProjectTreeFormatError.UnrecognizedPropertyName, $"Expected 'FilePath', 'Icon' or 'ExpandedIcon', but encountered '{fieldName}'."); } } }
private void ReadDisplayOrder(MutableProjectItemTree tree) { // Parses '1` Tokenizer tokenizer = Tokenizer(Delimiters.PropertyValue); string identifier = tokenizer.ReadIdentifier(IdentifierParseOptions.None); tree.DisplayOrder = int.Parse(identifier); }
private void ReadFlag(MutableProjectItemTree tree) { // Parses 'AppDesigner' in '{AppDesigner Folder}' Tokenizer tokenizer = Tokenizer(Delimiters.BracedPropertyValue); string flag = tokenizer.ReadIdentifier(IdentifierParseOptions.Required); tree.AddFlag(flag); }
private MutableProjectTree ReadProjectItem() { var tree = new MutableProjectItemTree(); ReadProjectItemProperties(tree); return(tree.BuildProjectTree()); }
private void ReadVisibility(MutableProjectItemTree tree) { // Parse 'visible' in 'visibility:visible' or 'invisible' in 'visibility:invisible" Tokenizer tokenizer = Tokenizer(Delimiters.PropertyValue); string visibility = tokenizer.ReadIdentifier(IdentifierParseOptions.Required); tree.Visible = visibility switch { "visible" => true, "invisible" => false, _ => throw FormatException(ProjectTreeFormatError.UnrecognizedPropertyValue, $"Expected 'visible' or 'invisible', but encountered '{visibility}'."), }; }
private void ReadCapabilities(MutableProjectItemTree tree) { // Parse '{ProjectRoot Folder}' Tokenizer tokenizer = Tokenizer(Delimiters.BracedPropertyValueBlock); tokenizer.Skip(TokenType.LeftBrace); // Empty flags if (tokenizer.SkipIf(TokenType.RightBrace)) { return; } do { ReadFlag(tree); }while (tokenizer.SkipIf(TokenType.WhiteSpace)); tokenizer.Skip(TokenType.RightBrace); }
private void ReadVisibility(MutableProjectItemTree tree) { // Parse 'visible' in 'visibility:visible' or 'invisible' in 'visibility:invisible" Tokenizer tokenizer = Tokenizer(Delimiters.PropertyValue); string visibility = tokenizer.ReadIdentifier(IdentifierParseOptions.Required); switch (visibility) { case "visible": tree.Visible = true; break; case "invisible": tree.Visible = false; break; default: throw FormatException(ProjectTreeFormatError.UnrecognizedPropertyValue, $"Expected 'visible' or 'invisible', but encountered '{visibility}'."); } }
private void ReadProperty(MutableProjectItemTree tree) { Tokenizer tokenizer = Tokenizer(Delimiters.PropertyName); string propertyName = tokenizer.ReadIdentifier(IdentifierParseOptions.Required); switch (propertyName) { case "visibility": tokenizer.Skip(TokenType.Colon); tokenizer.Skip(TokenType.WhiteSpace); ReadVisibility(tree); break; case "flags": tokenizer.Skip(TokenType.Colon); tokenizer.Skip(TokenType.WhiteSpace); ReadCapabilities(tree); break; default: throw FormatException(ProjectTreeFormatError.UnrecognizedPropertyName, $"Expected 'visibility' or 'flags', but encountered '{propertyName}'."); } }
private void ReadProperties(MutableProjectItemTree tree) { // Parses "(visibility: visible, flags: {ProjectRoot})" // Properties section is optional if (!_tokenizer.SkipIf(TokenType.LeftParenthesis)) { return; } // Empty properties if (_tokenizer.SkipIf(TokenType.RightParenthesis)) { return; } ReadProperty(tree); while (_tokenizer.SkipIf(TokenType.Comma)) { _tokenizer.Skip(TokenType.WhiteSpace); ReadProperty(tree); } _tokenizer.Skip(TokenType.RightParenthesis); }
private void ReadSubType(MutableProjectItemTree tree) { tree.SubType = ReadPropertyValue(); }
private void ReadFilePath(MutableProjectItemTree tree) { // Parses '"C:\Temp\Foo"' tree.FilePath = ReadQuotedPropertyValue(); }
private void ReadItemName(MutableProjectItemTree tree) { // Parses '"test.fs"' tree.Item.ItemName = ReadQuotedPropertyValue(); }
private void ReadCaption(MutableProjectItemTree tree) { Tokenizer tokenizer = Tokenizer(Delimiters.Caption); tree.Caption = tokenizer.ReadIdentifier(IdentifierParseOptions.Required); }
private void ReadProjectItemProperties(MutableProjectItemTree tree) { // Parse "Root (visibility: visible, flags: {ProjectRoot}), FilePath: "C:\My Project\MyFile.txt", Icon: {1B5CF1ED-9525-42B4-85F0-2CB50530ECA9 1}, ExpandedIcon: {1B5CF1ED-9525-42B4-85F0-2CB50530ECA9 1} ReadCaption(tree); ReadProperties(tree); ReadFields(tree); }