mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 00:02:55 +00:00
60 lines
1.5 KiB
C#
60 lines
1.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace ZoneCodeGenerator.Domain
|
|
{
|
|
class Namespace
|
|
{
|
|
private static readonly Regex nameRegex = new Regex(@"^[a-zA-Z_$][a-zA-Z0-9_$]*$");
|
|
private readonly Stack<string> namespaceStack;
|
|
|
|
public Namespace()
|
|
{
|
|
namespaceStack = new Stack<string>();
|
|
}
|
|
|
|
public void Push(string _namespace)
|
|
{
|
|
if(!nameRegex.IsMatch(_namespace))
|
|
throw new ArgumentException("Namespace name invalid");
|
|
|
|
namespaceStack.Push(_namespace);
|
|
}
|
|
|
|
public string Pop()
|
|
{
|
|
return namespaceStack.Pop();
|
|
}
|
|
|
|
public string GetName()
|
|
{
|
|
if (namespaceStack.Count == 0)
|
|
return "";
|
|
|
|
var result = "";
|
|
var stackSnapshot = namespaceStack.ToArray();
|
|
|
|
// The stack is read from top to bottom. Therefore we need to access it in reverse order here.
|
|
for(var i = stackSnapshot.Length - 1; i >= 0; i--)
|
|
{
|
|
if (!string.IsNullOrEmpty(result))
|
|
result += "::";
|
|
result += stackSnapshot[i];
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return GetName();
|
|
}
|
|
|
|
public static string Combine(Namespace _namespace, string typename)
|
|
{
|
|
return $"{_namespace}::{typename}";
|
|
}
|
|
}
|
|
}
|