Stage one of moving operators out of calc into their own interface. Operators will now be created using the Oper interface, and should be stored in lib/oper/. For now their tests are all grouped in oper_test but that may change.
These new operators are not used by the rest of the application, that's stage 2.
Update minusoper to handle integers, which don't have a precision of course, and thus fail the regex. also update oper_test to make sure I don't screw that up again.
update the pubspec to include paper elements and core elements, to pretty things up a bit.
Update calc to use the new Oper factory rather than its own now deleted oper hash to calculate.
updated calc unit tests to go with last commits removal of the oper hash and constructor. Calc's just a static method now.
Update rpncalc and associated tests to use the paper button, static calc and add the infix log and button.
This probably should have been two commits, my bad :(
Initial commit of shunting class, with unit tests. The unit tests only cover the simple, happy, path and shunting itself is not yet integrated into the rest of the application.
Update Parser to maintain state, Parser_test and rpncalc.dart are also updated to use the new stateful constructor. parser.parse is now gone, the constructor handles everything, with access to the tokens and the shunting log available via attributes.
There's room for more refactoring in parser to waste a little less time on temporaries but this is good enough for now.
Add identical tests to parser for infix mode. Ideally any test for rpn mode should have an infix counterpart asserting identical output.
Remove the debugging prints in shunting.
update the desugar method in parser to handle infix negation, and better handle rpn negation when there are strings around.
this update is kind of ugly, but it fixes some things, so that's nice.
update the calculator widget itself to allow infix, and display the infix log, also updates the html to stuff the infix log into a pre tag. The infix log could be prettier, but it's nice as it is I think.