diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-07-02 19:59:52 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-07-02 20:07:43 +0200 |
| commit | ebfdb1dafa430786db10dad2ef7d5467c1bdbed1 (patch) | |
| tree | 2bbc24ddb4124c4bb14dec0e536129d4de37b056 /macros/src/symbols.rs | |
| parent | 3ab19185093d7709f824b95b979060ce125389d8 (diff) | |
Move everything into `crates/` directory
Diffstat (limited to 'macros/src/symbols.rs')
| -rw-r--r-- | macros/src/symbols.rs | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/macros/src/symbols.rs b/macros/src/symbols.rs deleted file mode 100644 index cdb7f5d7..00000000 --- a/macros/src/symbols.rs +++ /dev/null @@ -1,78 +0,0 @@ -use super::*; - -/// Expand the `symbols!` macro. -pub fn symbols(stream: TokenStream) -> Result<TokenStream> { - let list: Punctuated<Symbol, Token![,]> = - Punctuated::parse_terminated.parse2(stream)?; - let pairs = list.iter().map(|symbol| { - let name = symbol.name.to_string(); - let kind = match &symbol.kind { - Kind::Single(c) => quote! { typst::eval::Symbol::new(#c), }, - Kind::Multiple(variants) => { - let variants = variants.iter().map(|variant| { - let name = &variant.name; - let c = &variant.c; - quote! { (#name, #c) } - }); - quote! { - typst::eval::Symbol::list(&[#(#variants),*]) - } - } - }; - quote! { (#name, #kind) } - }); - Ok(quote! { &[#(#pairs),*] }) -} - -struct Symbol { - name: syn::Ident, - kind: Kind, -} - -enum Kind { - Single(syn::LitChar), - Multiple(Punctuated<Variant, Token![,]>), -} - -struct Variant { - name: String, - c: syn::LitChar, -} - -impl Parse for Symbol { - fn parse(input: ParseStream) -> Result<Self> { - let name = input.call(Ident::parse_any)?; - input.parse::<Token![:]>()?; - let kind = input.parse()?; - Ok(Self { name, kind }) - } -} - -impl Parse for Kind { - fn parse(input: ParseStream) -> Result<Self> { - if input.peek(syn::LitChar) { - Ok(Self::Single(input.parse()?)) - } else { - let content; - syn::bracketed!(content in input); - Ok(Self::Multiple(Punctuated::parse_terminated(&content)?)) - } - } -} - -impl Parse for Variant { - fn parse(input: ParseStream) -> Result<Self> { - let mut name = String::new(); - if input.peek(syn::Ident::peek_any) { - name.push_str(&input.call(Ident::parse_any)?.to_string()); - while input.peek(Token![.]) { - input.parse::<Token![.]>()?; - name.push('.'); - name.push_str(&input.call(Ident::parse_any)?.to_string()); - } - input.parse::<Token![:]>()?; - } - let c = input.parse()?; - Ok(Self { name, c }) - } -} |
