scan method

  1. @override
Safety<bool> scan(
  1. SyntaxScanner<Object, Object> scanner
)

Implementation

@override
Safety<bool> scan(SyntaxScanner scanner) {

    final log = Log(classLocation: runtimeType, functionLocation: 'scan');

    // indent となる場合
    // 1. 直前が存在しない(file の開始)
    // 2. 直前が改行

    final lookIndex = scanner.lookIndex;

    switch (lookIndex) {
    // 1
    case 0:

        // 直前が存在しない
        break;

    case _:

        // 1 より必ず return.
        final justBefore = scanner.source.elementAt(lookIndex - 1);
        // 直前が改行
        if (justBefore is NewLine) break;

        return Safety(false, log);

    }

    final firstResult = scanner.look();
    log.add(firstResult);
    final first = firstResult.wrapped;
    if (first is! SpaceCollection) {
        scanner.reset();
        return Safety(false, log);
    }

    final result = Indent(first);
    scanner.scan(result);

    return Safety(true, log);

}