## Token Defaults Generator

Script that generates component theme data defaults based on token data.

## Usage
Run this program from the root of the git repository:
```
dart dev/tools/gen_defaults/bin/gen_defaults.dart [-v]
```

This updates `generated/used_tokens.csv` and the various component theme files.

## Templates

There is a template file for every component that needs defaults from
the token database. These templates are implemented as subclasses of
`TokenTemplate`. This base class provides some utilities and a structure
for adding a new block of generated code to the bottom of a given file.

Templates need to override the `generate` method to provide the generated
code block as a string.

See `lib/fab_template.dart` for an example that generates defaults for the
Floating Action Button.

## Tokens

Tokens are stored in JSON files in `data/`, and are sourced from
an internal Google database.

`template.dart` should provide nearly all useful token resolvers
(e.g. `color`, `shape`, etc.). For special cases in which one shouldn't
be defined, use `getToken` to get the raw token value. The script, through
the various revolvers and `getToken`, validates tokens, keeps track of
which tokens are used, and generates `generated/used_tokens.csv`.
