content: // Copyright 2016 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  import 'dart:async';
  
  const String _kStartTag = '// START ';
  const String _kEndTag = '// END';
  
  Map<String, String> _exampleCode;
  
  Future<String> getExampleCode(String tag, String code) async {
    if (_exampleCode == null) await _parseExampleCode(code);
    return _exampleCode[tag];
  }
  
  Future<void> _parseExampleCode(String code) async {
    //final String code = await bundle.loadString('lib/gallery/example_code.dart') ??
    //'// lib/gallery/example_code.dart not found\n';
    _exampleCode = <String, String>{};
  
    final List<String> lines = code.split('\n');
  
    List<String> codeBlock;
    String codeTag;
  
    for (String line in lines) {
      if (codeBlock == null) {
        // Outside a block.
        if (line.startsWith(_kStartTag)) {
          // Starting a new code block.
          codeBlock = <String>[];
          codeTag = line.substring(_kStartTag.length).trim();
        } else {
          // Just skipping the line.
        }
      } else {
        // Inside a block.
        if (line.startsWith(_kEndTag)) {
          // Add the block.
          _exampleCode[codeTag] = codeBlock.join('\n');
          codeBlock = null;
          codeTag = null;
        } else {
          // Add to the current block
          // trimRight() to remove any \r on Windows
          // without removing any useful indentation
          codeBlock.add(line.trimRight());
        }
      }
    }
  }
  