skhtml/macros/src/lib.rs

52 lines
1.2 KiB
Rust

#![feature(proc_macro_hygiene)]
#![feature(proc_macro_quote)]
#![feature(proc_macro_span)]
#![feature(proc_macro_diagnostic)]
#![feature(proc_macro_raw_ident)]
extern crate ansi_term;
extern crate lalrpop_util;
extern crate proc_macro;
use proc_macro::{quote, TokenStream};
mod config;
mod declare;
mod error;
mod html;
mod lexer;
mod map;
mod parser;
#[proc_macro]
pub fn html(input: TokenStream) -> TokenStream {
let stream = lexer::unroll_stream(input, false);
let result = html::expand_html(&stream);
match result {
Err(err) => {
error::parse_error(&stream, &err).emit();
quote!(panic!())
}
Ok(node) => node.into_token_stream(),
}
}
#[proc_macro]
pub fn declare_elements(input: TokenStream) -> TokenStream {
let stream = lexer::keywordise(lexer::unroll_stream(input, true));
let result = declare::expand_declare(&stream);
match result {
Err(err) => {
error::parse_error(&stream, &err).emit();
quote!(panic!())
}
Ok(decls) => {
let mut out = TokenStream::new();
for decl in decls {
out.extend(decl.into_token_stream());
}
out
}
}
}