Exemplo n.º 1
0
        private CodeExpression[] CreateArrayFieldExpression(AbideTagField arrayField)
        {
            //Prepare
            List <CodeExpression> expressions = new List <CodeExpression>();

            //Loop
            foreach (AbideTagField field in arrayField.Fields)
            {
                //Check
                if (field.FieldType == FieldType.FieldArrayStart)
                {
                    //Create
                    expressions.AddRange(CreateArrayFieldExpression(field));
                }
                else
                {
                    CodeExpression fieldCreateExpression = CreateFieldCreateExpression(field);
                    if (fieldCreateExpression != null)
                    {
                        expressions.Add(new CodeMethodInvokeExpression(new CodeMethodReferenceExpression(new CodePropertyReferenceExpression(
                                                                                                             new CodeThisReferenceExpression(), nameof(Block.Fields)), nameof(List <Field> .Add)), fieldCreateExpression));
                    }
                }
            }

            //Return
            return(expressions.ToArray());
        }
Exemplo n.º 2
0
        private static AbideTagField CloneField(string name, AbideTagField originalField)
        {
            //Setup
            ObjectName fieldName = originalField.NameObject;

            fieldName.Name = name;

            //Initialize
            AbideTagField field = new AbideTagField
            {
                NameObject      = fieldName,
                ReferencedBlock = originalField.ReferencedBlock,
                BlockName       = originalField.BlockName,
                StructName      = originalField.StructName,
                FieldType       = originalField.FieldType,
                Alignment       = originalField.Alignment,
                MaximumSize     = originalField.MaximumSize,
                ElementSize     = originalField.ElementSize,
                Length          = originalField.Length,
                Explanation     = originalField.Explanation,
                GroupTag        = originalField.GroupTag,
            };

            field.Options.AddRange(originalField.Options);

            //Return
            return(field);
        }
Exemplo n.º 3
0
        private static void ModelAnimationGraphBlock_Preprocess(AbideTagBlock block, TagDefinitionCollection cache)
        {
            //Create unknown block
            AbideTagBlock xboxUnknownAnimationBlock = null;

            xboxUnknownAnimationBlock = new AbideTagBlock()
            {
                Name        = "xbox_unknown_animation_block",
                DisplayName = "xbox_unknown_animaiton_block",
                FieldSet    = new AbideFieldSet(xboxUnknownAnimationBlock)
                {
                    Alignment = 4
                },
                MaximumElementCount = short.MaxValue
            };
            xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger
            });
            xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger
            });
            xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger
            });
            xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger
            });
            xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger
            });
            xboxUnknownAnimationBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger
            });

            //Create data block
            AbideTagBlock xboxAnimaitonDataBlock = null;

            xboxAnimaitonDataBlock = new AbideTagBlock()
            {
                Name        = "xbox_animation_data_block",
                DisplayName = "xbox_animation_data_block",
                FieldSet    = new AbideFieldSet(xboxAnimaitonDataBlock)
                {
                    Alignment = 4
                },
                MaximumElementCount = short.MaxValue
            };
            xboxAnimaitonDataBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldTagIndex, Name = "owner index"
            });
            xboxAnimaitonDataBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "block size"
            });
            xboxAnimaitonDataBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "block offset"
            });
            xboxAnimaitonDataBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger
            });
            xboxAnimaitonDataBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger
            });

            //Unknown block field
            AbideTagField unknownBlockField = new AbideTagField()
            {
                Name            = "",
                FieldType       = FieldType.FieldBlock,
                BlockName       = "xbox_unknown_animation_block",
                ReferencedBlock = xboxUnknownAnimationBlock
            };
            //Data block field
            AbideTagField animationDataBlockField = new AbideTagField()
            {
                Name            = "animation data",
                FieldType       = FieldType.FieldBlock,
                BlockName       = "xbox_animation_data_block",
                ReferencedBlock = xboxAnimaitonDataBlock
            };

            //Add blocks to cache
            cache.Add(xboxUnknownAnimationBlock);
            cache.Add(xboxAnimaitonDataBlock);

            //Add fields to block
            block.FieldSet.Insert(6, animationDataBlockField);
            block.FieldSet.Insert(7, unknownBlockField);
        }
Exemplo n.º 4
0
        private static void GlobalsBlock_Preprocess(AbideTagBlock block, TagDefinitionCollection cache)
        {
            //Create obsolete sound block
            AbideTagBlock globalsObsoleteSoundBlock = null;

            globalsObsoleteSoundBlock = new AbideTagBlock()
            {
                Name        = "globals_obsolete_sound_block",
                DisplayName = "globals_obsolete_sound_block",
                FieldSet    = new AbideFieldSet(globalsObsoleteSoundBlock)
                {
                    Alignment = 4
                },
                MaximumElementCount = short.MaxValue
            };
            globalsObsoleteSoundBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldTagReference,
                GroupTag  = (int)new HaloLibrary.TagFourCc("snd!").Dword
            });
            globalsObsoleteSoundBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldTerminator
            });

            //Create multilingual unicode globals block
            AbideTagBlock globalsMultilingualUnicodeInfoStructBlock = null;

            globalsMultilingualUnicodeInfoStructBlock = new AbideTagBlock()
            {
                Name        = "globals_multilingual_unicode_info_struct_block",
                DisplayName = "globals_multilingual_unicode_info_struct_block",
                FieldSet    = new AbideFieldSet(globalsObsoleteSoundBlock)
                {
                    Alignment = 4
                },
                MaximumElementCount = 1
            };
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 8
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "English string count"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "English strings length"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "English string index offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "English strings offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 4
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 8
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Japanese string count"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Japanese strings length"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Japanese string index offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Japanese strings offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 4
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 8
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Dutch string count"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Dutch strings length"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Dutch string index offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Dutch strings offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 4
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 8
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "French string count"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "French strings length"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "French string index offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "French strings offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 4
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 8
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Spanish string count"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Spanish strings length"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Spanish string index offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Spanish strings offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 4
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 8
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Italian string count"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Italian strings length"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Italian string index offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Italian strings offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 4
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 8
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Korean string count"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Korean strings length"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Korean string index offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Korean strings offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 4
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 8
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Chinese string count"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Chinese strings length"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Chinese string index offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Chinese strings offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 4
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 8
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Portuguese string count"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Portuguese strings length"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Portuguese string index offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldLongInteger, Name = "Portuguese strings offset"
            });
            globalsMultilingualUnicodeInfoStructBlock.FieldSet.Add(new AbideTagField()
            {
                FieldType = FieldType.FieldPad, Length = 4
            });

            //Obsolete sound block field
            AbideTagField obsoleteSounds = new AbideTagField()
            {
                Name            = "sounds (obsolete)",
                FieldType       = FieldType.FieldBlock,
                BlockName       = "globals_obsolete_sound_block",
                ReferencedBlock = globalsObsoleteSoundBlock
            };

            //Obsolete sound block field
            AbideTagField multilinualUnicodeInfo = new AbideTagField()
            {
                Name            = "multilingual unicode info",
                FieldType       = FieldType.FieldStruct,
                StructName      = "globals_multilingual_unicode_info_struct_block",
                ReferencedBlock = globalsMultilingualUnicodeInfoStructBlock
            };

            //Add blocks to cache
            cache.Add(globalsObsoleteSoundBlock);
            cache.Add(globalsMultilingualUnicodeInfoStructBlock);

            //Replace...
            block.FieldSet[8]  = obsoleteSounds;            //Replace sounds
            block.FieldSet[30] = multilinualUnicodeInfo;    //Replace padding
        }
Exemplo n.º 5
0
        private void CreateFieldProperty(int index, AbideTagField field)
        {
            if (field == null)
            {
                throw new ArgumentNullException(nameof(field));
            }
            if (string.IsNullOrEmpty(field.Name))
            {
                return;
            }

            Type returnType = null;

            switch (field.FieldType)
            {
            case FieldType.FieldString:
            case FieldType.FieldLongString:
            case FieldType.FieldStringId:
                returnType = typeof(string);
                break;

            case FieldType.FieldCharInteger:
                returnType = typeof(byte);
                break;

            case FieldType.FieldShortInteger:
                returnType = typeof(short);
                break;

            case FieldType.FieldLongInteger:
                returnType = typeof(int);
                break;

            case FieldType.FieldAngle:
                returnType = typeof(float);
                break;

            case FieldType.FieldTag:
                returnType = typeof(TagFourCc);
                break;

            case FieldType.FieldCharEnum:
                returnType = typeof(byte);
                break;

            case FieldType.FieldEnum:
                returnType = typeof(short);
                break;

            case FieldType.FieldLongEnum:
                returnType = typeof(int);
                break;

            case FieldType.FieldLongFlags:
                returnType = typeof(int);
                break;

            case FieldType.FieldWordFlags:
                returnType = typeof(short);
                break;

            case FieldType.FieldByteFlags:
                returnType = typeof(byte);
                break;

            case FieldType.FieldPoint2D:
                returnType = typeof(Point2);
                break;

            case FieldType.FieldRectangle2D:
                returnType = typeof(Rectangle2);
                break;

            case FieldType.FieldRgbColor:
                returnType = typeof(ColorRgb);
                break;

            case FieldType.FieldArgbColor:
                returnType = typeof(ColorArgb);
                break;

            case FieldType.FieldReal:
            case FieldType.FieldRealFraction:
                returnType = typeof(float);
                break;

            case FieldType.FieldRealPoint2D:
                returnType = typeof(Point2F);
                break;

            case FieldType.FieldRealPoint3D:
                returnType = typeof(Point3F);
                break;

            case FieldType.FieldRealVector2D:
                returnType = typeof(Vector2);
                break;

            case FieldType.FieldRealVector3D:
                returnType = typeof(Vector3);
                break;

            case FieldType.FieldQuaternion:
                returnType = typeof(Quaternion);
                break;

            case FieldType.FieldEulerAngles2D:
                returnType = typeof(Vector2);
                break;

            case FieldType.FieldEulerAngles3D:
                returnType = typeof(Vector3);
                break;
            }

            //Format name
            string originalName = AbideCodeDomGlobals.GeneratePascalCasedName(field.Name);

            if (string.IsNullOrEmpty(originalName))
            {
                return;
            }

            int    nameCount     = 0;
            string formattedName = originalName;

            while (fieldNames.Contains(formattedName))
            {
                formattedName = $"{originalName}{++nameCount}";
            }

            //Add to list
            fieldNames.Add(formattedName);

            //Create field indexer
            CodeIndexerExpression fieldsIndexerExpression = new CodeIndexerExpression(
                new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), nameof(Block.Fields)));

            fieldsIndexerExpression.Indices.Add(new CodePrimitiveExpression(index));

            //Create field value property expression
            CodePropertyReferenceExpression valuePropRef = new CodePropertyReferenceExpression(
                fieldsIndexerExpression, "Value");

            CodeAssignStatement       setStatement        = new CodeAssignStatement(valuePropRef, new CodePropertySetValueReferenceExpression());
            CodeMethodReturnStatement returnStatement     = null;
            CodeTypeReference         returnTypeReference = null;

            if (returnType != null)
            {
                returnTypeReference = new CodeTypeReference(returnType.Name);
                returnStatement     = new CodeMethodReturnStatement(new CodeCastExpression(
                                                                        new CodeTypeReference(returnType.Name), valuePropRef));
            }
            else
            {
                switch (field.FieldType)
                {
                case FieldType.FieldBlock:
                    returnTypeReference = new CodeTypeReference($"BlockField<{AbideCodeDomGlobals.GetMemberName(field.ReferencedBlock)}>");
                    returnStatement     = new CodeMethodReturnStatement(new CodeCastExpression(
                                                                            returnTypeReference, fieldsIndexerExpression));
                    setStatement = null;
                    break;
                }
            }

            //Check
            if (returnStatement == null | returnTypeReference == null)
            {
                return;
            }

            //Create field property
            CodeMemberProperty fieldMemberProperty = new CodeMemberProperty()
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Final,
                Name       = formattedName,
                Type       = returnTypeReference
            };

            fieldMemberProperty.GetStatements.Add(returnStatement);
            if (setStatement != null)
            {
                fieldMemberProperty.SetStatements.Add(setStatement);
            }
            fieldMemberProperty.Comments.Add(new CodeCommentStatement("<summary>", true));
            fieldMemberProperty.Comments.Add(new CodeCommentStatement($"Gets or sets the value of the {field.Name} field.", true));
            fieldMemberProperty.Comments.Add(new CodeCommentStatement("</summary>", true));
            tagGroupCodeTypeDeclaration.Members.Add(fieldMemberProperty);
        }
Exemplo n.º 6
0
        private CodeExpression CreateFieldCreateExpression(AbideTagField tagField)
        {
            //Prepare
            CodeExpression[] optionExpressions     = null;
            CodeExpression   nameExpression        = new CodePrimitiveExpression(tagField.NameObject.ToString());
            CodeExpression   explanationExpression = new CodePrimitiveExpression(tagField.Explanation ?? string.Empty);
            CodeExpression   groupTagExpression    = new CodePrimitiveExpression(tagField.GroupTag);

            //Check
            switch (tagField.FieldType)
            {
            case FieldType.FieldString:
                return(new CodeObjectCreateExpression(new CodeTypeReference("StringField"), nameExpression));

            case FieldType.FieldLongString:
                return(new CodeObjectCreateExpression(new CodeTypeReference("LongStringField"), nameExpression));

            case FieldType.FieldStringId:
                return(new CodeObjectCreateExpression(new CodeTypeReference("StringIdField"), nameExpression));

            case FieldType.FieldOldStringId:
                return(new CodeObjectCreateExpression(new CodeTypeReference("OldStringIdField"), nameExpression));

            case FieldType.FieldCharInteger:
                return(new CodeObjectCreateExpression(new CodeTypeReference("CharIntegerField"), nameExpression));

            case FieldType.FieldShortInteger:
                return(new CodeObjectCreateExpression(new CodeTypeReference("ShortIntegerField"), nameExpression));

            case FieldType.FieldLongInteger:
                return(new CodeObjectCreateExpression(new CodeTypeReference("LongIntegerField"), nameExpression));

            case FieldType.FieldAngle:
                return(new CodeObjectCreateExpression(new CodeTypeReference("AngleField"), nameExpression));

            case FieldType.FieldTag:
                return(new CodeObjectCreateExpression(new CodeTypeReference("TagField"), nameExpression));

            case FieldType.FieldCharEnum:
                optionExpressions    = new CodeExpression[tagField.Options.Count + 1];
                optionExpressions[0] = nameExpression;
                for (int i = 0; i < tagField.Options.Count; i++)
                {
                    optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString());
                }
                return(new CodeObjectCreateExpression(new CodeTypeReference("CharEnumField"), optionExpressions));

            case FieldType.FieldEnum:
                optionExpressions    = new CodeExpression[tagField.Options.Count + 1];
                optionExpressions[0] = nameExpression;
                for (int i = 0; i < tagField.Options.Count; i++)
                {
                    optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString());
                }
                return(new CodeObjectCreateExpression(new CodeTypeReference("EnumField"), optionExpressions));

            case FieldType.FieldLongEnum:
                optionExpressions    = new CodeExpression[tagField.Options.Count + 1];
                optionExpressions[0] = nameExpression;
                for (int i = 0; i < tagField.Options.Count; i++)
                {
                    optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString());
                }
                return(new CodeObjectCreateExpression(new CodeTypeReference("LongEnumField"), optionExpressions));

            case FieldType.FieldLongFlags:
                optionExpressions    = new CodeExpression[tagField.Options.Count + 1];
                optionExpressions[0] = nameExpression;
                for (int i = 0; i < tagField.Options.Count; i++)
                {
                    optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString());
                }
                return(new CodeObjectCreateExpression(new CodeTypeReference("LongFlagsField"), optionExpressions));

            case FieldType.FieldWordFlags:
                optionExpressions    = new CodeExpression[tagField.Options.Count + 1];
                optionExpressions[0] = nameExpression;
                for (int i = 0; i < tagField.Options.Count; i++)
                {
                    optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString());
                }
                return(new CodeObjectCreateExpression(new CodeTypeReference("WordFlagsField"), optionExpressions));

            case FieldType.FieldByteFlags:
                optionExpressions    = new CodeExpression[tagField.Options.Count + 1];
                optionExpressions[0] = nameExpression;
                for (int i = 0; i < tagField.Options.Count; i++)
                {
                    optionExpressions[i + 1] = new CodePrimitiveExpression(tagField.Options[i].ToString());
                }
                return(new CodeObjectCreateExpression(new CodeTypeReference("ByteFlagsField"), optionExpressions));

            case FieldType.FieldPoint2D:
                return(new CodeObjectCreateExpression(new CodeTypeReference("Point2dField"), nameExpression));

            case FieldType.FieldRectangle2D:
                return(new CodeObjectCreateExpression(new CodeTypeReference("Rectangle2dField"), nameExpression));

            case FieldType.FieldRgbColor:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RgbColorField"), nameExpression));

            case FieldType.FieldArgbColor:
                return(new CodeObjectCreateExpression(new CodeTypeReference("ArgbColorField"), nameExpression));

            case FieldType.FieldReal:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealField"), nameExpression));

            case FieldType.FieldRealFraction:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealFractionField"), nameExpression));

            case FieldType.FieldRealPoint2D:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealPoint2dField"), nameExpression));

            case FieldType.FieldRealPoint3D:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealPoint3dField"), nameExpression));

            case FieldType.FieldRealVector2D:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealVector2dField"), nameExpression));

            case FieldType.FieldRealVector3D:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealVector3dField"), nameExpression));

            case FieldType.FieldQuaternion:
                return(new CodeObjectCreateExpression(new CodeTypeReference("QuaternionField"), nameExpression));

            case FieldType.FieldEulerAngles2D:
                return(new CodeObjectCreateExpression(new CodeTypeReference("EulerAngles2dField"), nameExpression));

            case FieldType.FieldEulerAngles3D:
                return(new CodeObjectCreateExpression(new CodeTypeReference("EulerAngles3dField"), nameExpression));

            case FieldType.FieldRealPlane2D:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealPlane2dField"), nameExpression));

            case FieldType.FieldRealPlane3D:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealPlane3dField"), nameExpression));

            case FieldType.FieldRealRgbColor:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealRgbColorField"), nameExpression));

            case FieldType.FieldRealArgbColor:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealArgbColorField"), nameExpression));

            case FieldType.FieldRealHsvColor:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealHsvColorField"), nameExpression));

            case FieldType.FieldRealAhsvColor:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealAhsvColorField"), nameExpression));

            case FieldType.FieldShortBounds:
                return(new CodeObjectCreateExpression(new CodeTypeReference("ShortBoundsField"), nameExpression));

            case FieldType.FieldAngleBounds:
                return(new CodeObjectCreateExpression(new CodeTypeReference("AngleBoundsField"), nameExpression));

            case FieldType.FieldRealBounds:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealBoundsField"), nameExpression));

            case FieldType.FieldRealFractionBounds:
                return(new CodeObjectCreateExpression(new CodeTypeReference("RealFractionBoundsField"), nameExpression));

            case FieldType.FieldTagReference:
                return(new CodeObjectCreateExpression(new CodeTypeReference("TagReferenceField"), nameExpression, groupTagExpression));

            case FieldType.FieldBlock:
                return(new CodeObjectCreateExpression(new CodeTypeReference($"BlockField<{AbideCodeDomGlobals.GetMemberName(tagField.ReferencedBlock)}>"), nameExpression, new CodePrimitiveExpression(tagField.ReferencedBlock.MaximumElementCount)));

            case FieldType.FieldLongBlockFlags:
                return(new CodeObjectCreateExpression(new CodeTypeReference("LongFlagsField"), nameExpression));

            case FieldType.FieldWordBlockFlags:
                return(new CodeObjectCreateExpression(new CodeTypeReference("WordFlagsField"), nameExpression));

            case FieldType.FieldByteBlockFlags:
                return(new CodeObjectCreateExpression(new CodeTypeReference("ByteFlagsField"), nameExpression));

            case FieldType.FieldCharBlockIndex1:
                return(new CodeObjectCreateExpression(new CodeTypeReference("CharBlockIndexField"), nameExpression));

            case FieldType.FieldCharBlockIndex2:
                return(new CodeObjectCreateExpression(new CodeTypeReference("CharBlockIndexField"), nameExpression));

            case FieldType.FieldShortBlockIndex1:
                return(new CodeObjectCreateExpression(new CodeTypeReference("ShortBlockIndexField"), nameExpression));

            case FieldType.FieldShortBlockIndex2:
                return(new CodeObjectCreateExpression(new CodeTypeReference("ShortBlockIndexField"), nameExpression));

            case FieldType.FieldLongBlockIndex1:
                return(new CodeObjectCreateExpression(new CodeTypeReference("LongBlockIndexField"), nameExpression));

            case FieldType.FieldLongBlockIndex2:
                return(new CodeObjectCreateExpression(new CodeTypeReference("LongBlockIndexField"), nameExpression));

            case FieldType.FieldData:
                return(new CodeObjectCreateExpression(new CodeTypeReference("DataField"), nameExpression, new CodePrimitiveExpression(tagField.ElementSize), new CodePrimitiveExpression(tagField.Alignment)));

            case FieldType.FieldVertexBuffer:
                return(new CodeObjectCreateExpression(new CodeTypeReference("VertexBufferField"), nameExpression));

            case FieldType.FieldPad:
                return(new CodeObjectCreateExpression(new CodeTypeReference("PadField"), nameExpression, new CodePrimitiveExpression(tagField.Length)));

            case FieldType.FieldSkip:
                return(new CodeObjectCreateExpression(new CodeTypeReference("SkipField"), nameExpression, new CodePrimitiveExpression(tagField.Length)));

            case FieldType.FieldExplanation:
                return(new CodeObjectCreateExpression(new CodeTypeReference("ExplanationField"), nameExpression, explanationExpression));

            case FieldType.FieldStruct:
                return(new CodeObjectCreateExpression(new CodeTypeReference($"StructField<{AbideCodeDomGlobals.GetMemberName(tagField.ReferencedBlock)}>"), nameExpression));

            case FieldType.FieldTagIndex:
                return(new CodeObjectCreateExpression(new CodeTypeReference("TagIndexField"), nameExpression));
            }

            //Return
            return(null);
        }