This would likely be the best answer, but is unfinished. You might like to contribute to the project: