vimwiki_macros 0.1.0

Macro library that provides macros to generate vimwiki language at compile time.
Documentation
use crate::tokens::{utils::root_crate, Tokenize, TokenizeContext};
use proc_macro2::TokenStream;
use quote::quote;
use vimwiki_core::{Located, Region};

impl<T: Tokenize> Tokenize for Located<T> {
    fn tokenize(&self, ctx: &TokenizeContext, stream: &mut TokenStream) {
        let root = root_crate();
        let mut element = TokenStream::new();
        self.as_inner().tokenize(ctx, &mut element);

        let region = do_tokenize!(ctx, self.region());

        let self_stream = quote! {
            #root::Located::new(
                #element,
                #region,
            )
        };

        stream.extend(std::iter::once(self_stream))
    }
}

impl_tokenize!(tokenize_region, Region);
fn tokenize_region(_ctx: &TokenizeContext, region: &Region) -> TokenStream {
    let root = root_crate();
    let offset = region.offset();
    let len = region.len();
    quote! {
        #root::Region::new(
            #offset,
            #len,
        )
    }
}