pomsky-bin 0.12.0

Compile pomsky expressions, a new regular expression language
Documentation
use std::ffi::OsString;

use pomsky::features::PomskyFeatures;

use crate::format::Logger;

use super::ParseArgsError;

pub(super) fn parse_features(
    logger: &Logger,
    value: OsString,
) -> Result<PomskyFeatures, ParseArgsError> {
    let lower = value.to_string_lossy().to_ascii_lowercase();

    let mut features = PomskyFeatures::new();
    for part in lower.split(',') {
        let part = part.trim();
        if !part.is_empty() {
            match part {
                "grapheme" => features.grapheme(true),
                "numbered-groups" => features.numbered_groups(true),
                "named-groups" => features.named_groups(true),
                "atomic-groups" => features.atomic_groups(true),
                "references" => features.references(true),
                "lazy-mode" => features.lazy_mode(true),
                "ascii-mode" => features.ascii_mode(true),
                "ranges" => features.ranges(true),
                "variables" => features.variables(true),
                "lookahead" => features.lookahead(true),
                "lookbehind" => features.lookbehind(true),
                "boundaries" => features.boundaries(true),
                "regexes" => features.regexes(true),
                "dot" => features.dot(true),
                "recursion" => features.recursion(true),
                "intersection" => features.intersection(true),
                s => {
                    logger.warn().println(format_args!("unknown feature `{s}`"));
                    features
                }
            };
        }
    }

    Ok(features)
}