add match_table to @add_attributes

This commit is contained in:
Simon Christ 2021-10-19 16:04:32 +02:00
parent d880d89ef6
commit f33b3f8af9
2 changed files with 14 additions and 3 deletions

View File

@ -2069,7 +2069,16 @@ end
#--------------------------------------------------
## inspired by Base.@kwdef
macro add_attributes(level, expr)
"""
add_attributes(level, expr, match_table)
Takes a `struct` definition and recurses into its fields to create keywords by chaining the field names with the structs' name with underscore.
Also creates pluralized and non-underscore aliases for these keywords.
- `level` indicates which group of `plot`, `subplot`, `series`, etc. the keywords belong to.
- `expr` is the struct definition with default values like `Base.@kwdef`
- `match_table` is an expression of the form `:match = (symbols)`, with symbols whose default value should be `:match`
"""
macro add_attributes(level, expr, match_table)
expr = macroexpand(__module__, expr) # to expand @static
expr isa Expr && expr.head === :struct || error("Invalid usage of @add_attributes")
T = expr.args[2]
@ -2086,6 +2095,9 @@ macro add_attributes(level, expr)
# e.g. _series_defualts[key] = value
exp_key = Symbol(lowercase(string(T)), "_", key)
pl_key = makeplural(exp_key)
if QuoteNode(exp_key) in match_table.args[2].args
value = QuoteNode(:match)
end
push!(
insert_block.args,
Expr(

View File

@ -775,7 +775,6 @@ end
### Legend
# TODO: what about :match for the fonts?
@add_attributes subplot struct Legend
background_color = :match
foreground_color = :match
@ -784,4 +783,4 @@ end
font::Font = font(8)
title_font::Font = font(11)
column = 1
end
end :match = (:legend_font_family, :legend_font_color, :legend_title_font_family, :legend_title_font_color)