Code/TailBox/Application/TailBoxScssRenderer.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Sandbox.TailBox;
internal static class TailBoxScssRenderer
{
public static string Render( IReadOnlyCollection<TailBoxUtilityRule> rules, TailBoxConfig config, int scannedFileCount )
{
var builder = new StringBuilder();
builder.AppendLine( "/* <auto-generated>" );
builder.AppendLine( " tailw& generated utilities. Do not edit by hand." );
builder.AppendLine( $" Source files scanned: {scannedFileCount}" );
builder.AppendLine( $" Config: {GetFileName( config.ConfigPath ?? TailBoxConfig.FileName )}" );
builder.AppendLine( " </auto-generated> */" );
builder.AppendLine();
foreach ( var rule in rules )
{
AppendRule( builder, rule );
}
return builder.ToString();
}
private static void AppendRule( StringBuilder builder, TailBoxUtilityRule rule )
{
builder.Append( rule.Selector ).AppendLine( " {" );
foreach ( var declaration in rule.Declarations )
{
builder.Append( '\t' )
.Append( declaration.Property )
.Append( ": " )
.Append( declaration.Value );
if ( declaration.Important )
builder.Append( " !important" );
builder.AppendLine( ";" );
}
builder.AppendLine( "}" );
}
private static string GetFileName( string path )
{
if ( string.IsNullOrWhiteSpace( path ) )
return "";
var normalized = path.Replace( '\\', '/' );
var slash = normalized.LastIndexOf( "/", StringComparison.Ordinal );
return slash >= 0 ? normalized[(slash + 1)..] : normalized;
}
}