analyzeRule method

void analyzeRule(
  1. Rule rule,
  2. int level
)

Implementation

void analyzeRule(Rule rule, int level) {
  if (rule.elementMatcher is ElementWayMatcher) {
    if (rule.closedMatcher is ClosedWayMatcher) {
      addClosedWay(rule);
    } else if (rule.closedMatcher is LinearWayMatcher) {
      addOpenWay(rule);
    } else if (rule.closedMatcher is AnyMatcher) {
      addClosedWay(rule);
      addOpenWay(rule);
    } else {
      print("Unknown closedMatcher ${rule.closedMatcher} for ways");
    }
  } else if (rule.elementMatcher is ElementNodeMatcher) {
    if (rule.closedMatcher is ClosedWayMatcher) {
      print("Unknown closedMatcher ${rule.closedMatcher} for closed node");
    } else if (rule.closedMatcher is LinearWayMatcher) {
      print("Unknown closedMatcher ${rule.closedMatcher} for open node");
    } else if (rule.closedMatcher is AnyMatcher) {
      addNode(rule);
    } else {
      print("Unknown closedMatcher ${rule.closedMatcher} for nodes");
    }
  } else if (rule.elementMatcher is AnyMatcher) {
    if (rule.closedMatcher is ClosedWayMatcher) {
      addClosedWay(rule);
    } else if (rule.closedMatcher is LinearWayMatcher) {
      addOpenWay(rule);
    } else if (rule.closedMatcher is AnyMatcher) {
      addClosedWay(rule);
      addOpenWay(rule);
      addNode(rule);
    } else {
      print("Unknown closedMatcher ${rule.closedMatcher} for any");
    }
  } else {
    print("Unknown elementMatcher ${rule.elementMatcher}");
  }
  if (rule is PositiveRule) {
    if (debug)
      print(
          "${' ' * level * 2}Zoom: ${rule.zoomlevelRange.zoomlevelMin} - ${rule.zoomlevelRange.zoomlevelMax}, ${rule.elementMatcher is ElementWayMatcher ? "Way" : rule.elementMatcher is ElementNodeMatcher ? "Node" : "Any Element"}, ${rule.closedMatcher is ClosedWayMatcher ? "Closed" : rule.closedMatcher is LinearWayMatcher ? "Open" : rule.closedMatcher is AnyMatcher ? "OpenOrClosed" : "Unknown"}, keyMatcher: ${rule.keyMatcher}, valueMatcher: ${rule.valueMatcher}");
  } else if (rule is NegativeRule) {
    if (debug)
      print(
          "${' ' * level * 2}Zoom: ${rule.zoomlevelRange.zoomlevelMin} - ${rule.zoomlevelRange.zoomlevelMax}, ${rule.elementMatcher is ElementWayMatcher ? "Way" : rule.elementMatcher is ElementNodeMatcher ? "Node" : "Any Element"}, ${rule.closedMatcher is ClosedWayMatcher ? "Closed" : rule.closedMatcher is LinearWayMatcher ? "Open" : rule.closedMatcher is AnyMatcher ? "OpenOrClosed" : "Unknown"}, attributeMatcher: ${rule.attributeMatcher}");
  } else {
    print("${' ' * level * 2}Unknown rule ${rule.runtimeType}");
  }
  if (rule.instructions is InstructionInstructions) {
    for (RenderInstructionNode renderInstruction in (rule.instructions as InstructionInstructions).renderInstructionNodes) {
      if (debug) print("${' ' * level * 2}--> Node ${renderInstruction.runtimeType}");
      if (renderInstruction is RenderinstructionCaption) {
        String? textKey = renderInstruction.base.textKey?.key;
        if (textKey != null) keys.add(textKey);
      }
    }
    for (RenderInstructionWay renderInstruction in (rule.instructions as InstructionInstructions).renderInstructionOpenWays) {
      if (debug) print("${' ' * level * 2}--> Open Way ${renderInstruction.runtimeType}");
      if (renderInstruction is RenderinstructionCaption) {
        String? textKey = renderInstruction.base.textKey?.key;
        if (textKey != null) keys.add(textKey);
      } else if (renderInstruction is RenderinstructionPathtext) {
        String? textKey = renderInstruction.base.textKey?.key;
        if (textKey != null) keys.add(textKey);
      }
    }
    for (RenderInstructionWay renderInstruction in (rule.instructions as InstructionInstructions).renderInstructionClosedWays) {
      if (debug) print("${' ' * level * 2}--> Closed Way ${renderInstruction.runtimeType}");
      if (renderInstruction is RenderinstructionCaption) {
        String? textKey = renderInstruction.base.textKey?.key;
        if (textKey != null) keys.add(textKey);
      } else if (renderInstruction is RenderinstructionPathtext) {
        String? textKey = renderInstruction.base.textKey?.key;
        if (textKey != null) keys.add(textKey);
      }
    }
  } else {
    for (Shape shape in (rule.instructions as ShapeInstructions).shapeNodes) {
      if (debug) print("${' ' * level * 2}--> Node ${shape.runtimeType}, level ${shape.level}");
      if (shape is ShapeCaption) {
        String? textKey = shape.textKey?.key;
        if (textKey != null) keys.add(textKey);
      }
    }
    for (Shape shape in (rule.instructions as ShapeInstructions).shapeOpenWays) {
      if (debug) print("${' ' * level * 2}--> Open Way ${shape.runtimeType}, level ${shape.level}");
      if (shape is ShapeCaption) {
        String? textKey = shape.textKey?.key;
        if (textKey != null) keys.add(textKey);
      } else if (shape is ShapePathtext) {
        String? textKey = shape.textKey?.key;
        if (textKey != null) keys.add(textKey);
      }
    }
    for (Shape shape in (rule.instructions as ShapeInstructions).shapeClosedWays) {
      if (debug) print("${' ' * level * 2}--> Closed Way ${shape.runtimeType}, level ${shape.level}");
      if (shape is ShapeCaption) {
        String? textKey = shape.textKey?.key;
        if (textKey != null) keys.add(textKey);
      } else if (shape is ShapePathtext) {
        String? textKey = shape.textKey?.key;
        if (textKey != null) keys.add(textKey);
      }
    }
  }
  for (Rule subRule in rule.subRules) {
    analyzeRule(subRule, level + 2);
  }
}