/*
* Created by Ranorex
* User: rodriqu_dd
* Date: 09/10/2021
* Time: 17:37
*
* To change this template use Tools > Options > Coding > Edit standard headers.
*/
using System;
using System.Globalization;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Drawing;
using System.Threading;
using WinForms = System.Windows.Forms;
using Ranorex;
using Ranorex.Core;
using Ranorex.Core.Testing;
namespace Ranorex_Automation_Helpers.UserCodeCollections
{
///
/// Creates a Ranorex user code collection. A collection is used to publish user code methods to the user code library.
///
[UserCodeCollection]
public static class StringHelpers
{
// You can use the "Insert New User Code Method" functionality from the context menu,
// to add a new method with the attribute [UserCodeMethod].
///
/// The method ToInvariantCulture transforms the format of all numbers
/// in the string from the CurrentCulture to InvariantCulture.
/// Currently this transformation comprises decimal separator and group separator.
///
[UserCodeMethod]
public static string ToInvariantCulture(this string originalString)
{
return originalString.ToNewCulture(CultureInfo.CurrentCulture, CultureInfo.InvariantCulture);
}
///
/// The method ToCurrentCulture transforms the format of all numbers
/// in the string from the InvariantCulture to CurrentCulture.
/// Currently this transformation comprises decimal separator and group separator.
///
[UserCodeMethod]
public static string ToCurrentCulture(this string originalString)
{
return originalString.ToNewCulture(CultureInfo.InvariantCulture, CultureInfo.CurrentCulture);
}
[UserCodeMethod]
public static string ToCurrentCultureDecimalSeparator(this string originalString)
{
return originalString.ReplaceNumberSeparator(CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator,
CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
}
[UserCodeMethod]
public static string ToCurrentCultureGroupSeparator(this string originalString)
{
return originalString.ReplaceNumberSeparator(CultureInfo.InvariantCulture.NumberFormat.NumberGroupSeparator,
CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator);
}
[UserCodeMethod]
public static string ToInvariantCultureDecimalSeparator(this string originalString)
{
return originalString.ReplaceNumberSeparator(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator,
CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator);
}
[UserCodeMethod]
public static string ToInvariantCultureGroupSeparator(this string originalString)
{
return originalString.ReplaceNumberSeparator(CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator,
CultureInfo.InvariantCulture.NumberFormat.NumberGroupSeparator);
}
[UserCodeMethod]
public static string ToNoGroupSeparator(this string originalString)
{
string stringToRemove = CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator;
bool mustBeRun = Regex.IsMatch(originalString, @"(\d+)\" + stringToRemove + @"(\d+)");
while (mustBeRun)
{
originalString = Regex.Replace(originalString, @"(\d+)\" + stringToRemove + @"(\d+)", "$1$2");
mustBeRun = Regex.IsMatch(originalString, @"(\d+)\" + stringToRemove + @"(\d+)");
}
return originalString;
}
private static string ToNewCulture(this string originalString, CultureInfo currentCulture, CultureInfo newCulture)
{
return originalString.
ReplaceNumberSeparator(currentCulture.NumberFormat.NumberGroupSeparator,
newCulture.NumberFormat.NumberGroupSeparator).
ReplaceNumberSeparator(currentCulture.NumberFormat.NumberDecimalSeparator,
newCulture.NumberFormat.NumberDecimalSeparator);
}
private static string ReplaceNumberSeparator(this string originalString, string currentSeparator, string newSeparator)
{
return Regex.Replace(originalString, @"(\d+)\" + currentSeparator + @"(\d+)", "$1" + newSeparator + "$2");
}
}
}