I’m having a bit of a pause between the exams, so I’m doing some hacking on the new Octave backend for Cantor. Thing are going very well, probably better (especially faster) that I expected.
The basic input-output sending between Cantor and the command-line process was working some time ago, and I recently added support for embedding graphics into the worksheet.
This week I was working on cosmetics: Autocompletion, syntax highlighting and pop-up help.
Completion was easy, octave provides a completion_matches() function which takes a string argument and return all functions and variables starting with that string.
Syntax help was also quite straightforward, through the use of Octave’s built-in help() command. Highlighting was where I spent most of the time, because as a command-line program Octave has no native support for it.
There’s a handy command called ‘who’ that lists all currently visible variables, so I retrieved the variable name list with it and used it in the highlighter. I then hardcoded a list of all recognised operators and keywords.
The toughest nut was getting a list of all functions from Octave. There’s no (at least known to me) equivalent to ‘who’ for functions, so I had to improvise. I didn’t want to hardcode all the functions, as is done for the Maxima backend, because, as we all know, hardcoding is bad, and there’s always the possibility of future changes to Octave language. The closest I could get is using completion_matches() with an empty string, but that returns all the internal constants, environment variables, and files in the current directory. I filtered them out the best I could, and the end result work well, despite there being more that 1600 functions.
Another think I worked on this week is getting as much plotting code as possible from C++ to an octave script. This not only unclutters the worksheet (there used to be a long line of commands instead of cantor_plot#d()), but makes simple changes to plotting faster by not requiring a recompile. Tweaking the size of the plot to prevent it from filling the whole page didn’t even need a new session, just an update to the script.
Posted by arieder on 19. June 2010 at 14:04
cool stuff. you totally rock!
Posted by Aditya Bhatt on 19. June 2010 at 16:19
I *need* this.
By the way, does/will cantor support Mathematica/Maple? That would be extra-rich dark delicious sinful chocolate icing on the cake 🙂
Posted by arieder on 19. June 2010 at 18:40
no it doesn’t support them, and probably won’t do anytime soon, unless someone else steps up to write it.(i won’t spend my free time working with non-free software)
Posted by mahousenshi on 19. June 2010 at 17:29
Nice work! If this export graph to EPS it’s will be qtoctave killer
Posted by noughmad on 19. June 2010 at 18:03
Cantor can export the graphs as images (but not EPS) from the right-click menu, if that’s what you mean. However, the .cws file Cantor saves is an archive that contains the graphs as EPS files, same as octave itself produces.
Posted by arieder on 19. June 2010 at 18:10
if the plot is in EPS format (as it is for maxima and octave backend) the right-click menu offers possibility to store as eps file (not image).
Posted by noughmad on 19. June 2010 at 18:20
Alexander is right (I can’t reply to his comment, dunno why). I see now that it depends on the filename.
Octave by default doesn’t append .eps to its output file name, and I tried exporting on an old file file created before I fixed that. Sorry for the confusion.
Posted by Kyran on 19. June 2010 at 18:22
Can’t you reuse the code highlighting from kate? It has a very nice matlab/octave “stylesheet”.
Posted by noughmad on 19. June 2010 at 18:45
For one, it doesn’t recognise functions and/or variables.
Posted by Mitchel on 15. August 2013 at 09:04
I will right away seize your rss as I can’t to find your e-mail subscription hyperlink or e-newsletter service. Do you’ve any?
Please permit me understand so that I may subscribe. Thanks.