Available on:
* web (mobile or desktop): https://alexbarry.github.io/AlexCalc/
* Android: https://play.google.com/store/apps/details?id=net.alexbarry....
Some neat features:
* LaTeX equation display (I hated counting brackets on my old graphing calculators back in college, now I wouldn't have to if I wasn't ~10 years late in making this)
* variables (you can store variables with `1 + 2 -> x`, then access them `x^2 - 3`)
* unit operations, and unit conversions, e.g. `10 km / 2 minutes to mph`, or more fancily: `sqrt((3 kOhm + j*100 mH * 1000 kHz)/(1 S + j * 1 nF * 1000 kHz))`
* complex numbers (specifically focused on making it easy to enter complex numbers in polar form, in degrees, e.g. `5 angle 90`, but press the "degree" button)
* can enter input either via button presses or typing, so copying and pasting inputs works well
The core calculator parsing, evaluating, and LaTeX generation is in C++, with CMake build files. Using emscripten[0], this compiles to webassembly for the web version, and I can also compile this for Android and use JNI.
The library converting my generated LaTeX code to graphics is "MathJax"[1], a really nice browser library that I loved working with both in the web version and in the Android WebView.
I'm happy to receive any feedback at all. One big weakness currently are the syntax error messages, I haven't yet implemented a way to point to a particular position where an error occurs. If there is some nice parsing library that I could use instead, I might consider switching to that if it isn't too difficult. Currently the parsing uses a bunch of (fairly simple) regular expressions (e.g. check for number, check for optional unit, check for binary operator, add to stack, collapse stack. This ends up with a tree of nodes, and then this tree can either be evaluated or converted to LaTeX.)
I'm also interested in hearing any strategies for a decent cross platform UI. I didn't want to just include the HTML UI in a WebView on Android, since I figured it wouldn't be a great user experience. Originally I thought it would be small enough that I could just write two separate copies... but it turns out that there is a lot more UI code than I expected (automatically insert multiplication symbols on button presses, input history, storing "recently used units" when the button is pressed, etc...)