logo
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use std::{
    cmp::Ordering,
    collections::{BTreeMap, BTreeSet},
    fmt::{Debug, Display, Formatter, Write},
    hash::{Hash, Hasher},
    ops::{Add, AddAssign},
};

use base64::{encode_config, URL_SAFE_NO_PAD};
use itertools::Itertools;
use xxhash_rust::xxh3::Xxh3;

use crate::{Result, TailwindBuilder, TailwindInstance};

pub use self::{attribute::CssAttributes, mode::CssInlineMode};
pub(crate) use self::{bundle::CssBundle, instance::CssInstance};

mod attribute;
mod bundle;
mod instance;
mod mode;

fn normalize_class_name(f: &mut (dyn Write), name: &str) -> Result<()> {
    for c in name.chars() {
        match c {
            ' ' => write!(f, "_"),
            r @ ('-' | '_') => write!(f, "{}", r),
            a if a.is_alphanumeric() => write!(f, "{}", a),
            _ => write!(f, "\\{}", c),
        }?
    }
    Ok(())
}

fn base64(hash: u64) -> String {
    format!("_{}", encode_config(hash.to_be_bytes(), URL_SAFE_NO_PAD))
}