# Codeviewer

A command-line application to highlight dart source code.

## Overview

Code segments are highlighted before the app is compiled.
This is done because the highlighting process can take 300ms to finish, creating
a noticeable delay when the demo switches to code page.

The highlighter takes all files in the `lib/demos/` folder and scans each.
Highlighted code widgets are stored in the
`lib/codeviewer/code_segments.dart` file.

## How to generate code segments

From the `gallery/` directory:
1. Make sure you have [grinder](https://pub.dev/packages/grinder) installed by
running `flutter pub get`.
2. Then run `flutter pub run grinder update-code-segments` to generate code
segments with highlighting.

## How to define a block of code to generate highlighting for

Wrap a block of code with lines `// BEGIN yourDemoName` and `// END` to mark it
for highlighting. The block in between, as well as any copyright notice and
imports at the beginning of the file, are automatically taken and highlighted,
and stored as `static TextSpan yourDemoName(BuildContext context)` in
`gallery/lib/codeviewer/code_segments.dart`. To display the code, go to
`gallery/lib/data/demos.dart`, and add `code: CodeSegments.yourDemoName,` to
your `GalleryDemoConfiguration` object.

## Multiple blocks of code

Use the following method to join multiple blocks of code into a single segment:
```
// BEGIN yourDemo#2
a();
// END
b();
// BEGIN yourDemo#1
c();
// END
```
The generated code will be
```
c();
a();
```

Code blocks can nest or overlap. In these cases, specify which file(s) to `END`.

The following source file
```
// BEGIN demoOne
a();
// BEGIN demoTwo
b();
// END demoOne
c();
// END demoTwo
```
will create the following segments:
(demoOne)
```
a();
b();
```
(demoTwo)
```
b();
c();
```
