185 lines
5.3 KiB
Plaintext
185 lines
5.3 KiB
Plaintext
|
@use 'sass:list';
|
||
|
@use 'sass:map';
|
||
|
@use 'sass:math';
|
||
|
@use 'sass:meta';
|
||
|
@use 'sass:string';
|
||
|
|
||
|
@use 'metadata';
|
||
|
|
||
|
$metadata: meta.module-variables(metadata) !default;
|
||
|
$directory: null !default;
|
||
|
|
||
|
$family: null !default;
|
||
|
$display: null !default;
|
||
|
$formats: null !default;
|
||
|
$subsets: null !default;
|
||
|
$weights: null !default;
|
||
|
$styles: null !default;
|
||
|
$axes: null !default;
|
||
|
|
||
|
// Deprecated
|
||
|
$displayVar: null !default;
|
||
|
|
||
|
@mixin generator(
|
||
|
$metadata: $metadata,
|
||
|
$directory: $directory,
|
||
|
$family: $family,
|
||
|
$display: $display,
|
||
|
$formats: $formats,
|
||
|
$subsets: $subsets,
|
||
|
$weights: $weights,
|
||
|
$styles: $styles,
|
||
|
$axes: $axes,
|
||
|
|
||
|
// Deprecated
|
||
|
$displayVar: $displayVar
|
||
|
) {
|
||
|
@if $displayVar != null {
|
||
|
@warn "$displayVar is deprecated due to the limitation of using css variables in @font-face (https://github.com/fontsource/fontsource/issues/726).";
|
||
|
}
|
||
|
|
||
|
$isVariable: map.get($metadata, axes) != null;
|
||
|
|
||
|
$directory: if(
|
||
|
$directory,
|
||
|
$directory,
|
||
|
'~@fontsource#{if($isVariable, '-variable', '')}/#{map.get($metadata, id)}/files'
|
||
|
);
|
||
|
|
||
|
$family: if($family, $family, map.get($metadata, family) + if($isVariable, ' Variable', ''));
|
||
|
$display: if($display, $display, swap);
|
||
|
$formats: if(not $formats or $formats == all, if($isVariable, woff2, (woff2, woff)), $formats);
|
||
|
$subsets: if(
|
||
|
$subsets,
|
||
|
if($subsets == all, map.get($metadata, subsets), $subsets),
|
||
|
map.get($metadata, defaults, subset)
|
||
|
);
|
||
|
$weights: if(
|
||
|
$weights,
|
||
|
if($weights == all, map.get($metadata, weights), $weights),
|
||
|
map.get($metadata, defaults, weight)
|
||
|
);
|
||
|
$styles: if(
|
||
|
$styles,
|
||
|
if($styles == all, map.get($metadata, styles), $styles),
|
||
|
map.get($metadata, defaults, style)
|
||
|
);
|
||
|
$axes: if(
|
||
|
$axes,
|
||
|
if($axes == all, full, $axes),
|
||
|
if($isVariable, if(map.has-key($metadata, axes, wght), wght, full), null)
|
||
|
);
|
||
|
|
||
|
@each $subset in $subsets {
|
||
|
@each $unicodeSubset, $unicodeRange in map.get($metadata, unicode) {
|
||
|
@if (
|
||
|
($subset == $unicodeSubset) or
|
||
|
(
|
||
|
// Is numeric subset
|
||
|
($subset == map.get($metadata, defaults, subset)) and not
|
||
|
list.index(map.get($metadata, subsets), $unicodeSubset)
|
||
|
)
|
||
|
) {
|
||
|
@each $weight in if($axes, null, $weights) {
|
||
|
@each $axis in $axes {
|
||
|
@each $style in $styles {
|
||
|
$variant: '#{map.get($metadata, id)}-#{if($unicodeSubset, $unicodeSubset, $subset)}-#{if($axis, $axis, $weight)}-#{$style}';
|
||
|
|
||
|
$src: ();
|
||
|
@each $format in $formats {
|
||
|
$src: append(
|
||
|
$src,
|
||
|
url('#{$directory}/#{$variant}.#{$format}')
|
||
|
format('#{$format}#{if($axis, '-variations', '')}'),
|
||
|
comma
|
||
|
);
|
||
|
}
|
||
|
|
||
|
@content ((
|
||
|
metadata: $metadata,
|
||
|
directory: $directory,
|
||
|
family: $family,
|
||
|
display: $display,
|
||
|
formats: $formats,
|
||
|
subsets: $subsets,
|
||
|
weights: $weights,
|
||
|
styles: $styles,
|
||
|
axes: $axes,
|
||
|
|
||
|
variant: $variant,
|
||
|
subset: $subset,
|
||
|
unicodeSubset: $unicodeSubset,
|
||
|
unicodeRange: $unicodeRange,
|
||
|
weight: $weight,
|
||
|
axis: $axis,
|
||
|
style: $style,
|
||
|
|
||
|
font-family: string.quote($family),
|
||
|
font-style: if(
|
||
|
(($axis == full) or ($axis == slnt)) and map.has-key($metadata, axes, slnt),
|
||
|
oblique map.get($metadata, axes, slnt, min) + deg map.get($metadata, axes, slnt, max) + deg,
|
||
|
$style
|
||
|
),
|
||
|
font-display: $display,
|
||
|
font-weight: if(
|
||
|
(($axis == full) or ($axis == wght)) and map.has-key($metadata, axes, wght),
|
||
|
map.get($metadata, axes, wght, min) map.get($metadata, axes, wght, max),
|
||
|
$weight
|
||
|
),
|
||
|
font-stretch: if(
|
||
|
(($axis == full) or ($axis == wdth)) and map.has-key($metadata, axes, wdth),
|
||
|
'#{map.get($metadata, axes, wdth, min)}% #{map.get($metadata, axes, wdth, max)}%',
|
||
|
null
|
||
|
),
|
||
|
src: $src,
|
||
|
unicode-range: $unicodeRange,
|
||
|
));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@mixin faces(
|
||
|
$metadata: $metadata,
|
||
|
$directory: $directory,
|
||
|
$family: $family,
|
||
|
$display: $display,
|
||
|
$formats: $formats,
|
||
|
$subsets: $subsets,
|
||
|
$weights: $weights,
|
||
|
$styles: $styles,
|
||
|
$axes: $axes,
|
||
|
|
||
|
// Deprecated
|
||
|
$displayVar: $displayVar
|
||
|
) {
|
||
|
@include generator(
|
||
|
$metadata: $metadata,
|
||
|
$directory: $directory,
|
||
|
$family: $family,
|
||
|
$display: $display,
|
||
|
$formats: $formats,
|
||
|
$subsets: $subsets,
|
||
|
$weights: $weights,
|
||
|
$styles: $styles,
|
||
|
$axes: $axes,
|
||
|
|
||
|
$displayVar: $displayVar
|
||
|
)
|
||
|
using ($props) {
|
||
|
/* #{map.get($props, variant)} */
|
||
|
@font-face {
|
||
|
font-family: map.get($props, font-family);
|
||
|
font-style: map.get($props, font-style);
|
||
|
font-display: map.get($props, font-display);
|
||
|
font-weight: map.get($props, font-weight);
|
||
|
font-stretch: map.get($props, font-stretch);
|
||
|
unicode-range: map.get($props, unicode-range);
|
||
|
src: map.get($props, src);
|
||
|
}
|
||
|
}
|
||
|
}
|