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);
            }
Exemple #2
0
        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}'.");
                }
            }
        }
Exemple #3
0
        private void ReadDisplayOrder(MutableProjectItemTree tree)
        {   // Parses '1`
            Tokenizer tokenizer = Tokenizer(Delimiters.PropertyValue);

            string identifier = tokenizer.ReadIdentifier(IdentifierParseOptions.None);

            tree.DisplayOrder = int.Parse(identifier);
        }
Exemple #4
0
        private void ReadFlag(MutableProjectItemTree tree)
        {   // Parses 'AppDesigner' in '{AppDesigner Folder}'
            Tokenizer tokenizer = Tokenizer(Delimiters.BracedPropertyValue);

            string flag = tokenizer.ReadIdentifier(IdentifierParseOptions.Required);

            tree.AddFlag(flag);
        }
Exemple #5
0
        private MutableProjectTree ReadProjectItem()
        {
            var tree = new MutableProjectItemTree();

            ReadProjectItemProperties(tree);

            return(tree.BuildProjectTree());
        }
Exemple #6
0
        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}'."),
            };
        }
Exemple #7
0
        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}'.");
            }
        }
Exemple #9
0
        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}'.");
            }
        }
Exemple #10
0
        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);
        }
Exemple #11
0
 private void ReadSubType(MutableProjectItemTree tree)
 {
     tree.SubType = ReadPropertyValue();
 }
Exemple #12
0
 private void ReadFilePath(MutableProjectItemTree tree)
 {   // Parses '"C:\Temp\Foo"'
     tree.FilePath = ReadQuotedPropertyValue();
 }
Exemple #13
0
 private void ReadItemName(MutableProjectItemTree tree)
 {   // Parses '"test.fs"'
     tree.Item.ItemName = ReadQuotedPropertyValue();
 }
Exemple #14
0
        private void ReadCaption(MutableProjectItemTree tree)
        {
            Tokenizer tokenizer = Tokenizer(Delimiters.Caption);

            tree.Caption = tokenizer.ReadIdentifier(IdentifierParseOptions.Required);
        }
Exemple #15
0
 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);
 }