:boom: BREAKING CHANGES
- Mapping configuration files have changed, and the programmatic API has changed.
Please visit the [migration guide](https://roedoejet.github.io/g2p/latest/migration-2/) for information on how to update 1.x mappings to g2p 2.x and other changes.
- due to [`1d8e4fb`](https://github.com/roedoejet/g2p/commit/1d8e4fb665a6d3c066b1d8b0ac635390887d025a) - switch to pydantic 2 *(commit by roedoejet)*:
Requires python 3.7 (dropped support for Python 3.6).
:sparkles: New Features
- [`fd33a26`](https://github.com/roedoejet/g2p/commit/fd33a26023e6038660858fe8699d181fc3c42390) - **cli**: add update-schema command *(commit by roedoejet)*
- [`f85c4f2`](https://github.com/roedoejet/g2p/commit/f85c4f283c19c44dad4fd51f166e15dc21802cd2) - use json for network as well *(commit by dhdaines)*
- [`b01ec23`](https://github.com/roedoejet/g2p/commit/b01ec234e86f067647c5f57412c0f426a9b5655b) - upgrade networkx now that we can *(commit by dhdaines)*
- [`9fe200d`](https://github.com/roedoejet/g2p/commit/9fe200d83dd6ea433b10f5348e605ce3a97ae729) - **schema**: update schema generation to include dialect spec by default *(commit by roedoejet)*
- [`a04aeff`](https://github.com/roedoejet/g2p/commit/a04aeff3918eaac05b37ffc70ba8b518d13b7955) - add case preservation option to mappings *(commit by roedoejet)*
- [`c31c66b`](https://github.com/roedoejet/g2p/commit/c31c66bd4632182856490c5186ad3374fae950c5) - g2p-studio also needs to support preserve_case *(commit by joanise)*
- [`7447fe6`](https://github.com/roedoejet/g2p/commit/7447fe656a5b6877b3f50f8116bbf0acbc8101f5) - make x caron equiv to x dot below in clm *(commit by joanise)*
- [`d4fdc8c`](https://github.com/roedoejet/g2p/commit/d4fdc8caa40fbb3e5dd849f9963b826130715931) - **str**: accept space+comb-cedilla or space+comb-comma as equiv to cedilla *(commit by joanise)*
:bug: Bug Fixes
- [`20e3bcb`](https://github.com/roedoejet/g2p/commit/20e3bcbae840c821fb6f5bf348522b4c0c7897f8) - **pkl**: remove generated default date *(commit by roedoejet)*
- [`22644e7`](https://github.com/roedoejet/g2p/commit/22644e7cf5fb0fbf6ad07086c23eb86095b0f9e5) - **studio**: refactor to 'rules' instead of 'mapping' key *(commit by roedoejet)*
- [`30dc282`](https://github.com/roedoejet/g2p/commit/30dc282bd26180372af9f36e10ad300b7b97866c) - **ci**: require 3.8 for windows ci *(commit by roedoejet)*
- [`1df2dfd`](https://github.com/roedoejet/g2p/commit/1df2dfd8256485ec7301d0d52324bc011a2ba962) - add miscellaneous style fixes and typos *(commit by roedoejet)*
- [`5ccd595`](https://github.com/roedoejet/g2p/commit/5ccd5950754d4dcd89e4c4954eeba404a59c8625) - **update**: prevent loading all the mappings multiple times *(commit by roedoejet)*
- [`45d5ecf`](https://github.com/roedoejet/g2p/commit/45d5ecf26eaeefc33af6f62b19ba22a6e9061aa6) - **tests**: fix studio tests *(commit by roedoejet)*
- [`16e4869`](https://github.com/roedoejet/g2p/commit/16e4869ae9bd60370fc7267b3e95c7a4ecb15e75) - restore Python 3.7 compatibility *(commit by joanise)*
- [`060a8aa`](https://github.com/roedoejet/g2p/commit/060a8aa77b9eff8c911ab04ec6d593dc00890f5b) - use more generic variable names *(commit by dhdaines)*
- [`ac2d42d`](https://github.com/roedoejet/g2p/commit/ac2d42dc6c665f1b55fe58cb394b5d5496008e53) - **deps**: back off networkx dep for python 3.7 *(commit by dhdaines)*
- [`fa27730`](https://github.com/roedoejet/g2p/commit/fa27730399f631bdafc40a7127b091cbd009e632) - **crg**: fix various rule feeding and ordering bugs for Michif *(commit by joanise)*
- [`007aef5`](https://github.com/roedoejet/g2p/commit/007aef5b28afceb15d448c3bae019fd555ef9485) - **crg**: manually clean up crg-ipa -> eng-ipa *(commit by joanise)*
- [`0e9271a`](https://github.com/roedoejet/g2p/commit/0e9271af789c976682dcfcec10f85fcef2c52f37) - **test**: fix failure in test failure *(commit by dhdaines)*
- [`15d5b64`](https://github.com/roedoejet/g2p/commit/15d5b64a91cc6f69a3067de85da952c1c144a409) - test file could have arbitrary extra fields *(commit by dhdaines)*
- [`25f4713`](https://github.com/roedoejet/g2p/commit/25f4713dddb4a848b5af3060f654ab814ad44ae2) - output a compatible config-g2p.yaml though some filenames change *(commit by dhdaines)*
- [`32fe87c`](https://github.com/roedoejet/g2p/commit/32fe87c6dbe18366fb7183ab8ae91bd165765905) - add config_only option to export_to_dict *(commit by dhdaines)*
- [`b5f9747`](https://github.com/roedoejet/g2p/commit/b5f974745b850f00761af6d77df76fb47a0de3b9) - um, yes, model_dump() exists *(commit by dhdaines)*
- [`2e5e560`](https://github.com/roedoejet/g2p/commit/2e5e5607020bad2050b9c5defee16b843850e925) - do not exclude defaults, just inappropriate keys for config *(commit by dhdaines)*
- [`9975100`](https://github.com/roedoejet/g2p/commit/9975100a5d9c775edf2ddc49661fd8ad625454cd) - add missing double vowel vowels to crg *(commit by dhdaines)*
- [`83b6c1c`](https://github.com/roedoejet/g2p/commit/83b6c1c0cb7f9b7ca2d8a95f79aa4e8adcc98559) - cursèd unicode g strikes again *(commit by dhdaines)*
- [`f766a66`](https://github.com/roedoejet/g2p/commit/f766a66ba313d30708dcfee4773273ddecb7c7bd) - remove werkzeug lock since it is no longer necessary *(commit by joanise)*
- [`1c7792f`](https://github.com/roedoejet/g2p/commit/1c7792f170db87376b7a4cad993b2253a0f51f2c) - correct the unit testing output for g2p mapping errors *(commit by joanise)*
- [`996a060`](https://github.com/roedoejet/g2p/commit/996a060bef49ba2bb9be1c85850491c77d01663e) - remove unused kwargs in transducer call *(commit by roedoejet)*
- [`d1aa6dd`](https://github.com/roedoejet/g2p/commit/d1aa6dd02aa496aab121d6848bc6dd43b03b0b1e) - sort rules without explicit indices *(commit by roedoejet)*
- [`d768d74`](https://github.com/roedoejet/g2p/commit/d768d749fc227ca70279c2e1725b42305c6b2ba0) - detect incompatible case_sensitive+preserve_case instances *(commit by joanise)*
- [`35868bb`](https://github.com/roedoejet/g2p/commit/35868bb8a3250bf52452740759244bff86beaca9) - preserve indices through prevent-feeding intermediate form *(commit by joanise)*
- [`01ff75e`](https://github.com/roedoejet/g2p/commit/01ff75e1c34aab1c679df8c9c32b6c334c40330f) - fix coverage issues and grepping for slow imports *(commit by joanise)*
- [`251739a`](https://github.com/roedoejet/g2p/commit/251739a5f614714c698662700e0aa3502f68c4d9) - **deps**: lock numpy<2 because 2.0.0 is coming and has breaking changes *(commit by joanise)*
- [`27d0d2d`](https://github.com/roedoejet/g2p/commit/27d0d2d5cc12849a51c9e0bb10b69f36558c53c1) - rename crj and crl "East Cree, Nor/Southern" so they sort nicely *(commit by joanise)*
- [`17519d8`](https://github.com/roedoejet/g2p/commit/17519d811ee96c035ee0ba888e6348960c5fc2a4) - y in oka should go to /j/, palatal glide, not /y/ *(commit by joanise)*
- [`b52a819`](https://github.com/roedoejet/g2p/commit/b52a819ef3551d3523a95706cf7c9ed97820426d) - issue a fatal error when reading an empty mapping *(commit by joanise)*
- [`95bf4be`](https://github.com/roedoejet/g2p/commit/95bf4be192cbeb24d9c78da4318ff050f46dedcf) - **app**: errors in mappings should just trigger console warnings *(commit by joanise)*
- [`5993242`](https://github.com/roedoejet/g2p/commit/5993242788e636ccedda9f1216f6b05c461057ff) - **str**: cedilla is now the default glottal stop character *(commit by joanise)*
- [`d18d17a`](https://github.com/roedoejet/g2p/commit/d18d17a33c3fc02d6e9125daff7a0897317c9487) - publish schemas only for major.minor, ignoring .patch *(commit by joanise)*
- [`f2a7563`](https://github.com/roedoejet/g2p/commit/f2a7563a03ff62eca40579ddf268e25f96bfef96) - assertEquals is removed from Python 3.12 *(commit by joanise)*
- [`5592659`](https://github.com/roedoejet/g2p/commit/55926592686c19a3c4a06df495ff50407fca4b8b) - close xlsx workbook after reading *(commit by joanise)*
- [`7f34057`](https://github.com/roedoejet/g2p/commit/7f3405766fe34a04d5c99adf47fe85c3fe42b25d) - loading xlsx workbooks should not fail on empty cells *(commit by joanise)*
:zap: Performance Improvements
- [`a5f51b7`](https://github.com/roedoejet/g2p/commit/a5f51b7114e3b7a9fd7cd7738fefec5997f97b10) - only create APP when it is really needed *(commit by joanise)*
- [`0b8d773`](https://github.com/roedoejet/g2p/commit/0b8d773282f4c1ae6f7b4ba6b348ea1717842673) - defer a whole bunch of expensive imports from the CLI *(commit by joanise)*
- [`978153b`](https://github.com/roedoejet/g2p/commit/978153b8155a224db9d6778c914aa16bd20cc1d6) - remove the app from the cli to make the CLI faster *(commit by joanise)*
:recycle: Refactors
- [`eec8e82`](https://github.com/roedoejet/g2p/commit/eec8e82d33f268c91b8abb66345574962644e84d) - massive refactor to pydantic *(commit by roedoejet)*
- [`1d8e4fb`](https://github.com/roedoejet/g2p/commit/1d8e4fb665a6d3c066b1d8b0ac635390887d025a) - switch to pydantic 2 *(commit by roedoejet)*
- [`a753e07`](https://github.com/roedoejet/g2p/commit/a753e07c31ab129b711bead45574c204927abb3d) - **config**: require a 'mappings' key *(commit by roedoejet)*
- [`006d370`](https://github.com/roedoejet/g2p/commit/006d370a85aeff56d89cb5439a1b6f5944622509) - in_char and out_char to rule_input and rule_output *(commit by roedoejet)*
- [`b448523`](https://github.com/roedoejet/g2p/commit/b4485230718ab72b094ddb9ae1842187649ff184) - change to config-g2p.yaml *(commit by roedoejet)*
- [`5a67040`](https://github.com/roedoejet/g2p/commit/5a670408721b5a433a97102e6e0a5605adb34a67) - change langs.pkl to langs.json *(commit by roedoejet)*
- [`5b259ff`](https://github.com/roedoejet/g2p/commit/5b259ffeaab38251335c50e73ec7d2136eee7b41) - separate data and path for rules, abbreviations, and alignments *(commit by roedoejet)*
- [`ddefe77`](https://github.com/roedoejet/g2p/commit/ddefe77f55eedc630cb9f1e0c23ed2cc66b9f634) - make mapping.rules the only way to get to the rules *(commit by joanise)*
- [`090145e`](https://github.com/roedoejet/g2p/commit/090145eff53470e8a23b789384445d15aba71a6d) - **docs**: change docs to mkdocs *(commit by roedoejet)*
- [`3c8f51a`](https://github.com/roedoejet/g2p/commit/3c8f51ad848fe8c3c8fec65b218118e8bf1539ea) - **docs**: add nav footer and move python example *(commit by roedoejet)*
- [`df0b61e`](https://github.com/roedoejet/g2p/commit/df0b61ed99f38a276e4db4240663bb5a261df158) - move strip_index_notation function to general utils module *(commit by roedoejet)*
- [`8363cfa`](https://github.com/roedoejet/g2p/commit/8363cfa8c3dcba1171d027d5130710b896e2af41) - move strip_index_notation to mappings/utils.py *(commit by joanise)*
- [`5d2e3bb`](https://github.com/roedoejet/g2p/commit/5d2e3bb0be0b1a0e18e4edb6d2d59f775b28fa5d) - use ABCs to keep typing despite deferring imports *(commit by joanise)*
- [`c9c7c1e`](https://github.com/roedoejet/g2p/commit/c9c7c1e46cd2c0c4545d7912427f9cffafec2be3) - put types in types.py for more clarity *(commit by joanise)*
- [`2379fe4`](https://github.com/roedoejet/g2p/commit/2379fe459a19316c621d645853731d25dad3f4d9) - remove dead code, create_app was only needed for the cli *(commit by joanise)*
- [`b79480f`](https://github.com/roedoejet/g2p/commit/b79480f66696c20dae7b294fd27c5193ddf6bc6e) - replace deprecated pydantic v1 validator by v2 equivalents *(commit by joanise)*
- [`91e03a0`](https://github.com/roedoejet/g2p/commit/91e03a03fe1794608a81a8a2631de3f03182d88e) - make test runners DRYer and let dev be default *(commit by joanise)*
- [`414c812`](https://github.com/roedoejet/g2p/commit/414c812efc36ed7ebe107c0bf2a59b5f21b9c2d6) - version numbers are now PEP 440 compliant, not date based *(commit by joanise)*
:white_check_mark: Tests
- [`482fbc6`](https://github.com/roedoejet/g2p/commit/482fbc6a6d2288f054ccfecf9211e12e32f43a83) - add a test case for generate-mapping --ipa *(commit by joanise)*
- [`3811a9e`](https://github.com/roedoejet/g2p/commit/3811a9e77d4a98676a4339c8c537eecd2f8a2470) - **kwk**: minimally exercice kwk BOAS->Umist case preservation *(commit by joanise)*
- [`4c3e102`](https://github.com/roedoejet/g2p/commit/4c3e1024e00cb89e32930078e31d4a959f2a7919) - exercise index preservation through prevent-feeding *(commit by joanise)*
- [`2156be8`](https://github.com/roedoejet/g2p/commit/2156be8044d82046b70d2ab3f78bffc9657422c9) - exercise create_app() in unit testing *(commit by joanise)*