mintyml 0.1.19

A minialist alternative syntax to HTML
Documentation
use crate::inference::engine::{define_tags, when::*, Infer, TagDefinition};

use super::StandardInfer;

#[non_exhaustive]
#[derive(Debug)]
pub struct RootInfer {}

impl<'cfg> Infer<'cfg> for RootInfer {
    fn define_tags(&self) -> impl TagDefinition<'cfg> {
        define_tags()
            .when(first() & paragraph(), "title")
            .when(first(), "head")
            .default("body")
    }
}

#[non_exhaustive]
#[derive(Debug)]
pub struct ListInfer {}

impl<'cfg> Infer<'cfg> for ListInfer {
    fn define_tags(&self) -> impl TagDefinition<'cfg> {
        define_tags().default("li")
    }
}

#[non_exhaustive]
#[derive(Debug)]
pub struct DescriptionListInfer {}

impl<'cfg> Infer<'cfg> for DescriptionListInfer {
    fn define_tags(&self) -> impl TagDefinition<'cfg> {
        define_tags().when(line(), "dt").default("dd")
    }
}

#[non_exhaustive]
#[derive(Debug)]
pub struct OptGroupInfer {}

impl<'cfg> Infer<'cfg> for OptGroupInfer {
    fn define_tags(&self) -> impl TagDefinition<'cfg> {
        define_tags().default("option")
    }
}

#[non_exhaustive]
#[derive(Debug)]
pub struct SelectInfer {}

impl<'cfg> Infer<'cfg> for SelectInfer {
    fn define_tags(&self) -> impl TagDefinition<'cfg> {
        define_tags().when(block(), "optgroup").default("option")
    }
}

#[non_exhaustive]
#[derive(Debug)]
pub struct MapInfer {}

impl<'cfg> Infer<'cfg> for MapInfer {
    fn define_tags(&self) -> impl TagDefinition<'cfg> {
        define_tags().default("area")
    }
}

#[non_exhaustive]
#[derive(Debug)]
pub struct DetailsInfer {}

impl<'cfg> Infer<'cfg> for DetailsInfer {
    fn define_tags(&self) -> impl TagDefinition<'cfg> {
        define_tags()
            .when(first(), "summary")
            .apply_from(&StandardInfer {})
    }
}

#[non_exhaustive]
#[derive(Debug)]
pub struct LabelInfer {}

impl<'cfg> Infer<'cfg> for LabelInfer {
    fn define_tags(&self) -> impl TagDefinition<'cfg> {
        define_tags()
            .when(line(), "input")
            .apply_from(&StandardInfer {})
    }
}

#[non_exhaustive]
#[derive(Debug)]
pub struct FieldSetInfer {}

impl<'cfg> Infer<'cfg> for FieldSetInfer {
    fn define_tags(&self) -> impl TagDefinition<'cfg> {
        define_tags()
            .when(first() & paragraph(), "legend")
            .apply_from(&StandardInfer {})
    }
}

#[non_exhaustive]
#[derive(Debug)]
pub struct PictureInfer {}

impl<'cfg> Infer<'cfg> for PictureInfer {
    fn define_tags(&self) -> impl TagDefinition<'cfg> {
        define_tags()
            .when(line() & last(), "img")
            .when(line(), "source")
    }
}