From 0fa91c34e11e7b0af6e99064addc85a2ef45371e Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Mon, 24 Nov 2025 11:27:56 +0000 Subject: [PATCH] [Refactor] Replace regex with source generation. --- Aaru.Decoders/SCSI/EVPD.cs | 61 +++++++------- Aaru.Images/ByteAddressable/NES.cs | 12 ++- Aaru.Images/CDRDAO/Constants.cs | 86 ++++++++++++++++++++ Aaru.Images/CDRDAO/Identify.cs | 10 +-- Aaru.Images/CDRDAO/Read.cs | 56 ++++++------- Aaru.Images/CDRWin/Constants.cs | 116 +++++++++++++++++++++++++++ Aaru.Images/CDRWin/Identify.cs | 16 ++-- Aaru.Images/CDRWin/Read.cs | 76 +++++++++--------- Aaru.Images/CHD/Constants.cs | 13 +++ Aaru.Images/CHD/Read.cs | 8 +- Aaru.Images/CloneCD/Constants.cs | 98 ++++++++++++++++++++++ Aaru.Images/CloneCD/Identify.cs | 8 +- Aaru.Images/CloneCD/Read.cs | 64 +++++++-------- Aaru.Images/CopyTape/Constants.cs | 14 ++++ Aaru.Images/CopyTape/Identify.cs | 2 +- Aaru.Images/CopyTape/Read.cs | 8 +- Aaru.Images/DART/Constants.cs | 4 + Aaru.Images/DART/Read.cs | 2 +- Aaru.Images/DiskCopy42/Constants.cs | 5 ++ Aaru.Images/DiskCopy42/Read.cs | 2 +- Aaru.Images/DriDiskCopy/Constants.cs | 5 ++ Aaru.Images/DriDiskCopy/Identify.cs | 12 ++- Aaru.Images/DriDiskCopy/Read.cs | 2 +- Aaru.Images/GDI/Constants.cs | 4 + Aaru.Images/GDI/Identify.cs | 14 ++-- Aaru.Images/GDI/Read.cs | 2 +- Aaru.Images/IMD/Constants.cs | 10 +++ Aaru.Images/IMD/Identify.cs | 6 +- Aaru.Images/RayDIM/Constants.cs | 5 ++ Aaru.Images/RayDIM/Identify.cs | 4 +- Aaru.Images/RayDIM/Read.cs | 2 +- Aaru.Images/VMware/Constants.cs | 28 +++++++ Aaru.Images/VMware/Read.cs | 18 ++--- 33 files changed, 585 insertions(+), 188 deletions(-) diff --git a/Aaru.Decoders/SCSI/EVPD.cs b/Aaru.Decoders/SCSI/EVPD.cs index ae312dac6..2fb68016e 100644 --- a/Aaru.Decoders/SCSI/EVPD.cs +++ b/Aaru.Decoders/SCSI/EVPD.cs @@ -49,7 +49,7 @@ namespace Aaru.Decoders.SCSI; [SuppressMessage("ReSharper", "NotAccessedField.Global")] [SuppressMessage("ReSharper", "UnassignedField.Global")] [SuppressMessage("ReSharper", "UnusedMember.Global")] -public static class EVPD +public static partial class EVPD { /// Decodes VPD page 0x00: Supported VPD pages /// A byte array containing all supported VPD pages. @@ -60,7 +60,7 @@ public static class EVPD if(page.Length != page[3] + 4) return null; - byte[] decoded = new byte[page.Length - 4]; + var decoded = new byte[page.Length - 4]; Array.Copy(page, 4, decoded, 0, page.Length - 4); @@ -78,7 +78,7 @@ public static class EVPD if(page.Length != page[3] + 4) return null; - byte[] ascii = new byte[page[4]]; + var ascii = new byte[page[4]]; Array.Copy(page, 5, ascii, 0, page[4]); @@ -94,11 +94,11 @@ public static class EVPD if(page.Length != page[3] + 4) return null; - byte[] ascii = new byte[page.Length - 4]; + var ascii = new byte[page.Length - 4]; Array.Copy(page, 4, ascii, 0, page.Length - 4); - for(int i = 0; i < ascii.Length - 1; i++) + for(var i = 0; i < ascii.Length - 1; i++) { if(ascii[i] == 0x00) break; @@ -117,7 +117,7 @@ public static class EVPD if(page.Length != page[3] + 4) return null; - byte[] ascii = new byte[page.Length - 4]; + var ascii = new byte[page.Length - 4]; Array.Copy(page, 4, ascii, 0, page.Length - 4); @@ -132,7 +132,7 @@ public static class EVPD if(page.Length != page[3] + 4) return null; - byte[] ascii = new byte[page.Length - 4]; + var ascii = new byte[page.Length - 4]; Array.Copy(page, 4, ascii, 0, page.Length - 4); @@ -149,7 +149,7 @@ public static class EVPD if(page.Length != 12) return 0; - byte[] bitmap = new byte[8]; + var bitmap = new byte[8]; Array.Copy(page, 4, bitmap, 0, 8); @@ -166,7 +166,7 @@ public static class EVPD if(page.Length != page[3] + 4) return null; - byte[] ascii = new byte[page.Length - 4]; + var ascii = new byte[page.Length - 4]; Array.Copy(page, 4, ascii, 0, page.Length - 4); @@ -183,8 +183,8 @@ public static class EVPD if(page.Length != page[3] + 4) return null; - byte[] element = new byte[page.Length - 4]; - var sb = new StringBuilder(); + var element = new byte[page.Length - 4]; + var sb = new StringBuilder(); foreach(byte b in element) sb.Append($"{b:X2}"); @@ -231,7 +231,7 @@ public static class EVPD Default = (ScsiDefinitions)(pageResponse[5] & 0x7F) }; - int position = 6; + var position = 6; List definitions = []; while(position < pageResponse.Length) @@ -387,7 +387,7 @@ public static class EVPD PageLength = (byte)(pageResponse[3] + 4) }; - int position = 4; + var position = 4; List descriptors = []; while(position < pageResponse.Length) @@ -565,7 +565,7 @@ public static class EVPD sb.AppendFormat($"\t[slateblue1]{Localization.IEEE_EUI_64_0_X2}", $"[teal]{descriptor.Binary[0]}"); - for(int i = 1; i < descriptor.Binary.Length; i++) sb.Append($":{descriptor.Binary[i]:X2}"); + for(var i = 1; i < descriptor.Binary.Length; i++) sb.Append($":{descriptor.Binary[i]:X2}"); sb.AppendLine("[/][/]"); } @@ -582,7 +582,7 @@ public static class EVPD { sb.AppendFormat($"\t[slateblue1]{Localization.NAA_0_X2}", $"[teal]{descriptor.Binary[0]}"); - for(int i = 1; i < descriptor.Binary.Length; i++) sb.Append($":{descriptor.Binary[i]:X2}"); + for(var i = 1; i < descriptor.Binary.Length; i++) sb.Append($":{descriptor.Binary[i]:X2}"); sb.AppendLine("[/][/]"); } @@ -646,7 +646,7 @@ public static class EVPD sb.AppendFormat($"\t[slateblue1]{Localization.MD5_logical_unit_identifier_0_x2}", $"[teal]{descriptor.Binary[0]}"); - for(int i = 1; i < descriptor.Binary.Length; i++) sb.Append($"{descriptor.Binary[i]:x2}"); + for(var i = 1; i < descriptor.Binary.Length; i++) sb.Append($"{descriptor.Binary[i]:x2}"); sb.AppendLine("[/][/]"); } @@ -866,7 +866,7 @@ public static class EVPD PageLength = (byte)(pageResponse[3] + 4) }; - int position = 4; + var position = 4; List identifiers = []; while(position < pageResponse.Length) @@ -908,7 +908,7 @@ public static class EVPD { sb.AppendFormat("\t" + "{0:X2}", identifier.Identifier[0]); - for(int i = 1; i < identifier.Identifier.Length; i++) sb.Append($":{identifier.Identifier[i]:X2}"); + for(var i = 1; i < identifier.Identifier.Length; i++) sb.Append($":{identifier.Identifier[i]:X2}"); sb.AppendLine(); } @@ -975,7 +975,7 @@ public static class EVPD PageLength = (ushort)((pageResponse[2] << 8) + pageResponse[3] + 4) }; - int position = 4; + var position = 4; List descriptors = []; while(position < pageResponse.Length) @@ -1796,7 +1796,7 @@ public static class EVPD CartridgeSerialNumber = new byte[32] }; - byte[] buf = new byte[8]; + var buf = new byte[8]; Array.Copy(pageResponse, 24, buf, 0, 8); decoded.InitiatorID = BitConverter.ToUInt64(buf.Reverse().ToArray(), 0); Array.Copy(pageResponse, 32, decoded.CartridgeSerialNumber, 0, 32); @@ -2205,15 +2205,11 @@ public static class EVPD List array = []; - const string fwRegExStr = @"Firmware Rev\s+=\s+(?\d+\.\d+)\s+Build date\s+=\s+(?(\w|\d|\s*.)*)\s*$"; + Regex fwRegEx = HpFirmwareRegex(); + Regex fwcRegEx = HpFirmwareConfigurationRegex(); + Regex servoRegEx = HpServoRevisionRegex(); - const string fwcRegExStr = @"FW_CONF\s+=\s+(?0x[0-9A-Fa-f]{8})\s*$"; - const string servoRegExStr = @"Servo\s+Rev\s+=\s+(?\d+\.\d+)\s*$"; - var fwRegEx = new Regex(fwRegExStr); - var fwcRegEx = new Regex(fwcRegExStr); - var servoRegEx = new Regex(servoRegExStr); - - for(int pos = 5; pos < pageResponse.Length; pos++) + for(var pos = 5; pos < pageResponse.Length; pos++) { if(pageResponse[pos] == 0x00) { @@ -2383,5 +2379,14 @@ public static class EVPD return sb.ToString(); } + [GeneratedRegex(@"Firmware Rev\s+=\s+(?\d+\.\d+)\s+Build date\s+=\s+(?(\w|\d|\s*.)*)\s*$")] + private static partial Regex HpFirmwareRegex(); + + [GeneratedRegex(@"FW_CONF\s+=\s+(?0x[0-9A-Fa-f]{8})\s*$")] + private static partial Regex HpFirmwareConfigurationRegex(); + + [GeneratedRegex(@"Servo\s+Rev\s+=\s+(?\d+\.\d+)\s*$")] + private static partial Regex HpServoRevisionRegex(); + #endregion EVPD Page 0xC0 (Seagate): Firmware numbers page } \ No newline at end of file diff --git a/Aaru.Images/ByteAddressable/NES.cs b/Aaru.Images/ByteAddressable/NES.cs index e00825042..9fb49302a 100644 --- a/Aaru.Images/ByteAddressable/NES.cs +++ b/Aaru.Images/ByteAddressable/NES.cs @@ -19,7 +19,7 @@ using Aaru.Logging; namespace Aaru.Images; [SuppressMessage("ReSharper", "UnusedType.Global")] -public class Nes : IByteAddressableImage +public partial class Nes : IByteAddressableImage { int _chrLen; int _chrNvramLen; @@ -740,7 +740,7 @@ public class Nes : IByteAddressableImage break; case LinearMemoryType.Mapper when !foundMapper: - regex = new Regex(@"NES Mapper ?(\d+)"); + regex = MapperRegex(); match = regex.Match(map.Description); if(match.Success) @@ -758,7 +758,7 @@ public class Nes : IByteAddressableImage break; case LinearMemoryType.Mapper when !foundSubMapper: - regex = new Regex(@"NES Sub-Mapper ?(\d+)"); + regex = SubmapperRegex(); match = regex.Match(map.Description); if(match.Success) @@ -869,5 +869,11 @@ public class Nes : IByteAddressableImage return ErrorNumber.NoError; } + [GeneratedRegex(@"NES Mapper ?(\d+)")] + private static partial Regex MapperRegex(); + + [GeneratedRegex(@"NES Sub-Mapper ?(\d+)")] + private static partial Regex SubmapperRegex(); + #endregion } \ No newline at end of file diff --git a/Aaru.Images/CDRDAO/Constants.cs b/Aaru.Images/CDRDAO/Constants.cs index ec8c2d07e..59b33283f 100644 --- a/Aaru.Images/CDRDAO/Constants.cs +++ b/Aaru.Images/CDRDAO/Constants.cs @@ -30,6 +30,8 @@ // Copyright © 2011-2025 Natalia Portillo // ****************************************************************************/ +using System.Text.RegularExpressions; + namespace Aaru.Images; public sealed partial class Cdrdao @@ -106,4 +108,88 @@ public sealed partial class Cdrdao const string REGEX_LANGUAGE = @"^\s*LANGUAGE\s*(?\d+)\s*\{"; const string REGEX_LANGUAGE_MAP = @"^\s*LANGUAGE_MAP\s*\{"; const string REGEX_LANGUAGE_MAPPING = @"^\s*(?\d+)\s?\:\s?(?\d+|\w+)"; + + [GeneratedRegex(REGEX_COMMENT)] + private static partial Regex CommentRegex(); + + [GeneratedRegex(REGEX_DISCTYPE)] + private static partial Regex DiscTypeRegex(); + + [GeneratedRegex(REGEX_MCN)] + private static partial Regex McnRegex(); + + [GeneratedRegex(REGEX_TRACK)] + private static partial Regex TrackRegex(); + + [GeneratedRegex(REGEX_COPY)] + private static partial Regex CopyRegex(); + + [GeneratedRegex(REGEX_EMPHASIS)] + private static partial Regex EmphasisRegex(); + + [GeneratedRegex(REGEX_STEREO)] + private static partial Regex StereoRegex(); + + [GeneratedRegex(REGEX_ISRC)] + private static partial Regex IsrcRegex(); + + [GeneratedRegex(REGEX_INDEX)] + private static partial Regex IndexRegex(); + + [GeneratedRegex(REGEX_PREGAP)] + private static partial Regex PregapRegex(); + + [GeneratedRegex(REGEX_ZERO_PREGAP)] + private static partial Regex ZeroPregapRegex(); + + [GeneratedRegex(REGEX_ZERO_DATA)] + private static partial Regex ZeroDataRegex(); + + [GeneratedRegex(REGEX_ZERO_AUDIO)] + private static partial Regex ZeroAudioRegex(); + + [GeneratedRegex(REGEX_FILE_AUDIO)] + private static partial Regex FileAudioRegex(); + + [GeneratedRegex(REGEX_FILE_DATA)] + private static partial Regex FileDataRegex(); + + [GeneratedRegex(REGEX_TITLE)] + private static partial Regex TitleRegex(); + + [GeneratedRegex(REGEX_PERFORMER)] + private static partial Regex PerformerRegex(); + + [GeneratedRegex(REGEX_SONGWRITER)] + private static partial Regex SongwriterRegex(); + + [GeneratedRegex(REGEX_COMPOSER)] + private static partial Regex ComposerRegex(); + + [GeneratedRegex(REGEX_ARRANGER)] + private static partial Regex ArrangerRegex(); + + [GeneratedRegex(REGEX_MESSAGE)] + private static partial Regex MessageRegex(); + + [GeneratedRegex(REGEX_DISC_ID)] + private static partial Regex DiscIdRegex(); + + [GeneratedRegex(REGEX_UPC)] + private static partial Regex UpcRegex(); + + [GeneratedRegex(REGEX_CD_TEXT)] + private static partial Regex CdTextRegex(); + + [GeneratedRegex(REGEX_LANGUAGE)] + private static partial Regex LanguageRegex(); + + [GeneratedRegex(REGEX_CLOSURE)] + private static partial Regex ClosureRegex(); + + [GeneratedRegex(REGEX_LANGUAGE_MAP)] + private static partial Regex LanguageMapRegex(); + + [GeneratedRegex(REGEX_LANGUAGE_MAPPING)] + private static partial Regex LanguageMappingRegex(); } \ No newline at end of file diff --git a/Aaru.Images/CDRDAO/Identify.cs b/Aaru.Images/CDRDAO/Identify.cs index 8784f489b..33cd9e4d2 100644 --- a/Aaru.Images/CDRDAO/Identify.cs +++ b/Aaru.Images/CDRDAO/Identify.cs @@ -49,14 +49,14 @@ public sealed partial class Cdrdao try { imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); - byte[] testArray = new byte[512]; + var testArray = new byte[512]; imageFilter.GetDataForkStream().EnsureRead(testArray, 0, 512); imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); // Check for unexpected control characters that shouldn't be present in a text file and can crash this plugin - bool twoConsecutiveNulls = false; + var twoConsecutiveNulls = false; - for(int i = 0; i < 512; i++) + for(var i = 0; i < 512; i++) { if(i >= imageFilter.GetDataForkStream().Length) break; @@ -75,8 +75,8 @@ public sealed partial class Cdrdao _tocStream = new StreamReader(imageFilter.GetDataForkStream()); - var cr = new Regex(REGEX_COMMENT); - var dr = new Regex(REGEX_DISCTYPE); + Regex cr = CommentRegex(); + Regex dr = DiscTypeRegex(); while(_tocStream.Peek() >= 0) { diff --git a/Aaru.Images/CDRDAO/Read.cs b/Aaru.Images/CDRDAO/Read.cs index c44f22b04..cdcbae99c 100644 --- a/Aaru.Images/CDRDAO/Read.cs +++ b/Aaru.Images/CDRDAO/Read.cs @@ -64,34 +64,34 @@ public sealed partial class Cdrdao var inTrack = false; // Initialize all RegExs - var regexComment = new Regex(REGEX_COMMENT); - var regexDiskType = new Regex(REGEX_DISCTYPE); - var regexMcn = new Regex(REGEX_MCN); - var regexTrack = new Regex(REGEX_TRACK); - var regexCopy = new Regex(REGEX_COPY); - var regexEmphasis = new Regex(REGEX_EMPHASIS); - var regexStereo = new Regex(REGEX_STEREO); - var regexIsrc = new Regex(REGEX_ISRC); - var regexIndex = new Regex(REGEX_INDEX); - var regexPregap = new Regex(REGEX_PREGAP); - var regexZeroPregap = new Regex(REGEX_ZERO_PREGAP); - var regexZeroData = new Regex(REGEX_ZERO_DATA); - var regexZeroAudio = new Regex(REGEX_ZERO_AUDIO); - var regexAudioFile = new Regex(REGEX_FILE_AUDIO); - var regexFile = new Regex(REGEX_FILE_DATA); - var regexTitle = new Regex(REGEX_TITLE); - var regexPerformer = new Regex(REGEX_PERFORMER); - var regexSongwriter = new Regex(REGEX_SONGWRITER); - var regexComposer = new Regex(REGEX_COMPOSER); - var regexArranger = new Regex(REGEX_ARRANGER); - var regexMessage = new Regex(REGEX_MESSAGE); - var regexDiscId = new Regex(REGEX_DISC_ID); - var regexUpc = new Regex(REGEX_UPC); - var regexCdText = new Regex(REGEX_CD_TEXT); - var regexLanguage = new Regex(REGEX_LANGUAGE); - var regexClosure = new Regex(REGEX_CLOSURE); - var regexLanguageMap = new Regex(REGEX_LANGUAGE_MAP); - var regexLanguageMapping = new Regex(REGEX_LANGUAGE_MAPPING); + Regex regexComment = CommentRegex(); + Regex regexDiskType = DiscTypeRegex(); + Regex regexMcn = McnRegex(); + Regex regexTrack = TrackRegex(); + Regex regexCopy = CopyRegex(); + Regex regexEmphasis = EmphasisRegex(); + Regex regexStereo = StereoRegex(); + Regex regexIsrc = IsrcRegex(); + Regex regexIndex = IndexRegex(); + Regex regexPregap = PregapRegex(); + Regex regexZeroPregap = ZeroPregapRegex(); + Regex regexZeroData = ZeroDataRegex(); + Regex regexZeroAudio = ZeroAudioRegex(); + Regex regexAudioFile = FileAudioRegex(); + Regex regexFile = FileDataRegex(); + Regex regexTitle = TitleRegex(); + Regex regexPerformer = PerformerRegex(); + Regex regexSongwriter = SongwriterRegex(); + Regex regexComposer = ComposerRegex(); + Regex regexArranger = ArrangerRegex(); + Regex regexMessage = MessageRegex(); + Regex regexDiscId = DiscIdRegex(); + Regex regexUpc = UpcRegex(); + Regex regexCdText = CdTextRegex(); + Regex regexLanguage = LanguageRegex(); + Regex regexClosure = ClosureRegex(); + Regex regexLanguageMap = LanguageMapRegex(); + Regex regexLanguageMapping = LanguageMappingRegex(); // Initialize all RegEx matches Match matchComment; diff --git a/Aaru.Images/CDRWin/Constants.cs b/Aaru.Images/CDRWin/Constants.cs index 7db40a2f6..477b11acf 100644 --- a/Aaru.Images/CDRWin/Constants.cs +++ b/Aaru.Images/CDRWin/Constants.cs @@ -30,6 +30,8 @@ // Copyright © 2011-2025 Natalia Portillo // ****************************************************************************/ +using System.Text.RegularExpressions; + namespace Aaru.Images; public sealed partial class CdrWin @@ -181,4 +183,118 @@ public sealed partial class CdrWin const string REGEX_APPLICATION_VERSION = @"\bREM\s+Ripping Tool Version:\s+(?.+)$"; const string REGEX_DUMP_EXTENT = @"\bREM\s+METADATA DUMP EXTENT:\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?.+)\s+\|\s+(?\d+):(?\d+)$"; + + [GeneratedRegex(REGEX_SESSION)] + private static partial Regex SessionRegex(); + + [GeneratedRegex(REGEX_COMMENT)] + private static partial Regex CommentRegex(); + + [GeneratedRegex(REGEX_MCN)] + private static partial Regex McnRegex(); + + [GeneratedRegex(REGEX_FILE)] + private static partial Regex FileRegex(); + + [GeneratedRegex(REGEX_CDTEXT)] + private static partial Regex CdtextRegex(); + + [GeneratedRegex(REGEX_MEDIA_TYPE)] + private static partial Regex MediaTypeRegex(); + + [GeneratedRegex(REGEX_LEAD_OUT)] + private static partial Regex LeadOutRegex(); + + [GeneratedRegex(REGEX_LBA)] + private static partial Regex LbaRegex(); + + [GeneratedRegex(REGEX_DISC_ID)] + private static partial Regex DiscIdRegex(); + + [GeneratedRegex(REGEX_BARCODE)] + private static partial Regex BarcodeRegex(); + + [GeneratedRegex(REGEX_TITLE)] + private static partial Regex TitleRegex(); + + [GeneratedRegex(REGEX_GENRE)] + private static partial Regex GenreRegex(); + + [GeneratedRegex(REGEX_ARRANGER)] + private static partial Regex ArrangerRegex(); + + [GeneratedRegex(REGEX_COMPOSER)] + private static partial Regex ComposerRegex(); + + [GeneratedRegex(REGEX_PERFORMER)] + private static partial Regex PerformerRegex(); + + [GeneratedRegex(REGEX_SONGWRITER)] + private static partial Regex SongwriterRegex(); + + [GeneratedRegex(REGEX_TRACK)] + private static partial Regex TrackRegex(); + + [GeneratedRegex(REGEX_ISRC)] + private static partial Regex IsrcRegex(); + + [GeneratedRegex(REGEX_INDEX)] + private static partial Regex IndexRegex(); + + [GeneratedRegex(REGEX_PREGAP)] + private static partial Regex PregapRegex(); + + [GeneratedRegex(REGEX_POSTGAP)] + private static partial Regex PostgapRegex(); + + [GeneratedRegex(REGEX_FLAGS)] + private static partial Regex FlagsRegex(); + + [GeneratedRegex(REGEX_APPLICATION)] + private static partial Regex ApplicationRegex(); + + [GeneratedRegex(REGEX_TRURIP_DISC_HASHES)] + private static partial Regex TruripDiscHashesRegex(); + + [GeneratedRegex(REGEX_TRURIP_DISC_CRC32)] + private static partial Regex TruripDiscCrc32Regex(); + + [GeneratedRegex(REGEX_TRURIP_DISC_MD5)] + private static partial Regex TruripDiscMd5Regex(); + + [GeneratedRegex(REGEX_TRURIP_DISC_SHA1)] + private static partial Regex TruripDiscSha1Regex(); + + [GeneratedRegex(REGEX_TRURIP_TRACK_METHOD)] + private static partial Regex TruripTrackMethodRegex(); + + [GeneratedRegex(REGEX_TRURIP_TRACK_CRC32)] + private static partial Regex TruripTrackCrc32Regex(); + + [GeneratedRegex(REGEX_TRURIP_TRACK_MD5)] + private static partial Regex TruripTrackMd5Regex(); + + [GeneratedRegex(REGEX_TRURIP_TRACK_SHA1)] + private static partial Regex TruripTrackSha1Regex(); + + [GeneratedRegex(REGEX_TRURIP_TRACK_UNKNOWN)] + private static partial Regex TruripTrackUnknownRegex(); + + [GeneratedRegex(REGEX_DIC_MEDIA_TYPE)] + private static partial Regex DicMediaTypeRegex(); + + [GeneratedRegex(REGEX_APPLICATION_VERSION)] + private static partial Regex ApplicationVersionRegex(); + + [GeneratedRegex(REGEX_DUMP_EXTENT)] + private static partial Regex DumpExtentRegex(); + + [GeneratedRegex(REGEX_AARU_MEDIA_TYPE)] + private static partial Regex AaruMediaTypeRegex(); + + [GeneratedRegex(REGEX_REDUMP_SD_AREA)] + private static partial Regex RedumpSdAreaRegex(); + + [GeneratedRegex(REGEX_REDUMP_HD_AREA)] + private static partial Regex RedumpHdAreaRegex(); } \ No newline at end of file diff --git a/Aaru.Images/CDRWin/Identify.cs b/Aaru.Images/CDRWin/Identify.cs index bffd31e73..1ee7bf8fe 100644 --- a/Aaru.Images/CDRWin/Identify.cs +++ b/Aaru.Images/CDRWin/Identify.cs @@ -52,14 +52,14 @@ public sealed partial class CdrWin try { imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); - byte[] testArray = new byte[512]; + var testArray = new byte[512]; imageFilter.GetDataForkStream().EnsureRead(testArray, 0, 512); imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); // Check for unexpected control characters that shouldn't be present in a text file and can crash this plugin - bool twoConsecutiveNulls = false; + var twoConsecutiveNulls = false; - for(int i = 0; i < 512; i++) + for(var i = 0; i < 512; i++) { if(i >= imageFilter.GetDataForkStream().Length) break; @@ -82,11 +82,11 @@ public sealed partial class CdrWin { string line = _cueStream.ReadLine(); - var sr = new Regex(REGEX_SESSION); - var rr = new Regex(REGEX_COMMENT); - var cr = new Regex(REGEX_MCN); - var fr = new Regex(REGEX_FILE); - var tr = new Regex(REGEX_CDTEXT); + Regex sr = SessionRegex(); + Regex rr = CommentRegex(); + Regex cr = McnRegex(); + Regex fr = FileRegex(); + Regex tr = CdtextRegex(); // First line must be SESSION, REM, CATALOG, FILE or CDTEXTFILE. Match sm = sr.Match(line ?? ""); diff --git a/Aaru.Images/CDRWin/Read.cs b/Aaru.Images/CDRWin/Read.cs index af1f7c198..7cba29d38 100644 --- a/Aaru.Images/CDRWin/Read.cs +++ b/Aaru.Images/CDRWin/Read.cs @@ -70,44 +70,44 @@ public sealed partial class CdrWin byte currentSession = 1; // Initialize all RegExs - var regexSession = new Regex(REGEX_SESSION); - var regexDiskType = new Regex(REGEX_MEDIA_TYPE); - var regexLeadOut = new Regex(REGEX_LEAD_OUT); - var regexLba = new Regex(REGEX_LBA); - var regexDiskId = new Regex(REGEX_DISC_ID); - var regexBarCode = new Regex(REGEX_BARCODE); - var regexComment = new Regex(REGEX_COMMENT); - var regexCdText = new Regex(REGEX_CDTEXT); - var regexMcn = new Regex(REGEX_MCN); - var regexTitle = new Regex(REGEX_TITLE); - var regexGenre = new Regex(REGEX_GENRE); - var regexArranger = new Regex(REGEX_ARRANGER); - var regexComposer = new Regex(REGEX_COMPOSER); - var regexPerformer = new Regex(REGEX_PERFORMER); - var regexSongWriter = new Regex(REGEX_SONGWRITER); - var regexFile = new Regex(REGEX_FILE); - var regexTrack = new Regex(REGEX_TRACK); - var regexIsrc = new Regex(REGEX_ISRC); - var regexIndex = new Regex(REGEX_INDEX); - var regexPregap = new Regex(REGEX_PREGAP); - var regexPostgap = new Regex(REGEX_POSTGAP); - var regexFlags = new Regex(REGEX_FLAGS); - var regexApplication = new Regex(REGEX_APPLICATION); - var regexTruripDisc = new Regex(REGEX_TRURIP_DISC_HASHES); - var regexTruripDiscCrc32 = new Regex(REGEX_TRURIP_DISC_CRC32); - var regexTruripDiscMd5 = new Regex(REGEX_TRURIP_DISC_MD5); - var regexTruripDiscSha1 = new Regex(REGEX_TRURIP_DISC_SHA1); - var regexTruripTrack = new Regex(REGEX_TRURIP_TRACK_METHOD); - var regexTruripTrackCrc32 = new Regex(REGEX_TRURIP_TRACK_CRC32); - var regexTruripTrackMd5 = new Regex(REGEX_TRURIP_TRACK_MD5); - var regexTruripTrackSha1 = new Regex(REGEX_TRURIP_TRACK_SHA1); - var regexTruripTrackUnknownHash = new Regex(REGEX_TRURIP_TRACK_UNKNOWN); - var regexDicMediaType = new Regex(REGEX_DIC_MEDIA_TYPE); - var regexApplicationVersion = new Regex(REGEX_APPLICATION_VERSION); - var regexDumpExtent = new Regex(REGEX_DUMP_EXTENT); - var regexAaruMediaType = new Regex(REGEX_AARU_MEDIA_TYPE); - var regexRedumpSdArea = new Regex(REGEX_REDUMP_SD_AREA); - var regexRedumpHdArea = new Regex(REGEX_REDUMP_HD_AREA); + Regex regexSession = SessionRegex(); + Regex regexDiskType = MediaTypeRegex(); + Regex regexLeadOut = LeadOutRegex(); + Regex regexLba = LbaRegex(); + Regex regexDiskId = DiscIdRegex(); + Regex regexBarCode = BarcodeRegex(); + Regex regexComment = CommentRegex(); + Regex regexCdText = CdtextRegex(); + Regex regexMcn = McnRegex(); + Regex regexTitle = TitleRegex(); + Regex regexGenre = GenreRegex(); + Regex regexArranger = ArrangerRegex(); + Regex regexComposer = ComposerRegex(); + Regex regexPerformer = PerformerRegex(); + Regex regexSongWriter = SongwriterRegex(); + Regex regexFile = FileRegex(); + Regex regexTrack = TrackRegex(); + Regex regexIsrc = IsrcRegex(); + Regex regexIndex = IndexRegex(); + Regex regexPregap = PregapRegex(); + Regex regexPostgap = PostgapRegex(); + Regex regexFlags = FlagsRegex(); + Regex regexApplication = ApplicationRegex(); + Regex regexTruripDisc = TruripDiscHashesRegex(); + Regex regexTruripDiscCrc32 = TruripDiscCrc32Regex(); + Regex regexTruripDiscMd5 = TruripDiscMd5Regex(); + Regex regexTruripDiscSha1 = TruripDiscSha1Regex(); + Regex regexTruripTrack = TruripTrackMethodRegex(); + Regex regexTruripTrackCrc32 = TruripTrackCrc32Regex(); + Regex regexTruripTrackMd5 = TruripTrackMd5Regex(); + Regex regexTruripTrackSha1 = TruripTrackSha1Regex(); + Regex regexTruripTrackUnknownHash = TruripTrackUnknownRegex(); + Regex regexDicMediaType = DicMediaTypeRegex(); + Regex regexApplicationVersion = ApplicationVersionRegex(); + Regex regexDumpExtent = DumpExtentRegex(); + Regex regexAaruMediaType = AaruMediaTypeRegex(); + Regex regexRedumpSdArea = RedumpSdAreaRegex(); + Regex regexRedumpHdArea = RedumpHdAreaRegex(); // Initialize all RegEx matches Match matchTrack; diff --git a/Aaru.Images/CHD/Constants.cs b/Aaru.Images/CHD/Constants.cs index cbac4862e..08d8d702c 100644 --- a/Aaru.Images/CHD/Constants.cs +++ b/Aaru.Images/CHD/Constants.cs @@ -31,6 +31,7 @@ // ****************************************************************************/ using System.Diagnostics.CodeAnalysis; +using System.Text.RegularExpressions; namespace Aaru.Images; @@ -92,4 +93,16 @@ public sealed partial class Chd const string TRACK_TYPE_AUDIO = "AUDIO"; // ReSharper restore InconsistentNaming + + [GeneratedRegex(REGEX_METADATA_HDD)] + private static partial Regex MetadataHddRegex(); + + [GeneratedRegex(REGEX_METADATA_CDROM)] + private static partial Regex MetadataCdromRegex(); + + [GeneratedRegex(REGEX_METADATA_CDROM2)] + private static partial Regex MetadataCdrom2Regex(); + + [GeneratedRegex(REGEX_METADATA_GDROM)] + private static partial Regex MetadataGdromRegex(); } \ No newline at end of file diff --git a/Aaru.Images/CHD/Read.cs b/Aaru.Images/CHD/Read.cs index 481e2a4db..2096098b7 100644 --- a/Aaru.Images/CHD/Read.cs +++ b/Aaru.Images/CHD/Read.cs @@ -498,7 +498,7 @@ public sealed partial class Chd } string gddd = StringHandlers.CToString(meta); - var gdddRegEx = new Regex(REGEX_METADATA_HDD); + Regex gdddRegEx = MetadataHddRegex(); Match gdddMatch = gdddRegEx.Match(gddd); if(gdddMatch.Success) @@ -671,7 +671,7 @@ public sealed partial class Chd } string chtr = StringHandlers.CToString(meta); - var chtrRegEx = new Regex(REGEX_METADATA_CDROM); + Regex chtrRegEx = MetadataCdromRegex(); Match chtrMatch = chtrRegEx.Match(chtr); if(chtrMatch.Success) @@ -816,7 +816,7 @@ public sealed partial class Chd } string cht2 = StringHandlers.CToString(meta); - var cht2RegEx = new Regex(REGEX_METADATA_CDROM2); + Regex cht2RegEx = MetadataCdrom2Regex(); Match cht2Match = cht2RegEx.Match(cht2); if(cht2Match.Success) @@ -1001,7 +1001,7 @@ public sealed partial class Chd } string chgd = StringHandlers.CToString(meta); - var chgdRegEx = new Regex(REGEX_METADATA_GDROM); + Regex chgdRegEx = MetadataGdromRegex(); Match chgdMatch = chgdRegEx.Match(chgd); if(chgdMatch.Success) diff --git a/Aaru.Images/CloneCD/Constants.cs b/Aaru.Images/CloneCD/Constants.cs index fb8bbf453..9f8858878 100644 --- a/Aaru.Images/CloneCD/Constants.cs +++ b/Aaru.Images/CloneCD/Constants.cs @@ -30,6 +30,8 @@ // Copyright © 2011-2025 Natalia Portillo // ****************************************************************************/ +using System.Text.RegularExpressions; + namespace Aaru.Images; public sealed partial class CloneCd @@ -66,4 +68,100 @@ public sealed partial class CloneCd const string CDTEXT_ENTRY = @"^\s*Entry\s*(?\d+)\s*=\s*(?([0-9a-fA-F]+\s*)+)"; const string TRACK_MODE = @"^\s*MODE\s*=\s*(?\d+)"; const string TRACK_INDEX = @"^\s*INDEX\s*(?\d+)\s*=\s*(?\d+)"; + + [GeneratedRegex(CCD_IDENTIFIER)] + private static partial Regex CcdIdentifierRegex(); + + [GeneratedRegex(DISC_IDENTIFIER)] + private static partial Regex DiscIdentifierRegex(); + + [GeneratedRegex(SESSION_IDENTIFIER)] + private static partial Regex SessionIdentifierRegex(); + + [GeneratedRegex(ENTRY_IDENTIFIER)] + private static partial Regex EntryIdentifierRegex(); + + [GeneratedRegex(TRACK_IDENTIFIER)] + private static partial Regex TrackIdentifierRegex(); + + [GeneratedRegex(CDTEXT_IDENTIFIER)] + private static partial Regex CdtextIdentifierRegex(); + + [GeneratedRegex(CCD_VERSION)] + private static partial Regex CcdVersionRegex(); + + [GeneratedRegex(DISC_ENTRIES)] + private static partial Regex DiscEntriesRegex(); + + [GeneratedRegex(DISC_SESSIONS)] + private static partial Regex DiscSessionsRegex(); + + [GeneratedRegex(DISC_SCRAMBLED)] + private static partial Regex DiscScrambledRegex(); + + [GeneratedRegex(CDTEXT_LENGTH)] + private static partial Regex CdtextLengthRegex(); + + [GeneratedRegex(DISC_CATALOG)] + private static partial Regex DiscCatalogRegex(); + + [GeneratedRegex(SESSION_PREGAP)] + private static partial Regex SesionPregapRegex(); + + [GeneratedRegex(SESSION_SUBCHANNEL)] + private static partial Regex SessionSubchannelRegex(); + + [GeneratedRegex(ENTRY_SESSION)] + private static partial Regex EntrySessionRegex(); + + [GeneratedRegex(ENTRY_POINT)] + private static partial Regex EntryPointRegex(); + + [GeneratedRegex(ENTRY_ADR)] + private static partial Regex EntryAdrRegex(); + + [GeneratedRegex(ENTRY_CONTROL)] + private static partial Regex EntryControlRegex(); + + [GeneratedRegex(ENTRY_TRACKNO)] + private static partial Regex EntryTracknoRegex(); + + [GeneratedRegex(ENTRY_AMIN)] + private static partial Regex EntryAminRegex(); + + [GeneratedRegex(ENTRY_ASEC)] + private static partial Regex EntryAsecRegex(); + + [GeneratedRegex(ENTRY_AFRAME)] + private static partial Regex EntryAframeRegex(); + + [GeneratedRegex(ENTRY_ALBA)] + private static partial Regex EntryAlbaRegex(); + + [GeneratedRegex(ENTRY_ZERO)] + private static partial Regex EntryZeroRegex(); + + [GeneratedRegex(ENTRY_PMIN)] + private static partial Regex EntryPminRegex(); + + [GeneratedRegex(ENTRY_PSEC)] + private static partial Regex EntryPsecRegex(); + + [GeneratedRegex(ENTRY_PFRAME)] + private static partial Regex EntryPframeRegex(); + + [GeneratedRegex(ENTRY_PLBA)] + private static partial Regex EntryPlbaRegex(); + + [GeneratedRegex(CDTEXT_ENTRIES)] + private static partial Regex CdtextEntriesRegex(); + + [GeneratedRegex(CDTEXT_ENTRY)] + private static partial Regex CdtextEntryRegex(); + + [GeneratedRegex(TRACK_MODE)] + private static partial Regex TrackModeRegex(); + + [GeneratedRegex(TRACK_INDEX)] + private static partial Regex TrackIndexRegex(); } \ No newline at end of file diff --git a/Aaru.Images/CloneCD/Identify.cs b/Aaru.Images/CloneCD/Identify.cs index 0d8fa668b..f3238c60c 100644 --- a/Aaru.Images/CloneCD/Identify.cs +++ b/Aaru.Images/CloneCD/Identify.cs @@ -51,14 +51,14 @@ public sealed partial class CloneCd try { imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); - byte[] testArray = new byte[512]; + var testArray = new byte[512]; imageFilter.GetDataForkStream().EnsureRead(testArray, 0, 512); imageFilter.GetDataForkStream().Seek(0, SeekOrigin.Begin); // Check for unexpected control characters that shouldn't be present in a text file and can crash this plugin - bool twoConsecutiveNulls = false; + var twoConsecutiveNulls = false; - for(int i = 0; i < 512; i++) + for(var i = 0; i < 512; i++) { if(i >= imageFilter.GetDataForkStream().Length) break; @@ -79,7 +79,7 @@ public sealed partial class CloneCd string line = _cueStream.ReadLine(); - var hdr = new Regex(CCD_IDENTIFIER); + Regex hdr = CcdIdentifierRegex(); Match hdm = hdr.Match(line ?? ""); diff --git a/Aaru.Images/CloneCD/Read.cs b/Aaru.Images/CloneCD/Read.cs index 47d0649f3..4a9633664 100644 --- a/Aaru.Images/CloneCD/Read.cs +++ b/Aaru.Images/CloneCD/Read.cs @@ -64,38 +64,38 @@ public sealed partial class CloneCd _cueStream = new StreamReader(imageFilter.GetDataForkStream()); var lineNumber = 0; - var ccdIdRegex = new Regex(CCD_IDENTIFIER); - var discIdRegex = new Regex(DISC_IDENTIFIER); - var sessIdRegex = new Regex(SESSION_IDENTIFIER); - var entryIdRegex = new Regex(ENTRY_IDENTIFIER); - var trackIdRegex = new Regex(TRACK_IDENTIFIER); - var cdtIdRegex = new Regex(CDTEXT_IDENTIFIER); - var ccdVerRegex = new Regex(CCD_VERSION); - var discEntRegex = new Regex(DISC_ENTRIES); - var discSessRegex = new Regex(DISC_SESSIONS); - var discScrRegex = new Regex(DISC_SCRAMBLED); - var cdtLenRegex = new Regex(CDTEXT_LENGTH); - var discCatRegex = new Regex(DISC_CATALOG); - var sessPregRegex = new Regex(SESSION_PREGAP); - var sessSubcRegex = new Regex(SESSION_SUBCHANNEL); - var entSessRegex = new Regex(ENTRY_SESSION); - var entPointRegex = new Regex(ENTRY_POINT); - var entAdrRegex = new Regex(ENTRY_ADR); - var entCtrlRegex = new Regex(ENTRY_CONTROL); - var entTnoRegex = new Regex(ENTRY_TRACKNO); - var entAMinRegex = new Regex(ENTRY_AMIN); - var entASecRegex = new Regex(ENTRY_ASEC); - var entAFrameRegex = new Regex(ENTRY_AFRAME); - var entAlbaRegex = new Regex(ENTRY_ALBA); - var entZeroRegex = new Regex(ENTRY_ZERO); - var entPMinRegex = new Regex(ENTRY_PMIN); - var entPSecRegex = new Regex(ENTRY_PSEC); - var entPFrameRegex = new Regex(ENTRY_PFRAME); - var entPlbaRegex = new Regex(ENTRY_PLBA); - var cdtEntsRegex = new Regex(CDTEXT_ENTRIES); - var cdtEntRegex = new Regex(CDTEXT_ENTRY); - var trkModeRegex = new Regex(TRACK_MODE); - var trkIndexRegex = new Regex(TRACK_INDEX); + Regex ccdIdRegex = CcdIdentifierRegex(); + Regex discIdRegex = DiscIdentifierRegex(); + Regex sessIdRegex = SessionIdentifierRegex(); + Regex entryIdRegex = EntryIdentifierRegex(); + Regex trackIdRegex = TrackIdentifierRegex(); + Regex cdtIdRegex = CdtextIdentifierRegex(); + Regex ccdVerRegex = CcdVersionRegex(); + Regex discEntRegex = DiscEntriesRegex(); + Regex discSessRegex = DiscSessionsRegex(); + Regex discScrRegex = DiscScrambledRegex(); + Regex cdtLenRegex = CdtextLengthRegex(); + Regex discCatRegex = DiscCatalogRegex(); + Regex sessPregRegex = SesionPregapRegex(); + Regex sessSubcRegex = SessionSubchannelRegex(); + Regex entSessRegex = EntrySessionRegex(); + Regex entPointRegex = EntryPointRegex(); + Regex entAdrRegex = EntryAdrRegex(); + Regex entCtrlRegex = EntryControlRegex(); + Regex entTnoRegex = EntryTracknoRegex(); + Regex entAMinRegex = EntryAminRegex(); + Regex entASecRegex = EntryAsecRegex(); + Regex entAFrameRegex = EntryAframeRegex(); + Regex entAlbaRegex = EntryAlbaRegex(); + Regex entZeroRegex = EntryZeroRegex(); + Regex entPMinRegex = EntryPminRegex(); + Regex entPSecRegex = EntryPsecRegex(); + Regex entPFrameRegex = EntryPframeRegex(); + Regex entPlbaRegex = EntryPlbaRegex(); + Regex cdtEntsRegex = CdtextEntriesRegex(); + Regex cdtEntRegex = CdtextEntryRegex(); + Regex trkModeRegex = TrackModeRegex(); + Regex trkIndexRegex = TrackIndexRegex(); var inCcd = false; var inDisk = false; diff --git a/Aaru.Images/CopyTape/Constants.cs b/Aaru.Images/CopyTape/Constants.cs index 0282a47e9..1689fa2e4 100644 --- a/Aaru.Images/CopyTape/Constants.cs +++ b/Aaru.Images/CopyTape/Constants.cs @@ -30,6 +30,8 @@ // Copyright © 2011-2025 Natalia Portillo // ****************************************************************************/ +using System.Text.RegularExpressions; + namespace Aaru.Images; public sealed partial class CopyTape @@ -38,4 +40,16 @@ public sealed partial class CopyTape const string PARTIAL_BLOCK_REGEX = @"^CPTP:BLK $"; const string FILEMARK_REGEX = @"^CPTP:MRK\n$"; const string END_OF_TAPE_REGEX = @"^CPTP:EOT\n$"; + + [GeneratedRegex(BLOCK_REGEX)] + private static partial Regex BlockRegex(); + + [GeneratedRegex(PARTIAL_BLOCK_REGEX)] + private static partial Regex PartialBlockRegex(); + + [GeneratedRegex(FILEMARK_REGEX)] + private static partial Regex FilemarkRegex(); + + [GeneratedRegex(END_OF_TAPE_REGEX)] + private static partial Regex EndOfTapeRegex(); } \ No newline at end of file diff --git a/Aaru.Images/CopyTape/Identify.cs b/Aaru.Images/CopyTape/Identify.cs index 1fdf7380b..6d2488d31 100644 --- a/Aaru.Images/CopyTape/Identify.cs +++ b/Aaru.Images/CopyTape/Identify.cs @@ -55,7 +55,7 @@ public sealed partial class CopyTape string mark = Encoding.ASCII.GetString(header); - var blockRx = new Regex(BLOCK_REGEX); + Regex blockRx = BlockRegex(); Match blockMt = blockRx.Match(mark); if(!blockMt.Success) return false; diff --git a/Aaru.Images/CopyTape/Read.cs b/Aaru.Images/CopyTape/Read.cs index e4399d889..1f5e9438d 100644 --- a/Aaru.Images/CopyTape/Read.cs +++ b/Aaru.Images/CopyTape/Read.cs @@ -51,10 +51,10 @@ public sealed partial class CopyTape public ErrorNumber Open(IFilter imageFilter) { List blockPositions = []; - var partialBlockRx = new Regex(PARTIAL_BLOCK_REGEX); - var blockRx = new Regex(BLOCK_REGEX); - var filemarkRx = new Regex(FILEMARK_REGEX); - var eotRx = new Regex(END_OF_TAPE_REGEX); + Regex partialBlockRx = PartialBlockRegex(); + Regex blockRx = BlockRegex(); + Regex filemarkRx = FilemarkRegex(); + Regex eotRx = EndOfTapeRegex(); if(imageFilter.DataForkLength <= 16) return ErrorNumber.InvalidArgument; diff --git a/Aaru.Images/DART/Constants.cs b/Aaru.Images/DART/Constants.cs index eeb34a94d..1853aaa4b 100644 --- a/Aaru.Images/DART/Constants.cs +++ b/Aaru.Images/DART/Constants.cs @@ -31,6 +31,7 @@ // ****************************************************************************/ using System.Diagnostics.CodeAnalysis; +using System.Text.RegularExpressions; namespace Aaru.Images; @@ -77,4 +78,7 @@ public sealed partial class Dart const string DART_REGEX = @"(?\S+), tag checksum=\$(?[0123456789ABCDEF]{8}), data checksum=\$(?[0123456789ABCDEF]{8})$"; + + [GeneratedRegex(DART_REGEX)] + private static partial Regex DartRegex(); } \ No newline at end of file diff --git a/Aaru.Images/DART/Read.cs b/Aaru.Images/DART/Read.cs index 4b4a7c573..cf44209f0 100644 --- a/Aaru.Images/DART/Read.cs +++ b/Aaru.Images/DART/Read.cs @@ -216,7 +216,7 @@ public sealed partial class Dart string dArt = StringHandlers.PascalToString(dartRsrc.GetResource(dartRsrc.GetIds()[0]), Encoding.GetEncoding("macintosh")); - var dArtEx = new Regex(DART_REGEX); + Regex dArtEx = DartRegex(); Match dArtMatch = dArtEx.Match(dArt); if(dArtMatch.Success) diff --git a/Aaru.Images/DiskCopy42/Constants.cs b/Aaru.Images/DiskCopy42/Constants.cs index 2a75e484a..c4b14ecf9 100644 --- a/Aaru.Images/DiskCopy42/Constants.cs +++ b/Aaru.Images/DiskCopy42/Constants.cs @@ -32,6 +32,8 @@ // ReSharper disable InconsistentNaming +using System.Text.RegularExpressions; + namespace Aaru.Images; public sealed partial class DiskCopy42 @@ -82,4 +84,7 @@ public sealed partial class DiskCopy42 /// Used incorrectly by Mac OS X with certaing disk images const byte kMacOSXFmtByte = 0x00; const string REGEX_DCPY = @"(?\S+)\s(?\S+)\rData checksum=\$(?\S+)$"; + + [GeneratedRegex(REGEX_DCPY)] + private static partial Regex DcpyRegex(); } \ No newline at end of file diff --git a/Aaru.Images/DiskCopy42/Read.cs b/Aaru.Images/DiskCopy42/Read.cs index 367aed760..fc2dd6819 100644 --- a/Aaru.Images/DiskCopy42/Read.cs +++ b/Aaru.Images/DiskCopy42/Read.cs @@ -305,7 +305,7 @@ public sealed partial class DiskCopy42 string dCpy = StringHandlers.PascalToString(dCpyRsrc.GetResource(dCpyRsrc.GetIds()[0]), Encoding.GetEncoding("macintosh")); - var dCpyEx = new Regex(REGEX_DCPY); + Regex dCpyEx = DcpyRegex(); Match dCpyMatch = dCpyEx.Match(dCpy); if(dCpyMatch.Success) diff --git a/Aaru.Images/DriDiskCopy/Constants.cs b/Aaru.Images/DriDiskCopy/Constants.cs index c221620ca..0f57c237f 100644 --- a/Aaru.Images/DriDiskCopy/Constants.cs +++ b/Aaru.Images/DriDiskCopy/Constants.cs @@ -30,9 +30,14 @@ // Copyright © 2011-2025 Natalia Portillo // ****************************************************************************/ +using System.Text.RegularExpressions; + namespace Aaru.Images; public sealed partial class DriDiskCopy { const string REGEX_DRI = @"DiskImage\s(?\d+.\d+)\s\(C\)\s\d+\,*\d*\s+Digital Research Inc"; + + [GeneratedRegex(REGEX_DRI)] + private static partial Regex DriRegex(); } \ No newline at end of file diff --git a/Aaru.Images/DriDiskCopy/Identify.cs b/Aaru.Images/DriDiskCopy/Identify.cs index 9005b2c0e..4069bdae2 100644 --- a/Aaru.Images/DriDiskCopy/Identify.cs +++ b/Aaru.Images/DriDiskCopy/Identify.cs @@ -49,7 +49,7 @@ public sealed partial class DriDiskCopy if((stream.Length - Marshal.SizeOf