shiny/iconvg: add UpgradeToFileFormatVersion1

The iconvg Go implementation started at in
2016, speaking a file format retroactively named FFV0 (File Format
Version 0). The* packages were created
more recently in 2021 and will speak a revised format, FFV1.

The long term plan is for the packages to *only* speak
FFV1. The package (this package) will continue to speak
FFV0 directly and will additionally delegate decoding FFV1 to the packages. FFV0 will be considered a deprecated experiment
(it was marked EXPERIMENTAL ever since its inception). See

This commit, which decodes FFV0 and encodes FFV1, lives in the packages, since it involves FFV0. Testing it (beyond the
basic consistency checks in upgrade_test.go) lives in the
packages, since that involves decoding FFV1. For example, some outputs
of the UpgradeToFileFormatVersion1 function (added by this commit) were
checked in as

Change-Id: Ib5861ae97928cf31faf207b915568532e2624f09
Trust: Nigel Tao <>
Reviewed-by: Andrew Gerrand <>
6 files changed
tree: 18e663504f7fea8cd6a11f224a653323de41fa80
  1. apidiff/
  2. cmd/
  3. ebnf/
  4. ebnflint/
  5. errors/
  6. event/
  7. fsnotify/
  8. inotify/
  9. internal/
  10. io/
  11. jsonrpc2/
  12. mmap/
  13. rand/
  14. shiny/
  15. shootout/
  16. sumdb/
  17. utf8string/
  18. vulndb/
  19. winfsnotify/
  20. .gitattributes
  21. .gitignore
  23. codereview.cfg
  26. go.mod
  27. go.sum



This subrepository holds experimental and deprecated (in the old directory) packages.

The idea for this subrepository originated as the pkg/exp directory of the main repository, but its presence there made it unavailable to users of the binary downloads of the Go installation. The subrepository has therefore been created to make it possible to go get these packages.

Warning: Packages here are experimental and unreliable. Some may one day be promoted to the main repository or other subrepository, or they may be modified arbitrarily or even disappear altogether.

In short, code in this subrepository is not subject to the Go 1 compatibility promise. (No subrepo is, but the promise is even more likely to be violated by go.exp than the others.)

Caveat emptor.