pipa-lang 1.0.0-alpha.1

A tiny template language
Documentation
// SPDX-FileCopyrightText: Copyright 2026 olav@occy.org
// SPDX-License-Identifier: MPL-2.0

use aho_corasick::AhoCorasick;
use aho_corasick::MatchKind;
use std::sync::LazyLock;

static AC_HTML_PATTERN: [&str; 8] = ["&", "<", ">", "\"", "'", ":", "{", "}"];
static AC_HTML_REPLACE: [&str; 8] = [
    "&amp;", "&lt;", "&gt;", "&quot;", "&apos;", "&#58;", "&#123;", "&#125;",
];

static AC: LazyLock<AhoCorasick> = LazyLock::new(|| {
    AhoCorasick::builder()
        .match_kind(MatchKind::LeftmostFirst)
        .build(AC_HTML_PATTERN)
        .expect("ac")
});

pub fn template(data: &[u8]) -> Vec<u8> {
    AC.replace_all_bytes(data, AC_HTML_REPLACE.as_slice())
}

pub fn template_string(data: &str) -> String {
    AC.replace_all(data, AC_HTML_REPLACE.as_slice())
}