templr_parser 0.2.1

Parser for templr templates
Documentation
use core::fmt;

use proc_macro2::TokenStream;
use quote::ToTokens;
use syn::{
    parse::{Parse, ParseStream},
    Token,
};

use crate::Name;

pub mod kw {
    syn::custom_keyword!(DOCTYPE);
}

#[derive(Debug, Clone)]
pub struct Doctype {
    pub lt: Token![<],
    pub bang: Token![!],
    pub doctype: kw::DOCTYPE,
    pub name: Name,
    pub gt: Token![>],
}

impl Parse for Doctype {
    fn parse(input: ParseStream) -> syn::Result<Self> {
        Ok(Self {
            lt: input.parse()?,
            bang: input.parse()?,
            doctype: input.parse()?,
            name: Name::parse_tag(input)?,
            gt: input.parse()?,
        })
    }
}

impl ToTokens for Doctype {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        self.lt.to_tokens(tokens);
        self.bang.to_tokens(tokens);
        self.doctype.to_tokens(tokens);
        self.name.to_tokens(tokens);
        self.gt.to_tokens(tokens);
    }
}

impl fmt::Display for Doctype {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "<!DOCTYPE {}>", self.name)
    }
}