CSS Tokenizer

The CSS tokenizer is designed to parse CSS code and break it down into meaningful components (tokens) for processing. It provides stream-capable functionality for handling large CSS files or real-time CSS data analysis.

Please note: Will be part of v2.2 and later

Overview

The CSS tokenizer is part of the NTokenizers library and provides a stream-capable approach to parsing CSS code. It can process CSS source code in real-time, making it suitable for large files or streaming scenarios where loading everything into memory at once is impractical.

Public API

The CSS tokenizer inherits from BaseSubTokenizer<CssToken> and provides the following key methods:

Usage Examples

Basic Usage with Stream

using NTokenizers.Css;
using Spectre.Console;
using System.Text;

string cssCode = """
    .header {
        color: blue;
        font-size: 16px;
    }
    """;

using var stream = new MemoryStream(Encoding.UTF8.GetBytes(cssCode));
await CssTokenizer.Create().ParseAsync(stream, onToken: token =>
{
    var value = Markup.Escape(token.Value);
    var colored = token.TokenType switch
    {
        CssTokenType.StartRuleSet => new Markup($"[yellow]{value}[/]"),
        CssTokenType.EndRuleSet => new Markup($"[yellow]{value}[/]"),
        CssTokenType.Selector => new Markup($"[cyan]{value}[/]"),
        CssTokenType.PropertyName => new Markup($"[blue]{value}[/]"),
        CssTokenType.StringValue => new Markup($"[white]{value}[/]"),
        CssTokenType.Quote => new Markup($"[yellow]{value}[/]"),
        CssTokenType.Number => new Markup($"[magenta]{value}[/]"),
        CssTokenType.Unit => new Markup($"[orange1]{value}[/]"),
        CssTokenType.Function => new Markup($"[yellow]{value}[/]"),
        CssTokenType.OpenParen => new Markup($"[yellow]{value}[/]"),
        CssTokenType.CloseParen => new Markup($"[yellow]{value}[/]"),
        CssTokenType.Comment => new Markup($"[green]{value}[/]"),
        CssTokenType.Colon => new Markup($"[yellow]{value}[/]"),
        CssTokenType.Semicolon => new Markup($"[yellow]{value}[/]"),
        CssTokenType.Comma => new Markup($"[yellow]{value}[/]"),
        CssTokenType.Whitespace => new Markup($"[grey]{value}[/]"),
        CssTokenType.AtRule => new Markup($"[orange1]{value}[/]"),
        CssTokenType.Identifier => new Markup($"[blue]{value}[/]"),
        CssTokenType.Operator => new Markup($"[red]{value}[/]"),
        _ => new Markup(value)
    };
    AnsiConsole.Write(colored);
});

Using with TextReader

using NTokenizers.Css;
using System.IO;

string cssCode = """
    .button {
        background: red;
    }
    """;
using var reader = new StringReader(cssCode);
await CssTokenizer.Create().ParseAsync(reader, onToken: token =>
{
    Console.WriteLine($"Token: {token.TokenType} = '{token.Value}'");
});

Parsing String Directly

using NTokenizers.Css;

string cssCode = """
    #main {
        width: 100%;
    }
    """;
var tokens = CssTokenizer.Create().Parse(cssCode);
foreach (var token in tokens)
{
    Console.WriteLine($"Token: {token.TokenType} = '{token.Value}'");
}

Token Types

The CSS tokenizer produces tokens of type CssTokenType with the following token types:

More info: CssTokenType.cs

Features

See Also

"