summaryrefslogtreecommitdiff
path: root/macros/src/symbols.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-07-02 19:59:52 +0200
committerLaurenz <laurmaedje@gmail.com>2023-07-02 20:07:43 +0200
commitebfdb1dafa430786db10dad2ef7d5467c1bdbed1 (patch)
tree2bbc24ddb4124c4bb14dec0e536129d4de37b056 /macros/src/symbols.rs
parent3ab19185093d7709f824b95b979060ce125389d8 (diff)
Move everything into `crates/` directory
Diffstat (limited to 'macros/src/symbols.rs')
-rw-r--r--macros/src/symbols.rs78
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 })
- }
-}