Files
sbox-public/engine/Tools/ShaderProc/Definition.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

91 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Security.Cryptography;
using System.Text;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
namespace Facepunch.ShaderProc
{
public class Definition
{
public System.IO.DirectoryInfo Root { get; private set; }
public string Filename { get; private set; }
public string FullText { get; private set; }
//Actual data
public string ShaderDir { get; private set; }
public string InteropOutput { get; private set; }
public List<string> Whitelist = new List<string>();
public List<string> DocumentList = new List<string>();
public static Definition FromFile( string filename )
{
var folder = System.IO.Path.GetDirectoryName( filename );
if ( string.IsNullOrEmpty( folder ) ) folder = ".";
var text = System.IO.File.ReadAllText( filename );
var d = new Definition();
d.Filename = System.IO.Path.GetFileName( filename );
d.Root = new System.IO.DirectoryInfo( folder );
d.ParseFrom( text );
return d;
}
private void ParseFrom( string text )
{
foreach ( var split in text.Split( '\n' ) )
{
var arg = split.Split( ' ' );
//Whiteline
if ( arg.Length < 2 )
continue;
if ( arg.Length > 2 )
throw new Exception( $"Undefined number of arguments for definition: {split}" );
switch ( arg[0] )
{
case "shaderdir":
ShaderDir = ParseExtractString( arg[1] );
break;
case "output":
InteropOutput = ParseExtractString( arg[1] );
break;
case "whitelist":
Whitelist.Add( ParseExtractString( arg[1] ) );
break;
case "document":
DocumentList.Add( ParseExtractString( arg[1] ) );
break;
default:
throw new Exception( $"Unknown argument ${arg[0]}" );
}
}
}
private string ParseExtractString( string text )
{
if ( text[0] == '\"' )
{
int i = 1;
while ( 1 < text.Length && text[i] != '\"' )
i++;
if ( text[i] != '\"' )
throw new Exception( $"Malformed argument {text}" );
return text.Substring( 1, i - 1 );
}
return "";
}
}
}