Pull requests are welcome. It is best if you add a unit test to accompany any changes you make.
- This project was originally ported from here four years ago, but many subsequent updates have been made there that should be incorporated into this library.
- Some functions are long and would be better broken into smaller ones.