summaryrefslogtreecommitdiff
path: root/macros/src/element.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-05-17 14:39:47 +0200
committerLaurenz <laurmaedje@gmail.com>2023-05-17 14:39:47 +0200
commit46aace78ac4ac1c075b9b1670dbb7372df1a0a82 (patch)
treee093f81284ffc6a5150a18bdd338da75c368120c /macros/src/element.rs
parent42afa410ae561eb5b267080d088bca529a5d0b54 (diff)
Search keywords
Diffstat (limited to 'macros/src/element.rs')
-rw-r--r--macros/src/element.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/macros/src/element.rs b/macros/src/element.rs
index 403af103..61830939 100644
--- a/macros/src/element.rs
+++ b/macros/src/element.rs
@@ -10,6 +10,7 @@ struct Elem {
name: String,
display: String,
category: String,
+ keywords: Option<String>,
docs: String,
vis: syn::Visibility,
ident: Ident,
@@ -126,6 +127,7 @@ fn prepare(stream: TokenStream, body: &syn::ItemStruct) -> Result<Elem> {
let mut attrs = body.attrs.clone();
let docs = documentation(&attrs);
let mut lines = docs.split('\n').collect();
+ let keywords = meta_line(&mut lines, "Keywords").ok().map(Into::into);
let category = meta_line(&mut lines, "Category")?.into();
let display = meta_line(&mut lines, "Display")?.into();
let docs = lines.join("\n").trim().into();
@@ -134,6 +136,7 @@ fn prepare(stream: TokenStream, body: &syn::ItemStruct) -> Result<Elem> {
name: body.ident.to_string().trim_end_matches("Elem").to_lowercase(),
display,
category,
+ keywords,
docs,
vis: body.vis.clone(),
ident: body.ident.clone(),
@@ -332,7 +335,7 @@ fn create_set_field_method(field: &Field) -> TokenStream {
/// Create the element's `Pack` implementation.
fn create_pack_impl(element: &Elem) -> TokenStream {
- let Elem { ident, name, display, category, docs, .. } = element;
+ let Elem { ident, name, display, keywords, category, docs, .. } = element;
let vtable_func = create_vtable_func(element);
let infos = element
.fields
@@ -340,6 +343,7 @@ fn create_pack_impl(element: &Elem) -> TokenStream {
.filter(|field| !field.internal && !field.synthesized)
.map(create_param_info);
let scope = create_scope_builder(element.scope.as_ref());
+ let keywords = quote_option(keywords);
quote! {
impl ::typst::model::Element for #ident {
fn pack(self) -> ::typst::model::Content {
@@ -362,6 +366,7 @@ fn create_pack_impl(element: &Elem) -> TokenStream {
info: ::typst::eval::Lazy::new(|| typst::eval::FuncInfo {
name: #name,
display: #display,
+ keywords: #keywords,
docs: #docs,
params: ::std::vec![#(#infos),*],
returns: ::std::vec!["content"],