srctree

Robin Linden parent 9d1b0aee 4d92d82a
style: Simplify property inheritance check

This is possible now that we use an enum instead of strings for propertyids.

inlinesplit
style/styled_node.cpp added: 48, removed: 52, total 0
@@ -5,64 +5,60 @@
#include "style/styled_node.h"
 
#include <algorithm>
#include <array>
#include <string_view>
 
using namespace std::literals;
 
namespace style {
namespace {
 
// https://www.w3.org/TR/CSS22/propidx.html
constexpr std::array kInheritedProperties{
css::PropertyId::Azimuth,
css::PropertyId::BorderCollapse,
css::PropertyId::BorderSpacing,
css::PropertyId::CaptionSide,
css::PropertyId::Color,
css::PropertyId::Cursor,
css::PropertyId::Direction,
css::PropertyId::Elevation,
css::PropertyId::EmptyCells,
css::PropertyId::Font,
css::PropertyId::FontFamily,
css::PropertyId::FontSize,
css::PropertyId::FontStyle,
css::PropertyId::FontVariant,
css::PropertyId::FontWeight,
css::PropertyId::LetterSpacing,
css::PropertyId::LineHeight,
css::PropertyId::ListStyle,
css::PropertyId::ListStyleImage,
css::PropertyId::ListStylePosition,
css::PropertyId::ListStyleType,
css::PropertyId::Orphans,
css::PropertyId::Pitch,
css::PropertyId::PitchRange,
css::PropertyId::Quotes,
css::PropertyId::Richness,
css::PropertyId::Speak,
css::PropertyId::SpeakHeader,
css::PropertyId::SpeakNumeral,
css::PropertyId::SpeakPunctuation,
css::PropertyId::SpeechRate,
css::PropertyId::Stress,
css::PropertyId::TextAlign,
css::PropertyId::TextIndent,
css::PropertyId::TextTransform,
css::PropertyId::Visibility,
css::PropertyId::VoiceFamily,
css::PropertyId::Volume,
css::PropertyId::Widows,
css::PropertyId::WordSpacing,
};
 
template<auto const &array>
constexpr bool is_in_array(css::PropertyId value) {
return std::ranges::find(array, value) != std::cend(array);
}
 
constexpr bool is_inherited(css::PropertyId property) {
return is_in_array<kInheritedProperties>(property);
constexpr bool is_inherited(css::PropertyId id) {
switch (id) {
case css::PropertyId::Azimuth:
case css::PropertyId::BorderCollapse:
case css::PropertyId::BorderSpacing:
case css::PropertyId::CaptionSide:
case css::PropertyId::Color:
case css::PropertyId::Cursor:
case css::PropertyId::Direction:
case css::PropertyId::Elevation:
case css::PropertyId::EmptyCells:
case css::PropertyId::Font:
case css::PropertyId::FontFamily:
case css::PropertyId::FontSize:
case css::PropertyId::FontStyle:
case css::PropertyId::FontVariant:
case css::PropertyId::FontWeight:
case css::PropertyId::LetterSpacing:
case css::PropertyId::LineHeight:
case css::PropertyId::ListStyle:
case css::PropertyId::ListStyleImage:
case css::PropertyId::ListStylePosition:
case css::PropertyId::ListStyleType:
case css::PropertyId::Orphans:
case css::PropertyId::Pitch:
case css::PropertyId::PitchRange:
case css::PropertyId::Quotes:
case css::PropertyId::Richness:
case css::PropertyId::Speak:
case css::PropertyId::SpeakHeader:
case css::PropertyId::SpeakNumeral:
case css::PropertyId::SpeakPunctuation:
case css::PropertyId::SpeechRate:
case css::PropertyId::Stress:
case css::PropertyId::TextAlign:
case css::PropertyId::TextIndent:
case css::PropertyId::TextTransform:
case css::PropertyId::Visibility:
case css::PropertyId::VoiceFamily:
case css::PropertyId::Volume:
case css::PropertyId::Widows:
case css::PropertyId::WordSpacing:
return true;
default:
return false;
}
}
 
// https://www.w3.org/TR/css-cascade/#initial-values