From 59abcded745c833534306bd86b32909a234f70bf Mon Sep 17 00:00:00 2001 From: David Ruhmann Date: Wed, 19 Aug 2015 17:17:50 -0500 Subject: [PATCH] add nameparser parameter support parameter = {n} for entries i, ra, rn. --- .../Extensions/StringExtensions.cs | 15 +++++++++++ ShareX.HelpersLib/Helpers/Helpers.cs | 10 +++++++ ShareX.HelpersLib/NameParser.cs | 26 +++++++++++++++++++ .../Properties/Resources.Designer.cs | 6 ++--- ShareX.HelpersLib/Properties/Resources.resx | 6 ++--- 5 files changed, 57 insertions(+), 6 deletions(-) diff --git a/ShareX.HelpersLib/Extensions/StringExtensions.cs b/ShareX.HelpersLib/Extensions/StringExtensions.cs index 699031e27..faa5ca008 100644 --- a/ShareX.HelpersLib/Extensions/StringExtensions.cs +++ b/ShareX.HelpersLib/Extensions/StringExtensions.cs @@ -24,6 +24,7 @@ #endregion License Information (GPL v3) using System; +using System.Collections.Generic; using System.Text; namespace ShareX.HelpersLib @@ -266,5 +267,19 @@ public static string[] Lines(this string text) { return text.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); } + + public static IEnumerable> ForEachBetween(this string text, string front, string back) + { + int f = 0; + int b = 0; + while (text.Length > f + && 0 < (f = text.IndexOf(front, f)) + && 0 < (b = text.IndexOf(back, f + front.Length))) + { + string result = text.Substring(f, (b + back.Length) - f); + yield return new Tuple(result, result.Substring(front.Length, (result.Length - back.Length) - front.Length)); + f += front.Length; + } + } } } \ No newline at end of file diff --git a/ShareX.HelpersLib/Helpers/Helpers.cs b/ShareX.HelpersLib/Helpers/Helpers.cs index b46849668..d22c38775 100644 --- a/ShareX.HelpersLib/Helpers/Helpers.cs +++ b/ShareX.HelpersLib/Helpers/Helpers.cs @@ -881,5 +881,15 @@ public static bool IsAdministrator() { return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator); } + + public static string RepeatGenerator(int count, Func generator) + { + string result = ""; + for (int x = count; x > 0; x--) + { + result += generator(); + } + return result; + } } } \ No newline at end of file diff --git a/ShareX.HelpersLib/NameParser.cs b/ShareX.HelpersLib/NameParser.cs index 1e69bfbf6..de64ba432 100644 --- a/ShareX.HelpersLib/NameParser.cs +++ b/ShareX.HelpersLib/NameParser.cs @@ -25,6 +25,7 @@ using ShareX.HelpersLib.Properties; using System; +using System.Collections.Generic; using System.Drawing; using System.Globalization; using System.Text; @@ -177,6 +178,10 @@ public string Parse(string pattern) if (sb.ToString().Contains(ReplCodeMenuEntry.i.ToPrefixString())) { AutoIncrementNumber++; + foreach (Tuple entry in ListEntryWithValue(sb.ToString(), ReplCodeMenuEntry.i.ToPrefixString())) + { + sb.Replace(entry.Item1, Helpers.AddZeroes(AutoIncrementNumber, Math.Max(0, entry.Item2))); + } sb.Replace(ReplCodeMenuEntry.i.ToPrefixString(), AutoIncrementNumber.ToString()); } @@ -191,6 +196,15 @@ public string Parse(string pattern) string result = sb.ToString(); + foreach (Tuple entry in ListEntryWithValue(result, ReplCodeMenuEntry.rn.ToPrefixString())) + { + result = result.ReplaceAll(entry.Item1, () => Helpers.RepeatGenerator(entry.Item2, () => Helpers.GetRandomChar(Helpers.Numbers).ToString())); + } + foreach (Tuple entry in ListEntryWithValue(result, ReplCodeMenuEntry.ra.ToPrefixString())) + { + result = result.ReplaceAll(entry.Item1, () => Helpers.RepeatGenerator(entry.Item2, () => Helpers.GetRandomChar(Helpers.Alphanumeric).ToString())); + } + result = result.ReplaceAll(ReplCodeMenuEntry.rn.ToPrefixString(), () => Helpers.GetRandomChar(Helpers.Numbers).ToString()); result = result.ReplaceAll(ReplCodeMenuEntry.ra.ToPrefixString(), () => Helpers.GetRandomChar(Helpers.Alphanumeric).ToString()); @@ -218,5 +232,17 @@ public string Parse(string pattern) return result; } + + private IEnumerable> ListEntryWithValue(string text, string entry) + { + foreach (Tuple s in text.ForEachBetween(entry + "{", "}")) + { + int n = 0; + if (int.TryParse(s.Item2, out n)) + { + yield return new Tuple(s.Item1, n); + } + } + } } } \ No newline at end of file diff --git a/ShareX.HelpersLib/Properties/Resources.Designer.cs b/ShareX.HelpersLib/Properties/Resources.Designer.cs index 99271125e..3c345ce21 100644 --- a/ShareX.HelpersLib/Properties/Resources.Designer.cs +++ b/ShareX.HelpersLib/Properties/Resources.Designer.cs @@ -1673,7 +1673,7 @@ internal class Resources { } /// - /// Looks up a localized string similar to Auto increment number. + /// Looks up a localized string similar to Auto increment number. 0 pad left using {n}. /// internal static string ReplCodeMenuEntry_i_Auto_increment_number { get { @@ -1754,7 +1754,7 @@ internal class Resources { } /// - /// Looks up a localized string similar to Random alphanumeric char. + /// Looks up a localized string similar to Random alphanumeric char. Repeat using {n}. /// internal static string ReplCodeMenuEntry_ra_Random_alphanumeric_char { get { @@ -1763,7 +1763,7 @@ internal class Resources { } /// - /// Looks up a localized string similar to Random number 0 to 9. + /// Looks up a localized string similar to Random number 0 to 9. Repeat using {n}. /// internal static string ReplCodeMenuEntry_rn_Random_number_0_to_9 { get { diff --git a/ShareX.HelpersLib/Properties/Resources.resx b/ShareX.HelpersLib/Properties/Resources.resx index 404d07f5f..de2eda7bd 100644 --- a/ShareX.HelpersLib/Properties/Resources.resx +++ b/ShareX.HelpersLib/Properties/Resources.resx @@ -197,13 +197,13 @@ Unix timestamp - Auto increment number + Auto increment number. 0 pad left using {n} - Random number 0 to 9 + Random number 0 to 9. Repeat using {n} - Random alphanumeric char + Random alphanumeric char. Repeat using {n} Image width