renderSwitch method

void renderSwitch(
  1. Element element,
  2. CodeBuffer buffer,
  3. SymbolTable scope,
  4. bool html5,
)

Implementation

void renderSwitch(
    Element element, CodeBuffer buffer, SymbolTable scope, bool html5) {
  var value = element.attributes
      .firstWhereOrNull((a) => a.name == 'value')
      ?.value
      ?.compute(scope);

  var cases = element.children
      .whereType<Element>()
      .where((c) => c.tagName.name == 'case');

  for (var child in cases) {
    var comparison = child.attributes
        .firstWhereOrNull((a) => a.name == 'value')
        ?.value
        ?.compute(scope);
    if (comparison == value) {
      for (var i = 0; i < child.children.length; i++) {
        var c = child.children.elementAt(i);
        renderElementChild(
            element, c, buffer, scope, html5, i, child.children.length);
      }

      return;
    }
  }

  var defaultCase = element.children.firstWhereOrNull(
      (c) => c is Element && c.tagName.name == 'default') as Element?;
  if (defaultCase != null) {
    for (var i = 0; i < defaultCase.children.length; i++) {
      var child = defaultCase.children.elementAt(i);
      renderElementChild(element, child, buffer, scope, html5, i,
          defaultCase.children.length);
    }
  }
}