It seems I didn't completely screw up this summer with CBinding, so it is now on the main MonoDevelop trunk :) :)
To try out CBinding from now on all you have to do is run configure/autogen.sh with --enable-c and thats it!
CBinding is functional on svn as of revision 85496.
Hope you enjoy and don't forget to get those bugs reported ;)
viernes, 7 de septiembre de 2007
sábado, 18 de agosto de 2007
Twelfth Status Report
This week I mostly did small improvements and fixed bugs, among the more notable I made certain paths to be serialized as relative to the project, attempt to always parse functions from it's prototype unless it does not have one, added commands to context menus, hide resources node in the project pad, added custom icons to stock icons so they can be used in the completion widget, made it possible for C/C++ projects to depend on other C/C++ projects that compile into a shared library, keep a project's internal pkg-config package updated and implemented IDeployable.
Other than that I added project templates for console project, static library project and shared library project for both C and C++.
Other than that I added project templates for console project, static library project and shared library project for both C and C++.
sábado, 11 de agosto de 2007
Building libbanshee with MonoDevelop
Today I checked out Banshee and made a MonoDevelop C Project for libbanshee using CBinding these are the current requirements to do this:
It should be noted that I'm not at all familiar with the banshee build process, so I just made the output of libbanshee go to the build folder in the banshee root folder, I'm not sure if this is correct behavior.
- You must have a recent MonoDevelop svn checkout (There are breaking changes that did not make it into MD 0.15, specifically an updated addin extension tree) so the checkout needs to be quite recent.
- The banshee source which comes with an MD solution, I checked out todays svn, I'm not sure if the packaged tarball includes this.
- Download this file: http://groups.google.com/group/mono-soc-2007/web/libbanshee.tar.gz
- CBinding.dll: This is the C/C++ AddIn I have been working on, all you have to do is copy it to (assumming you use make run to run your svn MD) {MD_ROOT}/build/AddIns/BackendBindings. Alternatively you can follow these instructions if you want to keep up with CBinding development from svn: http://mdmagsoc.blogspot.com/2007/07/testing-out-current-work.html.
- libbanshee.mdp: This is the MonoDevelop project for libbanshee, just copy it to {BANSHEE_ROOT}/libbanshee
- libbanshee.diff (optional): This is a patch that adds libbanshee.mdp to the banshee MD solution.
It should be noted that I'm not at all familiar with the banshee build process, so I just made the output of libbanshee go to the build folder in the banshee root folder, I'm not sure if this is correct behavior.
sábado, 4 de agosto de 2007
Tenth Status Report
I spent most of this week learning ANTLR which is a parser generator, my hope is that I would be able to use this tool to generate a simple parser to keep track of variables, their, type, scope and name. Apparently there is no easy way to instruct the parser to filter out everything else except what I'm interested in, so doing this won't be so simple, and I didn't get much real work done in this area (except learn a bunch of ANTLR stuff).
I also implemented :: completion which means I only have left to implement . and -> completion but for these I do need the parser. Here is a screencast to show the completion work that is done by now:
http://mono-soc-2007.googlegroups.com/web/completion.ogv?gda=VF70_T8AAADG9NcZGhrdQoBkIcN6-CI_4f_VQDJMRqqnHJzwfvt8rWG1qiJ7UbTIup-M2XPURDRqGo9gGxnkqAMosQl8q6_d
While watching the screencast I noticed there was some inconsistencies between the icons used in the completion widget and those used in the class pad, I will fix this shortly.
So I think CBinding is pretty much complete for now, I think now it is more important to test, bugfix and polish current work, so unless something comes up I will probably spend the rest of soc doing this and working on the parser.
I also implemented :: completion which means I only have left to implement . and -> completion but for these I do need the parser. Here is a screencast to show the completion work that is done by now:
http://mono-soc-2007.googlegroups.com/web/completion.ogv?gda=VF70_T8AAADG9NcZGhrdQoBkIcN6-CI_4f_VQDJMRqqnHJzwfvt8rWG1qiJ7UbTIup-M2XPURDRqGo9gGxnkqAMosQl8q6_d
While watching the screencast I noticed there was some inconsistencies between the icons used in the completion widget and those used in the class pad, I will fix this shortly.
So I think CBinding is pretty much complete for now, I think now it is more important to test, bugfix and polish current work, so unless something comes up I will probably spend the rest of soc doing this and working on the parser.
viernes, 27 de julio de 2007
Ninth Status Report
This week I started by implementing parameter completion, I'm pretty satisfied with the result, the parameter list widget is shown as soon as you press (, and it behaves like it does on C#, you can see other overloads by using the up and down arrow keys and the current parameter is highlighted in blue (this was already provided by MD).
Then I created "global" code completion, when you press ctrl+space it shows a list of available namespaces, classes, functions, structures, constants, etc. This was pretty straight forward since it doesn't have to resolve anything.
Also I changed how the class pad tree is built, instead of creating a single tags file for the entire project and then parsing that, now I create tags for each file (and it's non system #included files) and update the class pad information with this. This is done each time a file is saved.
Here is a screen shot of a C++ project and it's (wacky) class pad tree:

I also wanted to upload some images of the code completion and parameter completion, unfortunately when I press the screenshot key the widgets disappear and don't appear on the screenshots.
Challenges:
Supposedly this week I was going to create a simple parser to keep track of local variables and in what method the caret is currently in so that I can provide completion for something like coord. (and then the completion widget with the available fields would appear), but I found this would not be so simple and it would be very important that it is fast and efficient, so I decided to put it off until I have some information on what a good way to do this would be. So if anyone knows of any code that does something like this that I can look at or has any advice on how I should do this, I would love to know.
Then I created "global" code completion, when you press ctrl+space it shows a list of available namespaces, classes, functions, structures, constants, etc. This was pretty straight forward since it doesn't have to resolve anything.
Also I changed how the class pad tree is built, instead of creating a single tags file for the entire project and then parsing that, now I create tags for each file (and it's non system #included files) and update the class pad information with this. This is done each time a file is saved.
Here is a screen shot of a C++ project and it's (wacky) class pad tree:

I also wanted to upload some images of the code completion and parameter completion, unfortunately when I press the screenshot key the widgets disappear and don't appear on the screenshots.
Challenges:
Supposedly this week I was going to create a simple parser to keep track of local variables and in what method the caret is currently in so that I can provide completion for something like coord. (and then the completion widget with the available fields would appear), but I found this would not be so simple and it would be very important that it is fast and efficient, so I decided to put it off until I have some information on what a good way to do this would be. So if anyone knows of any code that does something like this that I can look at or has any advice on how I should do this, I would love to know.
Etiquetas:
C++,
Google,
gsoc2007,
Mono,
MonoDevelop,
Summer of Code
viernes, 20 de julio de 2007
Eight Status Report
* Accomplished this week:
Implemented a better formatting strategy using a text editor extension.
Implemented dependency tracking.
Projects can now reference other projects in the solution. The way this is done is each project that compiles into a static library has a pkg package and other projects add that package to their project packages. The edit packages dialog has been updated to better support this.
Some bugs were fixed.
* Plans for next week:
For next week I will create a file level parser to keep track of local variables and parameters for code completion.
* Interesting documents:
http://sourceware.org/automake/automake.html#Dependency-Tracking-Evolution
Implemented a better formatting strategy using a text editor extension.
Implemented dependency tracking.
Projects can now reference other projects in the solution. The way this is done is each project that compiles into a static library has a pkg package and other projects add that package to their project packages. The edit packages dialog has been updated to better support this.
Some bugs were fixed.
* Plans for next week:
For next week I will create a file level parser to keep track of local variables and parameters for code completion.
* Interesting documents:
http://sourceware.org/automake/automake.html#Dependency-Tracking-Evolution
viernes, 13 de julio de 2007
Seventh Status Report
* This weeks accomplishments:
Finally got the class pad to get built in a separate thread, I'm not entirely satisfied with the implementation, but it will do for now.
Implemented support for precompiled headers in gcc and g++.
Implemented dragging and dropping of packages.
Implemented a very simple FormattingStrategy, but I think I will have to redo it so it will be much more robust.
Cleaned up the code a bit, fixed several bugs and did some small optimizations.
* Plans for next week:
I'm going to start by remaking the FormattingStrategy, there seems to be two ways to do this, subclassing and registering a Formatter which is what I did now, or subclassing and registering a TextEditorExtension, which I think is what the C# binding does. The first option (what I'm doing now) seems to be a bit restrictive, I couldn't work very well with it because it's behavior seems to be a bit strange, for example when typing a '}' I wanted to remove a '\t' from the beginning of that line, but it seems the method got called twice so I would end up removing two tabs (or getting an index out of bounds exception if there was only one tab. So I'm going to look more into this and see if I can figure it out or try the second method.
Also next week I'd like to implement dependency tracking.
* Interesting documents I used:
http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
Finally got the class pad to get built in a separate thread, I'm not entirely satisfied with the implementation, but it will do for now.
Implemented support for precompiled headers in gcc and g++.
Implemented dragging and dropping of packages.
Implemented a very simple FormattingStrategy, but I think I will have to redo it so it will be much more robust.
Cleaned up the code a bit, fixed several bugs and did some small optimizations.
* Plans for next week:
I'm going to start by remaking the FormattingStrategy, there seems to be two ways to do this, subclassing and registering a Formatter which is what I did now, or subclassing and registering a TextEditorExtension, which I think is what the C# binding does. The first option (what I'm doing now) seems to be a bit restrictive, I couldn't work very well with it because it's behavior seems to be a bit strange, for example when typing a '}' I wanted to remove a '\t' from the beginning of that line, but it seems the method got called twice so I would end up removing two tabs (or getting an index out of bounds exception if there was only one tab. So I'm going to look more into this and see if I can figure it out or try the second method.
Also next week I'd like to implement dependency tracking.
* Interesting documents I used:
http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
Etiquetas:
C++,
Google,
gsoc2007,
Mono,
MonoDevelop,
Summer of Code
Suscribirse a:
Entradas (Atom)