parseRules method

List<CSSRule> parseRules({
  1. double? windowWidth,
  2. double? windowHeight,
  3. bool? isDarkMode,
})

Implementation

List<CSSRule> parseRules(
    {double? windowWidth, double? windowHeight, bool? isDarkMode}) {
  List<CSSRule> expandMedia(CSSRule rule) {
    if (rule is CSSMediaDirective) {
      final List<CSSRule> expanded = <CSSRule>[];
      final List<CSSRule>? mediaRules = rule.getValidMediaRules(
          windowWidth, windowHeight, isDarkMode ?? false);
      if (mediaRules == null) {
        return expanded;
      }
      for (final CSSRule child in mediaRules) {
        expanded.addAll(expandMedia(child));
      }
      return expanded;
    }
    if (rule is CSSLayerBlockRule) {
      final List<CSSRule> expandedChildren = <CSSRule>[];
      for (final CSSRule child in rule.cssRules) {
        expandedChildren.addAll(expandMedia(child));
      }
      return <CSSRule>[
        CSSLayerBlockRule(
          name: rule.name,
          layerNamePath: List<String>.from(rule.layerNamePath),
          cssRules: expandedChildren,
        )
      ];
    }
    return <CSSRule>[rule];
  }

  var rules = <CSSRule>[];
  while (!_maybeEat(TokenKind.END_OF_FILE)) {
    final data = processRule();
    if (data != null) {
      for (CSSRule cssRule in data) {
        rules.addAll(expandMedia(cssRule));
      }
    } else {
      _next();
    }
  }
  checkEndOfFile();

  return rules;
}