public override async Task GenerateWrapperFields( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, Accessor dataAccessor, int?currentPosition, string passedLengthAccessor, DataType dataType = null) { StringType str = typeGen as StringType; var data = str.GetFieldData(); if (data.HasTrigger) { await base.GenerateWrapperFields(fg, objGen, typeGen, dataAccessor, currentPosition, passedLengthAccessor, dataType); return; } switch (str.BinaryType) { case StringBinaryType.NullTerminate: fg.AppendLine($"public {typeGen.TypeName(getter: true)}{str.NullChar} {typeGen.Name} {{ get; private set; }} = {(str.Translated.HasValue ? $"{nameof(TranslatedString)}.{nameof(TranslatedString.Empty)}" : "string.Empty")};"); break; default: await base.GenerateWrapperFields(fg, objGen, typeGen, dataAccessor, currentPosition, passedLengthAccessor, dataType); return; } }
public override async Task GenerateWrapperUnknownLengthParse( FileGeneration fg, ObjectGeneration objGen, TypeGeneration typeGen, int?passedLength, string passedLengthAccessor) { StringType str = typeGen as StringType; switch (str.BinaryType) { case StringBinaryType.PrependLength: fg.AppendLine($"ret.{typeGen.Name}EndingPos = {(passedLengthAccessor == null ? null : $"{passedLengthAccessor} + ")}BinaryPrimitives.ReadInt32LittleEndian(ret._data{(passedLengthAccessor == null ? null : $".Slice({passedLengthAccessor})")}) + 4;");
public override string GenerateForTypicalWrapper( ObjectGeneration objGen, TypeGeneration typeGen, Accessor dataAccessor, Accessor packageAccessor) { StringType str = typeGen as StringType; if (str.Translated.HasValue) { return($"StringBinaryTranslation.Instance.Parse({dataAccessor}, {nameof(StringsSource)}.{str.Translated.Value}, parsingBundle: {packageAccessor}.{nameof(BinaryOverlayFactoryPackage.MetaData)})"); } else { switch (str.BinaryType) { case StringBinaryType.Plain: case StringBinaryType.NullTerminate: var data = typeGen.GetFieldData(); var gendered = data.Parent as GenderedType; if (data.HasTrigger || (gendered?.MaleMarker.HasValue ?? false)) { return($"{nameof(BinaryStringUtility)}.{nameof(BinaryStringUtility.ProcessWholeToZString)}({dataAccessor}, encoding: {packageAccessor}.{nameof(BinaryOverlayFactoryPackage.MetaData)}.{nameof(ParsingBundle.Encodings)}.{nameof(EncodingBundle.NonTranslated)})"); } else { return($"{nameof(BinaryStringUtility)}.{nameof(BinaryStringUtility.ParseUnknownLengthString)}({dataAccessor}, encoding: {packageAccessor}.{nameof(BinaryOverlayFactoryPackage.MetaData)}.{nameof(ParsingBundle.Encodings)}.{nameof(EncodingBundle.NonTranslated)})"); } case StringBinaryType.PrependLength: return($"{nameof(BinaryStringUtility)}.{nameof(BinaryStringUtility.ParsePrependedString)}({dataAccessor}, lengthLength: 4, encoding: {packageAccessor}.{nameof(BinaryOverlayFactoryPackage.MetaData)}.{nameof(ParsingBundle.Encodings)}.{nameof(EncodingBundle.NonTranslated)})"); case StringBinaryType.PrependLengthUShort: return($"{nameof(BinaryStringUtility)}.{nameof(BinaryStringUtility.ParsePrependedString)}({dataAccessor}, lengthLength: 2, encoding: {packageAccessor}.{nameof(BinaryOverlayFactoryPackage.MetaData)}.{nameof(ParsingBundle.Encodings)}.{nameof(EncodingBundle.NonTranslated)})"); default: throw new NotImplementedException(); } } }