VR4RoboticArm2/VR4RoboticArm/Library/PackageCache/com.meta.xr.simulator/Editor/Utils/Utils.cs
IonutMocanu 48cccc22ad Main2
2025-09-08 11:13:29 +03:00

125 lines
4.6 KiB
C#

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* Licensed under the Oculus SDK License Agreement (the "License");
* you may not use the Oculus SDK except in compliance with the License,
* which is provided at the time of installation or download, or which
* otherwise accompanies this software in either electronic or hard copy form.
*
* You may obtain a copy of the License at
*
* https://developer.oculus.com/licenses/oculussdk/
*
* Unless required by applicable law or agreed to in writing, the Oculus SDK
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using NUnit.Framework;
using UnityEditor;
namespace Meta.XR.Simulator.Editor
{
public enum Origin
{
Unknown = -1,
Settings,
Menu,
StatusMenu,
Console,
Component,
Toolbar
}
[InitializeOnLoad]
internal static class Utils
{
public static ProcessUtils ProcessUtils { get; set; }
public static LogUtils LogUtils { get; set; }
public static SystemUtils SystemUtils { get; set; }
public static PackageManagerUtils PackageManagerUtils { get; set; }
public static XRSimUtils XRSimUtils { get; set; }
static Utils()
{
ProcessUtils = new ProcessUtils();
LogUtils = new LogUtils();
SystemUtils = new SystemUtils();
PackageManagerUtils = new PackageManagerUtils();
XRSimUtils = new XRSimUtils();
}
public static Origin ToSimulatorOrigin(this string origin)
{
if (!Enum.TryParse(origin, out Origin simulatorOrigin))
{
return Origin.Unknown;
}
return simulatorOrigin;
}
// From http://csharptest.net/529/how-to-correctly-escape-command-line-arguments-in-c/index.html
readonly static Regex invalidChar = new("[\x00\x0a\x0d]");// these can not be escaped
readonly static Regex needsQuotes = new(@"\s|""");// contains whitespace or two quote characters
readonly static Regex escapeQuote = new(@"(\\*)(""|$)");// one or more '\' followed with a quote or end of string
/// <summary>
/// Quotes all arguments that contain whitespace, or begin with a quote and returns a single
/// argument string for use with Process.Start().
/// </summary>
/// <param name="args">A list of strings for arguments, may not contain null, '\0', '\r', or '\n'</param>
/// <returns>The combined list of escaped/quoted strings</returns>
/// <exception cref="System.ArgumentNullException">Raised when one of the arguments is null</exception>
/// <exception cref="System.ArgumentOutOfRangeException">Raised if an argument contains '\0', '\r', or '\n'</exception>
public static string EscapeArguments(params string[] args)
{
StringBuilder arguments = new StringBuilder();
for (int carg = 0; args != null && carg < args.Length; carg++)
{
if (args[carg] == null) { throw new ArgumentNullException("args[" + carg + "]"); }
if (invalidChar.IsMatch(args[carg])) { throw new ArgumentOutOfRangeException("args[" + carg + "]"); }
if (args[carg] == String.Empty) { arguments.Append("\"\""); }
else if (!needsQuotes.IsMatch(args[carg]))
{
arguments.Append(args[carg]);
}
else
{
arguments.Append('"');
arguments.Append(escapeQuote.Replace(args[carg], m =>
m.Groups[1].Value + m.Groups[1].Value +
(m.Groups[2].Value == "\"" ? "\\\"" : "")
));
arguments.Append('"');
}
if (carg + 1 < args.Length)
arguments.Append(' ');
}
return arguments.ToString();
}
public static int GetMajorVersion(string versionString)
{
var version = 0;
var versionParts = versionString.Split('.');
if (versionParts.Length > 0)
{
int.TryParse(versionParts[0], out version);
}
return version;
}
}
}